01 2014 档案

摘要:f[i][j][k]表示i行之前有j行放了一个,k行放了两个棋子的方案数,DP。代码懒得写了,copy了搞神的 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 #define maxn 105 7 #define mod 9999973 8 #define rep(x,l,r) for (x=l;x1) f[i][j][k]+=f[i-1][j-2][k]*C(m-j-k+2);//223 if (j&&k) f[i][j][k]+=f[i-1][j][k-1]*(m-j-k+1)... 阅读全文
posted @ 2014-01-22 10:55 乌拉拉979 阅读(280) 评论(0) 推荐(0) 编辑
摘要:这道题可以转换一下。试想每一个对应关系a-b为从a->b的一条边,那么图中一定存在n条边且每个点入度出度都为1,易证一定存在一个或几个环。实际上排数就是这几个环大小的最小公倍数。即求和为n的数列的最小公倍数种数。那么可以直接DP 1 /* 2 ID:WULALA 3 PROB:bzoj1025 4 LANG:C++ 5 */ 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #define N 100814 #define M15 #define mod16 #defin. 阅读全文
posted @ 2014-01-22 10:53 乌拉拉979 阅读(388) 评论(0) 推荐(0) 编辑
摘要:可以假设一个A数组为第i天之前的收入,即前缀和。每次输入的s,t,v即At - As-1 = v。对,就是一个差分约束。实际上全是等式即图中从u到v的所有路径长度相同。于是可以用并查集做Si表示从i到Fi相差多少。 1 #include 2 #include 3 #include //一定要记得打!! 4 using namespace std; 5 #define N 1008 6 7 int T; 8 int n,m,F[N],S[N]; 9 bool Right;10 11 void clean()12 {13 memset(S,0,sizeof(S));14 ... 阅读全文
posted @ 2014-01-22 10:49 乌拉拉979 阅读(575) 评论(0) 推荐(0) 编辑
摘要:首先是对于图上所有的棋盘一定属于以下两种类型:1.黑格行列奇偶性相同,白格不同2.白格行列奇偶性相同,黑格不同那么在输入的时候属于第一种情况的赋1,属于第二种情况的赋0统计最大的1或0矩形和正方形就可以啦。统计矩形和玉蟾宫是一样的做法,单调栈嘛。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define N 2008 8 9 int ans1,ans2,n,m,f[N][N],s[N],w[N],top;10 bool map[N][N];11 12 void b... 阅读全文
posted @ 2014-01-22 10:45 乌拉拉979 阅读(481) 评论(0) 推荐(0) 编辑
摘要:枚举每一个位置找出每一种颜色在这个位置之后的第一个位置与这个位置距离的最大值,再找出每一个位置结果的最小值就可以啦。用堆来处理这个问题是不错的想法 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define N 1000008 8 #define K 68 9 10 int n,k,ans = 2147483647;11 12 priority_queue,greater > que[K];13 14 void init()15 {16 scanf("%d%d&q 阅读全文
posted @ 2014-01-20 17:19 乌拉拉979 阅读(242) 评论(0) 推荐(0) 编辑
摘要:这道题看了题解可以用最大流或者二分图做,写了一下还是挺好写的。至少是我第一个写完了的这样输入图的题!!不过还是抽了四个点。。不想在调试下去了,抄了份洛神的code。既然是抄的code那我就不发了。。。 阅读全文
posted @ 2014-01-20 17:13 乌拉拉979 阅读(265) 评论(0) 推荐(0) 编辑
摘要:期末考试过去了,结束班会过去了,生日过去了,终于是可以静下心来了 阅读全文
posted @ 2014-01-20 17:11 乌拉拉979 阅读(115) 评论(0) 推荐(0) 编辑
摘要:同样是一个斜率优化,设f[i]表示在i处建仓库,f[i] = f[j] + cal(j,i) + c[i];一开始cal想了我好久,一直只想到o(n)cal。。。后面看着花花想cal的实现,一下子就想出来了!!!斜率优化的一般方法应该是 f[i] + 只与i有关的看作c,只与j有关的看作by,与ij有关的j看作x,i看作a,再用向量积去做等下再用决策单调性优化写下这道题。。妈蛋一开始队列写错了卡了15分钟!!!最近老是犯些SB错误。。还是静不下来啊 1 /* 2 ID:WULALA 3 PROB:bzoj1096_slope 4 LANG:C++ 5 */ 6 #include 7 #inc. 阅读全文
posted @ 2014-01-11 21:14 乌拉拉979 阅读(151) 评论(0) 推荐(0) 编辑
摘要:维护每一个原本的点和加入他的最后一个点,妥妥的 1 /* 2 ID:WULALA 3 PROB:bzoj1058 4 LANG:C++ 5 */ 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #define N 50000814 #define M15 #define mod16 #define mid(l,r) ((l+r) >> 1)17 #define INF 1e918 using namespace std;19 20 int n,m,tot,l[N], 阅读全文
posted @ 2014-01-06 19:19 乌拉拉979 阅读(178) 评论(0) 推荐(0) 编辑
摘要:我觉得题名应该改为:关于库的正确使用语法练习。 1 /* 2 ID:WULALA 3 PROB:bzoj1208 4 LANG:C++ 5 */ 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #define N 15 #define M16 #define mod 100000017 #define mid(l,r) ((l+r) >> 1)18 #define INF 0x7fffffff19 using namespace std;20 阅读全文
posted @ 2014-01-06 19:18 乌拉拉979 阅读(130) 评论(0) 推荐(0) 编辑
摘要:裸最小生成树。。。一开始看是SCOI想应该没这么简单。结果真尼玛这么简单。。好意思!! 1 /* 2 ID:WULALA 3 PROB:bzoj1083 4 LANG:C++ 5 */ 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #define N 308 14 #define M 10008 15 #define mod16 #define mid(l,r) ((l+r) >> 1)17 #define INF 0x7ffffff18 using namesp 阅读全文
posted @ 2014-01-06 19:16 乌拉拉979 阅读(155) 评论(0) 推荐(0) 编辑
摘要:尼玛这道题一开始我printf(“Yse\n”)调了我半个小时,最后还是葱娘给看出来的(英语渣给跪了Orz)这道题我莫名其妙地只想了一会儿(要知道我前一天才会的匈牙利,还是自学的!!),当时觉得我自己叼的跟坨翔样的同行同列的点无论经过多少次变换人仍然同行或同列,所以题目可转换为能不能找到n个互相不同行或同列的点。然后二分图匹配,将行和列分别看成一个点集,每有一个‘1’的点就把他的行和列连一条边,看每一行能不能找到一个列与之匹配。 1 /* 2 ID:WULALA 3 PROB:bzoj1059 4 LANG:C++ 5 */ 6 #include 7 #include 8 #include.. 阅读全文
posted @ 2014-01-06 19:12 乌拉拉979 阅读(176) 评论(0) 推荐(0) 编辑
摘要:第一次做环套树的题这道题题目中貌似是有向边,实际上想一想就知道是无向的。因为一个骑士觉得另一个骑士丑他们俩就走不到一起。所以整个图实际上是一个无向环套树森林。对于每一棵环套树,先dfs找环,找到环以后断环为链并将断开的两个点强制其中一个点为根且不选做一次树形DP,对另一个点做同样操作。取两次结果最大值加入ans 1 /* 2 ID:WULALA 3 PROB:bzoj1040 4 LANG:C++ 5 */ 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #includ... 阅读全文
posted @ 2014-01-06 18:59 乌拉拉979 阅读(310) 评论(0) 推荐(0) 编辑
摘要:tarjan强连通分量求缩点重构图,出度为0的点若只有一个则输出其代表强连通分量的大小,否则无解。因为一旦出度为0就没人被他认为长得帅 1 /* 2 ID:WULALA 3 PROB:bzoj1051 4 LANG:C++ 5 */ 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #define N 10008 14 #define M 50008 15 #define mod 16 #define mid(l,r) ((l+r) >> 1) ... 阅读全文
posted @ 2014-01-06 18:50 乌拉拉979 阅读(183) 评论(0) 推荐(0) 编辑
摘要:傻逼题需要辩?找第一个比n大的2^k数输出k就是。5分钟A掉这道题代码都懒得贴了 阅读全文
posted @ 2014-01-06 13:54 乌拉拉979 阅读(106) 评论(0) 推荐(0) 编辑
摘要:一开始还以为用2-SAT。。愣了几分钟才发现是二分图匹配,用匈牙利算法找匹配碰到一个不能匹配的就退出就可以了。 1 /* 2 ID:WULALA 3 PROB:bzoj1191 4 LANG:C++ 5 */ 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #define N 100814 #define M 100815 #define mod16 #define mid(l,r) ((l+r) >> 1)17 #define INF 0x7ffffff18 us 阅读全文
posted @ 2014-01-06 13:51 乌拉拉979 阅读(159) 评论(0) 推荐(0) 编辑
摘要:一开始看错题意了!!没注意到整个数列是1~n的一个排列!很水的一道题,找到b在数列中的位置设为point,比b大的赋值为-1,比b小的赋值为1;然后求出sum[i,point]的值出现了几次记为lfre[sum[i,point]]++; ans += lfre[sum[i,point]]*rfre[-sum[i,point]];由于c++数组不能是负数,所以稍微处理一下 1 /* 2 ID:WULALA 3 PROB:bzoj1303 4 LANG:C++ 5 */ 6 #include 7 #include 8 #include 9 #include 10 #include 11 #... 阅读全文
posted @ 2014-01-06 13:30 乌拉拉979 阅读(215) 评论(0) 推荐(0) 编辑
摘要:公式不难推而且推出公式来以后就是一个裸快速幂了。。个人觉得HNOI2008最水的题 1 /* 2 ID:WULALA 3 PROB:bzoj1008 4 LANG:C++ 5 */ 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #define N 14 #define M15 #define mod 10000316 #define mid(l,r) ((l+r) >> 1)17 #define INF 0x7ffffff18 using namespace st 阅读全文
posted @ 2014-01-06 13:20 乌拉拉979 阅读(93) 评论(0) 推荐(0) 编辑
摘要:这道题是一道很简单的DP,方程很容易列出来,只不过要优化,因为n^2过不了。膜拜了一下搞神的《浅析1D1D动态规划的优化(zzx)》既可以用斜率优化也可以用单调性优化。单调性证明就不说了。斜率优化还不太懂所以只写了单调性优化 1 /* 2 ID:WULALA 3 PROB:bzoj1010 4 LANG:C++ 5 */ 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #define N 5000814 #define M15 #define mod16 #define ... 阅读全文
posted @ 2014-01-06 13:14 乌拉拉979 阅读(216) 评论(0) 推荐(0) 编辑
摘要:嗯,就是这样,不急功近利才是一个好coder必备的素质 阅读全文
posted @ 2014-01-05 21:25 乌拉拉979 阅读(120) 评论(0) 推荐(0) 编辑
摘要:这道题整整搞了我5天。。。。用到了数列的插入,删除和查询第K大写的第一道平衡树题。。可以用各种平衡树和线段树来写,不失为一道极佳的平衡树练手题(据说树状数组也可以??Orz)一开始是用splay,splay网上的code大部分都用了指针我根本看不懂。后来找葱娘的ACcode用数组写的才总算看懂一点。。我理解了一晚上,写了一上午,调了一下午加晚上。。葱娘的代码就是神,一开始我还以为要用到区间修改,后面发现葱娘用一个变量记录增量就可以了(Orz!!)附上单旋SPLAYcode,这道题数据比较水,双旋单旋差不多 1 /* 2 ID:WULALA 3 PROB:splay bzoj1503 4... 阅读全文
posted @ 2014-01-05 19:15 乌拉拉979 阅读(198) 评论(0) 推荐(0) 编辑
摘要:真不知道bzoj为什么要把这么难的题放第一题,就这道题弄得我好久都不敢刷bzoj。。一道很明显的网络流题,最大流最小割定理只不过用网络流是过不了的,因为数据范围过大但由于这是一个平面图,于是可以另辟蹊径详情请搜:周冬《两极相通——浅析最大—最小定理在信息学竞赛中的应用》 1 #include 2 #include 3 #include 4 using namespace std; 5 const int N = 1003; 6 const int M = 2000005; 7 const int inf = 0x3f3f3f3f; 8 int head[M]; 9 struc... 阅读全文
posted @ 2014-01-05 19:14 乌拉拉979 阅读(233) 评论(0) 推荐(0) 编辑
摘要:prufer编码的应用: 1 var 2 a:array[1..10000]of longint; 3 su,p:array[1..1000]of longint; 4 b:array[1..10000]of boolean; 5 ans:array[1..10000]of longint; 6 i,j,m,n,s,k,w,sum,c:longint; 7 procedure add(t,d:longint); 8 var 9 i:longint;10 begin11 for i:=1 to s do12 while t mod su[i]=0 do13 ... 阅读全文
posted @ 2014-01-05 19:11 乌拉拉979 阅读(144) 评论(0) 推荐(0) 编辑
摘要:一道群论题。。要用到Burnside引理这里copy一下别人写的题解好了。。介绍一种组合数学中的Pólya计数法、Burnside定理。群给定一个集合G={a,b,c,…}和集合G上的二元运算,并满足:(a) 封闭性:"a,bÎG, $cÎG, a*b=c。(b) 结合律:"a,b,cÎG, (a*b)*c=a*(b*c)。(c) 单位元:$eÎG, "aÎG, a*e=e*a=a。(d) 逆元:"aÎG, $bÎG, a*b=b*a=e,记b=a-1。则称集合G在运算*之下 阅读全文
posted @ 2014-01-05 19:10 乌拉拉979 阅读(269) 评论(0) 推荐(0) 编辑
摘要:这道题还算比较水。。spfa预处理从第i天到第j天的可行最短路存为t[i][j],然后直接dp。f[i] 代表到第i天的最小费用f[i] = min(f[i],min(t[1][i]*i,f[j]+k+t[j+1][i]*(i-j))) 1 /* 2 ID:zsy99021 3 PROB:bzoj1003 4 LANG:C++ 5 */ 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #define N 108 14 #define M 28 ... 阅读全文
posted @ 2014-01-05 19:09 乌拉拉979 阅读(240) 评论(0) 推荐(0) 编辑
摘要:想了好久没想出来。查了下题解是有递推式。f[i]=3*f[i-1]-f[i-2]+2(p.s.至今还不明觉厉)然后就是高精了。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 using namespace std;10 #define For(i,n) for(int i=1;i=0;i--)16 #define MAXN (100+10)17 #define F (10000)18 int n;19 struct Highn20 {21 int a[1... 阅读全文
posted @ 2014-01-05 19:08 乌拉拉979 阅读(192) 评论(0) 推荐(0) 编辑
摘要:这道题一开始自己本来想出来了。。结果自己又把自己推翻了。。于是看题解和自己一样。还好刘教授帮我解释了一下floyd对于一条最短路只会判一次在K=这条路径上最大的那个点的时候。后面又因为滥用memset(f,127,sizeof(f))导致f[i][k] + f[j][k]会爆所以wa掉了喜闻乐见地贴代码: 1 /* 2 ID:WULALA 3 PROB:bzoj1491 4 LANG:C++ 5 */ 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #define N 1... 阅读全文
posted @ 2014-01-05 19:06 乌拉拉979 阅读(169) 评论(0) 推荐(0) 编辑
摘要:先从最近做的bzoj开始 阅读全文
posted @ 2014-01-05 19:05 乌拉拉979 阅读(108) 评论(0) 推荐(0) 编辑