02 2017 档案
hdu5782
摘要:官方题解不是很详细 首先有一个结论:若A=pa+sa B=pb+sb A、B串循环同构,则可以构造一个可行方案(pa,sb) (sa,pb)中有一个是最长匹配,这个不难用反证法证明。 对于s1,s2串,我们穷举s1的每一个后缀i,设s1[i..i+len-1]=s2[0..len-1] len是最长 阅读全文
posted @ 2017-02-26 22:03 acphile 阅读(251) 评论(0) 推荐(0)
hdu5735
摘要:很美妙的一题 官方题解 http://www.cnblogs.com/duoxiao/p/5777632.html 感觉有meet in middle的思想 1 #include<bits/stdc++.h> 2 3 using namespace std; 4 typedef long long 阅读全文
posted @ 2017-02-26 21:49 acphile 阅读(247) 评论(0) 推荐(0)
hdu5756
摘要:http://www.cnblogs.com/duoxiao/p/5777644.html 官方题解在这里 其实这道题不难,当初训练的时候不会做说明自己太弱 lazy标记不pushdown就是用lazy表示这个区间整体有哪些加减操作(大区间答案正确,子区间答案需要被所有祖先区间的lazy修正) 1 阅读全文
posted @ 2017-02-26 21:47 acphile 阅读(329) 评论(0) 推荐(0)
hdu5740
摘要:考验代码能力的题目,感觉网络流一要求输出方案我就写的丑 http://www.cnblogs.com/duoxiao/p/5777632.html 官方题解写的很详细 因为如果一个点染色确定后,整个图的染色也就确定了; 对于两个点u和v, 令它们之间的最短路是dis(u,v), 那么交换它们两个颜色 阅读全文
posted @ 2017-02-26 21:43 acphile 阅读(283) 评论(0) 推荐(0)
hdu5731
摘要:先求出不考虑分割线的n*m棋盘的覆盖方案数记为f[n][m] 然后枚举列分割线的状态(状压),计算此时不存在行分割线的方案数 求出这个我们就可以用容斥原理算出答案了 怎么算在列分割线确定的情况下,不存在行分割线的方案数呢? 记s[i]=f[i][a1]*f[i][a2]*...表示在有i行不考虑行分 阅读全文
posted @ 2017-02-19 22:44 acphile 阅读(276) 评论(0) 推荐(0)
hdu5728
摘要:详细题解: http://blog.csdn.net/wust_zzwh/article/details/51966450 ……化简公式的能力还不够啊…… 1 #include<bits/stdc++.h> 2 3 using namespace std; 4 typedef long long l 阅读全文
posted @ 2017-02-19 15:03 acphile 阅读(196) 评论(0) 推荐(0)
hdu5823
摘要:官方题解:直接状压dp就行了,f[S]表示点集S的色数,枚举子集转移(子集是独立集)。这样是3^n的。 这样就可以过了……(独立集就是点互相没有连边) 学到了一个穷举子集的简便写法 for (int j=i; j; j=(j-1)&i) 1 #include<bits/stdc++.h> 2 3 u 阅读全文
posted @ 2017-02-14 22:23 acphile 阅读(201) 评论(0) 推荐(0)
hdu5798
摘要:官方题解: 考虑去掉abs符号,发现只有相邻两个数的最高位被影响了才会影响abs的符号,所以可以按照最高位不一样的位置分类,之后考虑朴素枚举x从0到2^20,每次的复杂度是O(400),无法通过,考虑优化,第一种方法是用DFS来进行枚举,第二种则是加入记忆化 用dfs枚举简单一点 1 #includ 阅读全文
posted @ 2017-02-14 22:20 acphile 阅读(207) 评论(0) 推荐(0)
hdu5803
摘要:数位dp f[i][st][w1][w2]表示到第i位,这一位a,b,c,d的数是否分别要小于ABCD的状态st,w1表示前一位a+c-b-d为几,w2表示a+d-b-c为几 由于前一位差大于等于2后,后面能始终确保a+c>b+d,所以w1, w2状态只有-1,0,1,2四种 注意这时如果按十进制诸 阅读全文
posted @ 2017-02-14 22:16 acphile 阅读(200) 评论(0) 推荐(0)
hdu5970
摘要:真是怀疑当初合肥赛区怎么考这么差的…… 首先根据辗转相除法可知f(i,j)=f(i+j*k,j) 于是我们可以先于处理出f(i,j) (j<=666,i<=j),当确定i,j时c也确定 (x=gcd(i,j))可见,当确定了i,j,k后,后面p的求和就是一个等差数列的求和 c是logm级的所以总复杂 阅读全文
posted @ 2017-02-12 18:12 acphile 阅读(370) 评论(0) 推荐(0)
hdu5819
摘要:补多校系列,具体见多校题解http://www.cnblogs.com/duoxiao/p/5777700.html 值得注意的是如果当前i初始向左,前i个骑士最终只有1个向右 对于f[i][1]状态的转移为f[i][1]=∑ f[i-1][k]*0.5^(k-1) 因为我们只要比k-1场就可以了, 阅读全文
posted @ 2017-02-12 17:52 acphile 阅读(253) 评论(0) 推荐(0)
hdu5081
摘要:题意有点绕,不过读懂了之后并不难 以Si结尾容易想到ac自动机,建好ac自动机并将fail指针反向即可得到一棵树 那么操作1就是将若干个子树的并中的节点全部权值+1 操作2就是将求若干个节点到根的路径的并中的节点的权值和 操作1不难用dfs序将子树并转化为区间并然后线段树区间加 操作2呢,我们进行树 阅读全文
posted @ 2017-02-08 15:47 acphile 阅读(193) 评论(0) 推荐(0)
hdu5079
摘要:这道题的难点在于思考dp表示什么 首先可以令ans[len]表示白色子矩阵边长最大值大于等于len的方案数则ans[len]-ans[len+1]就是beautifulness为len的方案数 白色子矩阵边长最大值大于等于len的方案数=总方案-白色子矩阵边长最大值小于len的方案数 经过这样的转化 阅读全文
posted @ 2017-02-08 15:41 acphile 阅读(256) 评论(0) 推荐(0)
hdu5076
摘要:好题,首先观察可得w[i][j]选择只有可能两种,一种比阀值大,一种比阀值小 比阀值大就一定选满足条件最大的w,比阀值小同样一定选满足条件最大的w 那么一个最小割模型就呼之欲出了,注意w可能是负数那么就集体+1025; 我们把这两种情况分辨记作w[i][mx[i]],w[i][mi[i]] 下面是建 阅读全文
posted @ 2017-02-08 15:22 acphile 阅读(162) 评论(0) 推荐(0)
hdu5072
摘要:补集转化,求不符合条件的三元组数目 但是怎么统计呢,这里我没想到 【如果三个数a, b, c不符合条件,那么一定有一对是互质的,有一对是不互质的。不妨令a, b互质,b, c不互质。于是我们可以枚举b来统计答案。在除了b自己的所有数中,要么与b互质,要么与b不互质。假设n个数中有k个与b不互质的数, 阅读全文
posted @ 2017-02-08 15:03 acphile 阅读(228) 评论(0) 推荐(0)
codeforces 739E
摘要:官方题解是一个n2logn的dp做法 不过有一个简单易想的费用流做法 对每个小精灵,连边(A,i,1,pi) (B,i,1,ui) (i,t,1,0) (i,t,1,-pi*ui) 最后连边(s,A,a,0) (s,B,b,0) 跑最大费用最大流即可,注意精度误差 1 #include<bits/s 阅读全文
posted @ 2017-02-04 14:57 acphile 阅读(157) 评论(0) 推荐(0)
codeforces 739D
摘要:这题码量好大…… 首先思考如何构造,不难找到一下两个条件 1. 在长度为i的环上的点一定是i的倍数个 2. 到达长度i的环的点集距离一定是连续的 第一个条件是很好搞的,关键是第二个条件。 因为存在着x ?这样的点,我们不知道到达环长度为i的点precycle能会连续延伸 但是观察可知,我们只要找出x 阅读全文
posted @ 2017-02-03 23:18 acphile 阅读(334) 评论(0) 推荐(0)
2017.2其他简要题解
摘要:codeforces 739A 答案一定是所有区间中最小区间长度,构造的话就把所有区间都当成那个长度即可 1 #include<bits/stdc++.h> 2 3 using namespace std; 4 int b[100010]; 5 struct node{int x,y;} a[100 阅读全文
posted @ 2017-02-03 22:34 acphile 阅读(197) 评论(0) 推荐(0)