
Codeforces
文章平均质量分 72
Neutralzz
这个作者很懒,什么都没留下…
展开
-
Codeforces 550D Regular Bridge (构造)
题意:一个图,图的每个顶点度数都为k,问这个图中是否可能含有割边。有救输出图,无NO。思路:假设存在度数为k 的这样一个图,利用对称的思想,去掉割边后得到两个完全相同的子图。子图顶点数为n,则子图的总度数为n*k-1,因总度数必为偶数,故n,k都为奇数。然后构图就要看你脑洞有多大了。我是这样做的,度为k-1的点s与k-1个点相连。再令设两点i、j,都与那k-1个点相连,原创 2015-06-06 00:30:53 · 581 阅读 · 0 评论 -
Codeforces 645E Intellectual Inquiry (贪心+DP)
解析:假设当前已经放了i个字符,c[p]为当前以p结尾的字符串的个数,sum = c[0] + .... c[25]。在放入第i+1个字符后,应该使sum尽可能大。假设放入的是字符t,那么新的c[t]的值为sum+1(所有串+自己),sum的变化量为1+sum-c[t]。找到最大的变化量,进行更新即可。但是这里有取模的操作,没法求出最大的变化量。所以,贪心的思考,使得变化量最大的那原创 2016-06-01 11:32:47 · 366 阅读 · 0 评论 -
Codeforces 625D Finals in arithmetic(构造)
解析:k位的数字n可能是有k位的a得来也可能由k-1位的a得来。先将n视为字符串s[1....k]以a是k位为例,设p为进位,l,r为左右端点起始l = 1,r = n,p = 0若p = 0,s[l..r] = a...b 那么a[r]+a[l] = b,再将a与b做差,差值只能为0和1,如果是其他值,则不能形成,如果是0,说明a[l+1]+a[r-1] 若p = 1,s[l原创 2016-05-31 16:41:55 · 528 阅读 · 0 评论 -
Codeforces 650C Table Compression (并查集+拓扑排序)
解析:不看tags都意识不到用图论。一个位置对应一个节点,对于每行每列,值相同的用并查集union一起,值不相同的,值小的节点指向值大的节点。压缩后节点的值是到该节点的最长的链的长度,可以通过拓扑排序求得。[code]:#include#include#include#includeusing namespace std;const int maxn = 1e6原创 2016-05-31 16:14:30 · 333 阅读 · 0 评论 -
Codeforces 637D Running with Obstacles (贪心)
解析:查看每对相邻的障碍,如果距离大于s,那么可以落地并在下一个障碍前起跳。对每次落地和起跳加以判断即可。[code]:#includeusing namespace std;typedef long long LL;const LL MOD = 1e9+7;int n,m,a[205];LL dp[2][205][1005];void sol(){ int i,原创 2016-05-31 15:55:19 · 338 阅读 · 0 评论 -
Codeforces 665E Beautiful Subarrays (Trie树)
题意:找出异或和>=k的连续子序列个数。官方题解:http://codeforces.com/blog/entry/44466[code]:#include#includeusing namespace std;typedef long long LL;const int maxn = 1e6+5;const int ML = 30;struct Nod{ in原创 2016-05-04 15:36:10 · 319 阅读 · 0 评论 -
CodeForces 659G Fence Divercity (DP)
解析:设dp[i][j]为考虑前i个Fence,cut的部分包含第i个Fence,第i个Fence处理后的高度为j的方案数。则首先 1如果j反之,dp[i][j] = 1;得到转移方程后显然不能直接用,因为空间和时间都特别大,但是我们注意到,对于每一个i,我们只需要维护3个前缀和就可以完成方程的转移。设s[i][j] = dp[i][1]+dp[i][2]+...+dp[i][原创 2016-05-31 10:40:50 · 389 阅读 · 0 评论 -
CodeForce 626E Simple Skewness (贪心+三分)
题目:给出n个数字,求出一个子集,使得其平均数与中位数的差值最大。解析:首先将a[1...n]从大到小排序,在固定中位数的位置后,子集的构成必然是在中位数位置的两侧选取相同个,显然,每侧要尽量选取较大的值。可以发现,选取的个数与平均数具有凸函数性质,所以通过三分找到临界点。整体复杂度O(nlogn)。[code]:#includeusing namespace std;co原创 2016-05-31 10:47:46 · 300 阅读 · 0 评论 -
Codeforces 626F Group Projects (DP)
官方题解很详细This is a dynamic programming problem. Notice that the total imbalance of the groups only depends on which students are the maximum in each group and which are the minimum in each group.原创 2016-05-31 15:50:22 · 609 阅读 · 0 评论 -
CodeForces 578C Weakness and Poorness 二分
题意:确定一个x使序列a1-x,a2-x,...,an-x的weakness最小,输出最小weakness。(weakness是连续子序列的和的绝对值的最小值)解法:以前对二分的理解就是二分答案,上下界分别在目标解的两侧,其中一个满足一个不满足。这个题值得自己反思了。正解二分X,目标情况的X值应该是这段序列的连续子序列的最大值和最小值的和逼近0。代码:#include#i原创 2015-09-19 22:29:30 · 393 阅读 · 0 评论 -
Codeforces 577B Modulo Sum 鸽巢原理
题意略。解析:把取模后的结果0...m-1看为盒子。当n>m时,根据鸽巢原理,至少有一个盒子里有两个以上的球,结果必然是YES。当n代码:#include#includeusing namespace std;typedef long long LL;int n,m,a,b[1005],c[1005];int main(){ int i,j; sca原创 2015-09-20 10:38:47 · 520 阅读 · 0 评论 -
CodeForces 55D Beautiful numbers (数位DP)
题意:一个数字,如果它能被所有的非零数字整除,就为 Beautiful numbers。参考题解:点击打开链接dp[位数][高位数字模2520的余数][最小公倍数]AC代码:#include#include#include#includeusing namespace std;typedef __int64 LL;LL c[2550],g[2550][10]原创 2015-07-22 15:27:53 · 350 阅读 · 0 评论 -
CodeForces 219D Choosing Capital for Treeland (树形DP)
思路:dp[i]为在以i为根节点的子树中i到各点的需要反向的路的数目。那么dp[u] = sigma(dp[v] + i) 如果(u,v)是反向边,i=1;反之为0。这样求出的dp[u]为u到其子树各点的反向边的数目。在做一遍dfs,使dp[v] = dp[u] + i 如果(u,v)是反向边 ,i=-1;反之,i=1。代码:#include#include#inc原创 2015-07-19 10:01:50 · 363 阅读 · 0 评论 -
Codeforces 148D 概率DP 水题
设dp[i][j] 为剩余i个白球,j个黑球的公主的胜率。可以推出公式 dp[i][j] = 1.0*i / (i + j) + 1.0*j * (j - 1) * (i*dp[i-1][j-2] + (j - 2) * dp[i][j-3]) / (i + j) / (i + j - 1) / (i + j - 2) 。注意一下边界。代码:#include#includ原创 2015-07-09 12:31:26 · 668 阅读 · 0 评论 -
Codeforces 567E President and Roads (最短路 好题)
题意:给你一个有向图和起终点s,t,问对于每一条边,1.是不是一定在s-t的最短路径上,如果是,输出“YES”2.如果不是,将边权减少多少,能让它一定在最短路径上,边权必须大于0,如果可以,输出‘CAN’ 并输出前后的边权差3.如果不能,输出‘NO’思路还是很简单的,从s和t做两次dijstra求出最短路dis[0][v],dis[1][v],在过程中同时记录下从起点到该点原创 2015-08-10 12:14:09 · 667 阅读 · 0 评论 -
Codeforces 659F Polycarp and Hay (排序+并查集)
解析:将所有的cell按高度从大到小排序,然后每次放入值相同的cell,用并查集维护集合和集合大小,并判断是否满足条件即可。找到后搜索标记所有的位置。[code]:#include#include#include#include#include#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1#define lowbit原创 2016-06-01 11:37:26 · 382 阅读 · 0 评论