上一页 1 ··· 23 24 25 26 27 28 29 30 31 ··· 66 下一页
摘要: 对于一个数F,设F = p1^e1*p2^e2...*pn^en 那么[1-N]内与其互质的数和与D = p1*p2*...pn是一致的,因为和F、D互质的数都是不含有他们的素因子的数。对于D这个数求[1-N]内有多少个与其互质的数就可用运用容斥定理来求解了。以6为例,首先计算出与2不互质的数,用等差数列公式能够计算出这些满足于2不互质数的和,接着就加上与3不互质的和,最后再减一次与6不互质的和即可。对于那些改变的数,由于数量不是很多,可以单独拿出来进行处理。代码如下:#include<iostream>#include<cstdio>#include<cstdl 阅读全文
posted @ 2012-09-22 21:21 沐阳 阅读(736) 评论(1) 推荐(0) 编辑
摘要: dp[i]表示第i个位置跳出去的期望天数,先构造出N+1到N+5这几个位置,然后先把dp[N-N+5]这六个位置全部赋值为0,因为这几个位置都已经出去了。然后就是递推了如果该点没有航班的话:dp[x] = (1/6)*(dp[x+1] + dp[x+2] + dp[x+3] + dp[x+4] + dp[x+5] + dp[x+6]) + 1;否则:dp[x] = dp[link[x]]; 其中link[x]表示x连到哪一个点。代码如下:#include<iostream>#include<cstdio>#include<cstdlib>#include&l 阅读全文
posted @ 2012-09-22 21:14 沐阳 阅读(463) 评论(0) 推荐(0) 编辑
摘要: 直接枚举等号所在位置,然后左右两边用两个MAP来记录组成和的个数,然后运用乘法原理得到答案。代码如下:#include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<queue>#include<set>#include<map>#include<cstring>#include<vector>#include<string>#define 阅读全文
posted @ 2012-09-22 21:07 沐阳 阅读(356) 评论(0) 推荐(0) 编辑
摘要: 根据关系建一个图,然后就是后面的插座的传递闭包,一个floyd构边。代码如下:#include <cstdlib>#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>#include <map>#include <string>#define INF 0x3fffffff#define CN(x) (255+(x))#define MN(x) (555+(x))#define MAXN 500using namesp 阅读全文
posted @ 2012-09-20 22:21 沐阳 阅读(388) 评论(0) 推荐(0) 编辑
摘要: 每次计算出当前点与第一个点的距离即可。代码如下;#include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream>#include<vector>#include<string>#include<math.h>#include<map>#include<set>#include<algorithm>#define MAXN 100000using namespace std;int N, M, cur 阅读全文
posted @ 2012-09-20 21:22 沐阳 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 第二次来做这一题,由于题目中给定了一个等级限制M,所以可以通过枚举第一个点所在的位置求解.思路很清晰.for (int i = 0; i <= M; ++i) 这个i来表示第一个点的等级在M长度区间内的偏移量.然后再在区间内建边,floyd即可.代码如下:#include <cstdlib>#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>#define INF 0x3f3f3f3fusing namespace std;int M 阅读全文
posted @ 2012-09-20 16:32 沐阳 阅读(287) 评论(0) 推荐(0) 编辑
摘要: 这题是求一个圈中取出若干相邻的数,求其中的最大值,不能够同时取所有的数。本来想着要扩张出一个圈出来,再通过限定长度来转化为线段上的问题,但是这样明显就复杂很多了,有一个结论就是当这个区间在[1-N]之间的话,那么直接输出最大值,否则一定是sum - min[1-N],也就是说如果区间跨越了1,N两个点,那么[1-N]中就一定隐藏了最小子串和。很好理解,因为整个循环串就是由一个最大子串和一个最小子串组成的。线段树的节点中要存储较多的值:lmax -- 从左边开始至少取一个节点的最大值lmin -- 从左边开始至少取一个节点的最小值rmax -- 从右边开始至少取一个节点的最大值rmin -- 从 阅读全文
posted @ 2012-09-20 11:37 沐阳 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 依据题中所给定的关系构图,直接网络流。源点到食物,食物到人,人拆成两个点,流量为1,再从人到饮料。代码如下:#include <cstdio>#include <cstring>#include <cstdlib>#include <algorithm>#define INF 0x3fffffff#define F(x) (x)#define N(x) (205+(x))#define CPN(x) (410+(x))#define D(x) (615+(x))using namespace std;int n, f, d, head[1005] 阅读全文
posted @ 2012-09-20 09:31 沐阳 阅读(316) 评论(0) 推荐(0) 编辑
摘要: 将gg(n)视为一个未知元,先由1000000007找出循环节222222224,然后再找出g(n)为变量时的循环节183120,然后应用矩阵快速幂求解即可。代码如下:#include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<queue>#include<set>#include<map>#include<cstring>#include<vector& 阅读全文
posted @ 2012-09-19 15:44 沐阳 阅读(276) 评论(0) 推荐(0) 编辑
摘要: 通过离线处理,由于线段树不能够动态的扩张,将所有的数都进行永久标号,无视信息的冗余。对于每一个节点,保留对5取余的所有余数的和值,用long long存储。然后根据元素个数进行更新。代码如下:#include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<queue>#include<set>#include<map>#include<cstring>#includ 阅读全文
posted @ 2012-09-19 10:22 沐阳 阅读(269) 评论(0) 推荐(0) 编辑
上一页 1 ··· 23 24 25 26 27 28 29 30 31 ··· 66 下一页