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)     
                 
                
                
    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)     
                 
                
                
    hdu5756
    
                
摘要:http://www.cnblogs.com/duoxiao/p/5777644.html 官方题解在这里 其实这道题不难,当初训练的时候不会做说明自己太弱 lazy标记不pushdown就是用lazy表示这个区间整体有哪些加减操作(大区间答案正确,子区间答案需要被所有祖先区间的lazy修正) 1 
        
阅读全文
                    posted @ 
2017-02-26 21:47 
acphile
        
阅读(329) 
         
        推荐(0)     
                 
                
                
    hdu5740
    
                
摘要:考验代码能力的题目,感觉网络流一要求输出方案我就写的丑 http://www.cnblogs.com/duoxiao/p/5777632.html 官方题解写的很详细 因为如果一个点染色确定后,整个图的染色也就确定了; 对于两个点u和v, 令它们之间的最短路是dis(u,v), 那么交换它们两个颜色
        
阅读全文
                    posted @ 
2017-02-26 21:43 
acphile
        
阅读(283) 
         
        推荐(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)     
                 
                
                
    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)     
                 
                
                
    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)     
                 
                
                
    hdu5798
    
                
摘要:官方题解: 考虑去掉abs符号,发现只有相邻两个数的最高位被影响了才会影响abs的符号,所以可以按照最高位不一样的位置分类,之后考虑朴素枚举x从0到2^20,每次的复杂度是O(400),无法通过,考虑优化,第一种方法是用DFS来进行枚举,第二种则是加入记忆化 用dfs枚举简单一点 1 #includ
        
阅读全文
                    posted @ 
2017-02-14 22:20 
acphile
        
阅读(207) 
         
        推荐(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)     
                 
                
                
    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)     
                 
                
                
    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)     
                 
                
                
    hdu5081
    
                
摘要:题意有点绕,不过读懂了之后并不难 以Si结尾容易想到ac自动机,建好ac自动机并将fail指针反向即可得到一棵树 那么操作1就是将若干个子树的并中的节点全部权值+1 操作2就是将求若干个节点到根的路径的并中的节点的权值和 操作1不难用dfs序将子树并转化为区间并然后线段树区间加 操作2呢,我们进行树
        
阅读全文
                    posted @ 
2017-02-08 15:47 
acphile
        
阅读(193) 
         
        推荐(0)     
                 
                
                
    hdu5079
    
                
摘要:这道题的难点在于思考dp表示什么 首先可以令ans[len]表示白色子矩阵边长最大值大于等于len的方案数则ans[len]-ans[len+1]就是beautifulness为len的方案数 白色子矩阵边长最大值大于等于len的方案数=总方案-白色子矩阵边长最大值小于len的方案数 经过这样的转化
        
阅读全文
                    posted @ 
2017-02-08 15:41 
acphile
        
阅读(256) 
         
        推荐(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)     
                 
                
                
    hdu5072
    
                
摘要:补集转化,求不符合条件的三元组数目 但是怎么统计呢,这里我没想到 【如果三个数a, b, c不符合条件,那么一定有一对是互质的,有一对是不互质的。不妨令a, b互质,b, c不互质。于是我们可以枚举b来统计答案。在除了b自己的所有数中,要么与b互质,要么与b不互质。假设n个数中有k个与b不互质的数,
        
阅读全文
                    posted @ 
2017-02-08 15:03 
acphile
        
阅读(228) 
         
        推荐(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)     
                 
                
                
    codeforces 739D
    
                
摘要:这题码量好大…… 首先思考如何构造,不难找到一下两个条件 1. 在长度为i的环上的点一定是i的倍数个 2. 到达长度i的环的点集距离一定是连续的 第一个条件是很好搞的,关键是第二个条件。 因为存在着x ?这样的点,我们不知道到达环长度为i的点precycle能会连续延伸 但是观察可知,我们只要找出x
        
阅读全文
                    posted @ 
2017-02-03 23:18 
acphile
        
阅读(334) 
         
        推荐(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)