摘要: 题意:给定n个数,从中选出连续的若干个,使得和为n的倍数。多解时输出任意解。分析:设sum[0]=0,sum[i]表示数列中第1~i个数的和对n取余的结果。那么现在有sum[0~n],n+1个整数,分布在区间[0,n-1]上的n个整数点上,则至少有两个数会分布在同一个整数点,即存在sum[i]==sum[j]且i!=j。这样以来第i+1~j个数即为所求。View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace 阅读全文
posted @ 2012-07-09 17:57 undefined2024 阅读(509) 评论(0) 推荐(0)
摘要: dpf[i] = max(f[i], sum(i~i+j-1) + f[i + j * 2]) 或者 f[i] = f[i + 1]View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;#define maxn 10005int n, m;int dis[maxn];int f[maxn];int sum[maxn];void input(){ scanf("%d%d", &am 阅读全文
posted @ 2012-07-09 16:22 undefined2024 阅读(179) 评论(0) 推荐(0)
摘要: 题意:求区间[l,u]内,距离最近的两个素数,和距离最远的两个素数。区间长度最大1000000,l和u都在int范围内。分析:由于l,u在2^31内,所以先从1到2^16筛素数。这些素数足以用来判断2^31内的所有数字是否为素数,对于每对l,u,用已知的1~2^16内的素数圈定一个可以筛l,u之间的数字的范围,来筛l,u之间的数字。View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>using 阅读全文
posted @ 2012-07-09 15:58 undefined2024 阅读(938) 评论(0) 推荐(0)
摘要: 简单题View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>#include <cmath>using namespace std;#define maxn 50005int t, n;int f[maxn];bool cmp(const int &a, const int &b){ return abs(a) < abs(b);}void input( 阅读全文
posted @ 2012-07-09 14:04 undefined2024 阅读(180) 评论(0) 推荐(0)
摘要: 题意:给一棵n个节点的无根树,问去掉那一点可以使各连通分支中的节点数均<=n/2。分析:任意选定一个根,用自底向上的方法记录每棵子树的节点数。这样对于每个节点就可以通过它子树的节点数量迅速地判断它是否符合条件,别忘了还要判断它上面那个它祖宗所在的连通分支(节点数为n减去其各个子树的连通分支数再减1)。View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>using namespac 阅读全文
posted @ 2012-07-09 11:04 undefined2024 阅读(494) 评论(0) 推荐(0)
摘要: priority_queue的bfspriority_queue的bfs相当于使用了dijkstra的思想。View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <queue>using namespace std;#define maxn 305struct Point{ int x, y, w;}s, t;int n, m;char map[maxn][maxn];bool vis[maxn][maxn] 阅读全文
posted @ 2012-07-09 11:00 undefined2024 阅读(293) 评论(0) 推荐(1)