自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

原创 bzoj4607

先分析可以得到先进行2操作再进行1操作不会更差。  考虑设cost[i][j]表示原本为i的字母全部变成了j的代价,那么代价等于原本为i,后来不是j的字符个数,如果i不等于j,代价还要加上C。现在先考虑对每个i选择一条最短的出边(g[i])。然后现在构成了一张图。  现在如果这张图中没有环,或者这张图全是大小为1的环,那么答案就是合法的,可以直接输出Σcost[i][g[i]]。(注意这里

2016-06-17 09:46:39 697

原创 bzoj4593

感谢王队长对本题的点拨...    我们先直接以1为根,考虑到一个点的代价貌似只和根与儿子节点有关。所以想到状态f[],h[],分别表示父亲还没炸,炸掉i子树的花费和父亲先被炸掉的花费,可以观察到h[i]TYPE A :    因为c[i] TYPE B :    现在c[i] c[v]并且f[v] - h[v] = c[v]时用h[v]更优,但是这样就完了吗?当然不是,

2016-05-28 14:28:06 1050

原创 bzoj4464

OJ上放的题解是网络流这里先放一份(然而是过不了的,血泪教训,40w个点,上百万条边,跑毛啊.)这里还是放一份代码.#include #include #include #include #include #include #include #include #define inf 1000000000using namespace std;struct node {int

2016-05-20 15:50:11 545

原创 bzoj4460

bzoj 4460提供一个n^3的做法.首先考虑原题的性质,很容易知道答案不会超过目标串的长度,于是答案可以枚举。然后我们可以枚举第一个字符是从第几行第几列开始的,然后之后的字典树暴力匹配.(n^4)(一共L个字典树,字典树i存的是每个串从位置i开始的后缀。)后来我发现其实第一个字符的列数可以不用枚举,我们先求出list[i][j]表示目标串中第i行能不能从给出的木桩中从位置j

2016-05-10 15:07:24 771 1

原创 bzoj4572

一个鬼畜的做法...(估计没人看,看了也没人写..)首先状压Dp应该都知道吧(然而yjq直接容斥强势艹过...),那么我们来优化状态,首先考虑不可能匹配成功的状态,把它们缩到一个状态,我们发现,哇!一下子少了好多状态!大概从几百万变成了5w-15w左右,但是Dp是状态数^2的,这样子肯定不行...然后一个鬼畜的优化就来了,我把与第一行匹配开始点相同的状态缩成一个状态,然后发现有一维的状态变成了

2016-04-28 18:31:46 947

原创 VK Cup 2016 round 2题解

VK CUP 2016 round 2Div2 :A:直接1,2,1,2的送,答案就是n / 3 * 2 + (n % 3 != 0)#include #include #include using namespace std;int n;int main() { cin>>n; cout<<n / 3 * 2 + (n % 3 != 0);}B:按照原图中

2016-04-27 15:47:48 695

原创 bzoj4505

考虑一位一位的枚举答案.    首先我们知道答案串(设当前枚举到的长度为L)与原串1到L,n-L+1到n是匹配的(这个性质很重要).    我们设f[i]表示从i开始长度为L的子串能不能和1-L匹配,每次L变化时首先更新一下f[i].    对于当前L,我们暂时把所有f为true的状态存入一个队列.然后我们考虑1-L一共有多少问号.    我们考虑爆搜每一个问号是什么颜色,然后对当

2016-04-15 17:17:31 708

原创 CQOI2016

T1:    大意:一个850个点,8500条边的图,问所有点对之间的最小割有多少种不同的权值。    分治最小割。(然而做这道题之前完全不知道是什么..%YY出来的lcr)。    一开始所有点在一个集合中,随便找两个点求一次最小割,然后会把点集分成两半,继续直到所有点都变成一个点为止(反正我们这儿唯一A的人就是这么说的...但是奇慢无比,应该是姿势不太对...)。    至

2016-04-12 16:30:35 773

原创 SCOI2016酱油记

Day-2&Day-1    急急忙忙学了好多几何和字符串的算法..Day0    随便刷了几道水题,半平面交,到了宾馆开始血浪...Day1    T1:瞄一眼发现是贪心,于是写了个AC自动机缩点..(还好学了AC自动机..直接trie树扒点估计不会..)    T2:看了之后发现完全不会..暴力都写不出来,当时就慌了,考完之后lcr说是线性基..%%%完美爆零。 

2016-04-11 20:13:37 1691

原创 Educational Codeforces Round 7

Educational Codeforces Round 7A:题意:给出一个序列,形式为1,1,2,1,2,3,1,2,3,4,......每个位置上是一个数而不是一个数位,为第n为是什么。(n       好老的题了,就是等差数列,原本还想二分,看到n范围就果断枚举了。#include #include #include #include #include #incl

2016-02-11 13:50:14 396

原创 AIM Tech Round Div 1

AIM Tech Round Div 1春节过完急急忙忙先来水几道题...A:题意:给定由一个字符串凿出一个图的过程:字符串仅有a,b,c三种字符,造出的图中第i个顶点表示原来的第i个字符,i与j有连边当且仅当s[i]与s[j]相同或者s[i]与s[j]是相邻的字符((a,b),(b,c)),(a,c)不算。现在给出由某个字符串造出的图,构造一个符合要求的字符串。我码了90行显然有问题

2016-02-10 18:27:57 670

原创 bzoj3572_hnoi2014 世界树

题目大意:给出一棵树,每次询问给出k[i]个点,如果点x离k[i]个点中的点j最近,那么称x被j管理,对于每次询问,给出k[i]个点每个点管理的点的数量(包括自己)。保证所有询问k[i]之和不超过300000,n       首先对于所有询问的点构建一棵虚树(废话)..       (其实虚树的特征看询问方式和数据范围的特点一般就能看出)。       那么现在问题在于如何统计答案

2016-02-03 16:35:10 659

原创 Codeforces round341 div2

Codeforces round341 div2 A:给出n个数,要求从中选数使得和最大且和为偶数;       统计所有数之和,若奇数个数 Mod 2 == 1,答案减去最小的那个奇数。#include #include #include #include #include #include #include #include using namespace std;

2016-02-03 09:56:38 293

原创 SCOI2015 day1

SC省选day1(scoi2015)       T1:大意:给出一个n*m的矩阵,从中选出n个数(m>=n),保证每一行每一列都只有一个数被选中,使得选出的数中第k大的最小。(n,m       我们先把问题转化成求第n-k+1小的数最小,那么我们先二分答案,然后对于第i行,第j列的数,如果它小于当前val,从i到j连一条边,否则不管,如果最后的最大流大于等于n-k+1,就说明当前方案可

2016-02-02 15:42:46 610

原创 Codeforce round340 div2

Codeforces round 340 div2A:题意:每次可以走1-5步,问你最少多少步走到x。不说了..#include #include #include #include #include #include #include #include using namespace std;int Ans,n;int main() { scanf("%d",&

2016-01-24 09:58:04 557

原创 Codeforce Educational Round 6

Codeforce Educational Round 6A:答案就是max(abs(x1-x2),abs(y1-y2)).B:打一张表就行了。C:题意:将一个序列尽量分成多的线段,线段两两不相交且每一条线段中都有且仅有一对权值相同的数。贪心即可,用map代替hash,每次找到2个就clear。#include #include #include #include #i

2016-01-22 09:33:23 450

原创 bzoj3926诸神眷顾的幻想乡

题意:给出一棵树,每个节点上有一个字符,问整棵树一共多少不同的串?(保证叶子节点小于等于20)难点1在于怎么统计到所有的子串,直接统计肯定是不行的,我们注意到叶子节点小于等于20,我们考虑将每个叶子节点作为根把树给提起来,然后定义这棵树的子串为从上到下的一个串(深度从浅到深),首先我们发现这样可以不考虑树上子串的复杂问题了(因为是有序的),其次我们发现这样之后包含了树上的所有子串(虽然我不

2016-01-21 19:03:00 930 1

原创 bzoj3998

题意:给出字符串,求其中字典序第k小的子串。我们设Ans[s]为状态s之后一共有多少子串,这个在建完图之后倒叙更新一遍就可以了。#include#include#include#include#include#include#include#includeusing namespace std;int n,T,K;char s[1000010];struct node

2016-01-21 18:56:30 434

原创 bzoj2946公共串

题意:求n个字符串的最长公共子串。    我们先建出一个串的后缀自动机。考虑后缀自动机的一个性质就是到当前状态s的所有路径都是互相包含的,这说明了什么呢?我们设Ans[i]是i状态目前能够匹配到的最长长度,那么假设当前串在i匹配的长度是x,那么Ans[i] = min(Ans[i].x),能直接取min就是因为上面的兴致。所以我们现在的目的就是求出所有的Ans[i],再取max就行了。

2016-01-21 18:53:39 451

原创 后缀自动机

基础知识:step[i]表示的是字符串i在原字符串中的位置。Pareint[i]表示root到parent[i]的子串是root到i的最长后缀。后缀自动机遍历可以得到原字符串的所有子串。特殊技巧:一.后缀自动机的不同子串数有两种求法:1.       Ans = step[i]–step[parent[i]] (12.       Ans[i] = Ans[son[i]

2016-01-21 18:52:48 504

原创 bzoj1758+WC2010

题目大意,给出一棵树,有边权,找出其中一条包含了不少于L,不多于R条边的路径,使得  Average(v(e)) 最大,上式表示所有选择的边的平均权值。(n思路:因为是平均数所以想到了二分(其实根本想不到),我们二分最后的答案,将树上所有边都减去当前二分到的的平均数,然后再在树中找有没有一条包含了不少于L,不多于R条边的路径,使得路径总长>=0了,如果有,说明当前答案小了,否则当前答案大了

2016-01-19 20:36:18 963 1

原创 Codeforces round339 div1 D

第一次做虚树的题…题意:给出一棵树,多次询问,每次给出k[i]个点,询问将这些点从树上分离开来最少需要删除多少个点,保证k[i]的和不超过100000.我们先建虚树,然后在虚树上Dp就可以了,我们设Dp[i][0/1],若为0表示这个点子树中所有关键点与这个点都断开了,1表示还有1个关键点连在这个点上。(不可能有大于等于2个点,不然就不合法了)。那么若当前点是关键点,Dp[i][0

2016-01-18 11:59:38 419

原创 虚树入门

今天学了一下虚树,简单谈一下有什么用。    所谓虚树,其实就是把询问中需要用到的点建到另一棵树上,比如如果我们当前询问一条链上的两个端点,原本如果做dfs dp的话我们的复杂度是o(n)的,但是如果是虚树,那么树上就只会有这两个端点,两个端点之间的那条边记录了原本整条链上的信息。于是复杂度变成了o(2)的。    那么怎么建虚树呢?一般题中除了给出的询问点(之后成为关键点),我们还会用到

2016-01-18 11:58:41 8121

原创 求n维前缀和

#include #include #include #include #include #include #include #include using namespace std;int n,A[2000010];int main() { scanf("%d",&n); for(int i = 0;i <= n;i ++) scanf("%d",&A[i]); for

2016-01-16 16:05:03 1186 1

原创 无名概率题1

题目大意:n个点构成一个环,相邻两点之间有一条边,每次随机选出两个点,l,r,从l走到r,(若l==r则绕环一整圈),问期望多少次走完所有的边。(n(保留10位小数,不四舍五入,得分是与标答相等的位数)思路:数据范围感人啊,骗分的话直接随机跑个几十亿次,这样几乎能保证每个点3-4分,但是既然数据都这么小了,为什么不记忆化状态压缩搜索呢?我们设f[i]为从i状态走完所有边的期望步数,

2016-01-16 16:01:29 361

原创 Codeforces Educational round 5

A:比较字符串的大小,去除前导零,没啥说的…#include #include #include #include #include #include #include #include using namespace std;int A,B,lens,lent;char s[1000010],t[1000010];int main(){ gets(s + 1);

2016-01-15 20:19:10 305

原创 Codeforces round339 div2

A:大意:给出l,r,k,输出k在l到r之间的所有整数次幂,没有输出-1.(l,r,我做过最坑的A题,没有之一,原本我根本没有想到枚举,在那里乱做除法(不过好像也是我除法写错了的问题),结果后来发现枚举是logk的复杂度….python好多啊..用c++直接乘会爆long long,所以判断是否乘过了r用除法判断,即r/now < k ?#include #include #inc

2016-01-15 19:55:56 229

原创 无名线段树2

题目大意:维护一个算式,,每次询问一个x带入算式的值是多少,从左到右计算,计算有三种:’+’,’*’,’^’,例子如下:    算式为 +2 *3 ^2 +4    X=3时,Ans=((3+2)*3)^2+4=229.    X=2时,Ans=((2+2)*3)^2+4=148.支持这两种操作:    1:询问x带入算式的值。    2:将第k个地方的计算符号改变。

2016-01-14 20:19:30 232

原创 中国剩余定理

不考知道啊....

2016-01-14 18:37:30 272

原创 poj openjudge 1036 gugle seating

传送门点击打开链接题目大意 :给出n*m的矩阵,若矩阵该位置为1,则为一个人,若为2则为一台电脑,若为0,则为空地,求最大匹配人数。(匹配的意思是如果一个人相邻有两台电脑,且这两台电脑不在同一行或者同一列,即人,两台电脑在矩阵中构成了‘L’型,则算一种匹配,一台电脑只能和一个人匹配。)(n,m 思路:首先我们意识到一个人所匹配的电脑一定是不同行的,即不同奇偶,奇偶让我们想到

2016-01-13 19:39:34 403

原创 无名网络流1

题目大意:给出一个无向图,边权等于这条边连接的两个点的点权的抑或值,一直一部分点权,填出剩下的点权使得所有边权之和最小,求出这个最小值。(n思路:    1)首先无论是暴力还是标算都需要先考虑到一点就是拆位,将每一位分开考虑,这样才能比较方便的判断这个点取0还是1划算(暴力是拆位+穷举).    2)那么拆位之后我们就发现了,问题转化成了一些黑白点,一些未染色的点,我们将未

2016-01-13 08:14:15 252

原创 无名数学题1(国王奇遇记减弱版)

真的是难啊......证明如下:然后k^2递推就可以了

2016-01-12 21:39:29 283

原创 无名线段树1

题目大意:给出一个序列A,每次询问l到r之间的和,之后将这段区间的数全部平方。(答案Mod 9223372034707292160输出)序列长度小于等于10w,序列中的数一开始小于Mod.操作数量小于等于10w。看起来确实很难。仔细玩一玩那个合数也没有发现什么有趣的性质,(虽然phi[Mod]=2^30(好像是这个)),但是更加可怕的性质还在后面。我们发现对于任何一

2016-01-12 18:37:44 347

原创 网络流论文推荐

这次下决心要一次性解决网络流和数学问题了,突然才发现自己连费用流都没怎么写过,看来还是太naive.最大流与费用流点击打开链接最小割等问题(bzoj1001)点击打开链接有上下界的网络流问题(如营救皮卡丘等)点击打开链接

2016-01-11 22:09:20 720

原创 初学polya

一篇比较好的论文:http://wenku.baidu.com/link?url=KSN5ZBbKMsHr17dRdMIXnXQHi0HLMM8cRhC2d32zFmHFk3LF288Y9h50yIQCBNnkgeAPFM0iC1Y8HT-TyLK-wTaQq-eW5WV3UU4tHKBjLAW基本定理 :    1,burnside引理: Ans=(D(1)+D(2)+...D(G))/

2016-01-11 22:04:56 598

原创 JSOI2015 day1

JSOI2015 day1t1:题目大意 设全集为1个拥有n个数的集合,现在把全集的子集填入k行的三角形中,其中三角形第i行有i列(有点像杨辉三角).要求对于i行j列填入的子集f[i][j],必须使得f[i][j]为f[i-1][j]的子集,同时也要是f[i][j+1]的子集.(当f[i][j]==f[i-1][j]这种情况发生时也认作合法).给出n和k,求方案数mod(1e9+7

2016-01-09 16:39:17 1000

原创 Codeforces round338 div2

codeforces round338 div2总结A:....B:英文阅读题啊...先Dp出到每个点的最长上升序列,统计答案即可.注意一下平时的习惯,这道题我一开始以为无所谓就搜索就t了,fst了之后才反应过来....注意:开long longC:暴力跑kmp.(后缀自动机可以o(n)做).D:pp水爆了...答案就是(i^c[i])连乘,c[i]为质

2016-01-09 16:23:34 389

原创 Codeforces goodbye 2015

codeforces goodbye 2015 总结A:...B:乍一看之下是数位Dp?但是其实只需要先枚举一个二进制满串(即( 1串中减去一个(1C:记录一个二维前缀和. 没了....D:一眼Dp.我们设Dp[i][j]为从当前位置i到位置j为一个整体的方案个数.那么最终答案Ans=sigma(Dp[i][n]) (1我们当

2015-12-31 16:55:35 509

原创 TJOI2015

day1 :T1:其实手推一下矩阵的式子就知道是最小割模型,和noi2006的最大获利大同小异。@:胡波涛论文《最小割模型在信息学竞赛中的应用》 T2:结论:定义:  偏序关系: 满足自反,反对称,传递的关系是自反关系  链: 偏序集A的一个子集B,并且满足B中元素两两可比  反链: 偏序集A的一个子集B,并且满足B中元素两两不可比

2015-12-30 14:19:49 406

原创 BJOI2015 day1

t1 :裸的树链剖分,我们对于每一个节点维护一颗权值线段树(其实堆就可以了),树链剖分的线段树就直接用来保存前k大的值,每次弹出节点我们从堆中取出来就行了。(反正我写的就是树+树)。 t2 :据说是树哈希?反正我直接暴力搜过去了,先枚举当前树以哪个点作为根,然后再将子树与另一颗树的子树一个一个匹配,就行了。加一些剪枝,比如出入度判断,子树大小判断,就可以了,

2015-12-30 14:19:11 552

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除