摘要:
#define CL(a,num) memset((a),(num),sizeof(a))#define inf 0x7f7f7f7f#define M 1007#define N 1000007const int head = 0;int u[N],d[N],l[N],r[N],c[N],row[N];int s[M],o[M];int ak,n,m;void init(int m){ int i; for (i = 1; i <= m; ++i){ l[i] = i - 1; r[i] = i + 1; u[i] = d[i] = i;... 阅读全文
摘要:
http://acm.hust.edu.cn:8080/judge/problem/viewProblem.action?id=10702题意:给你一个n*m的01矩阵,让你选择若干行使这些行中的1能够覆盖所有的列,而且不能出现重复覆盖。输出所选的行。思路:这是跳舞链的模板题目。不多说了。给出个人觉得讲解比较好的链接:http://blog.csdn.net/mu399/article/details/7627736参考代码:http://blog.csdn.net/dooder_daodao/article/details/6654904我的代码:View Code #include < 阅读全文
摘要:
http://codeforces.com/contest/231/problem/B题意:给你一个长度为n的序列每个元素的取值为[1,l] 然后进行如下操作,每次将 a[n - 1] - a[n] 替换a[n - 1]使原序列个数减1,最后得到一个数字d。给你长度n,最后得到的数d,和l。找去满足条件的序列。思路:这题真心不好想啊,首先我们能够退出 x1 - (x2 - (x3 - (.....)))得到x1 - x2 + x3 - x4 + x5 -... = d; 所以有(x1 + x2 + x3 ....) - (x2 + x4 + x6 + x8....) = d;这个公式,我想到这 阅读全文
摘要:
http://codeforces.ru/contest/231/problem/C题意:给你n个数,你每次可以使其中的一个数加1,最多的加1次数为k,可以选择同一个数连续加但必须小于k。求使得小于等于k次加1操作后原序列中出现的相同元素最多的元素的个数,以及这个元素的值。思路:比赛时想了O(n^2)的做法写了一下超时,这是必然,我们首先对其进行从小到达排序然后枚举位置i ,从i - 1到1 枚举查看加到a[i]需要加1的次数直到k剩余个数不满足。这样的O(n^2)显然超时。要怎么优化呢? 开始想了二分枚举到底枚举什么自己糊涂了,没想到。这里看对于个数枚举。当我们枚举到 i 时,在区间[1,i 阅读全文