上一页 1 2 3 4 5 6 7 8 9 ··· 15 下一页
摘要: 给出C1,C2以及若干种操作,在C1,C2直接相互赋值加减,或者C1(C2)加某个常数,或者C1(C2)乘某个常数,求最后C2的值。 可以转化成矩阵来做,根据不同的组合可以转化成13种矩阵操作,乘起来之后快速幂即可。 代码写的比较暴力。。 1 #include <stdio.h> 2 #include <string.h> 3 typedef long long LL; 4 const LL MOD = 1000000007; 5 int op[13][3][3]={ 6 { //SET C1,C1,SET C2,C2 7 {1,0,0},{0,1,0},{0,0,.. 阅读全文
posted @ 2012-10-04 01:30 Burn_E 阅读(314) 评论(0) 推荐(0)
摘要: 1~N连续的白格子,给出若干操作,分为两种,在[1,ai]里选择xi个白格子染成黑色,以及在[ai,n]里选择xi个白格子染成黑色。问把最多的格子染成黑色至少需要多少次操作。 先只考虑第一种操作,显然优先把最左边的填满,对于第二种操作,优先把最右边的填满。这就转化成了背包模型,做完两遍后合并背包即可。 1 #include <string.h> 2 #include <stdio.h> 3 #include <algorithm> 4 #define INF 0x3f3f3f3f 5 #define MAXN 1005 6 using namespace s 阅读全文
posted @ 2012-10-03 08:56 Burn_E 阅读(232) 评论(0) 推荐(0)
摘要: 统计三角形内点的个数。 如下图所示,P(ABC)=|P(AB)+P(BC)-P(AC)|。P(AB)代表线段AB上方的点的个数 1 #include <string.h> 2 #include <stdio.h> 3 #include <algorithm> 4 #define MAXN 105 5 typedef long long LL; 6 struct pnt{ 7 LL x, y; 8 bool operator < (const pnt &p) const {return x < p.x;} 9 }pn[MAXN], pm[M 阅读全文
posted @ 2012-10-03 08:43 Burn_E 阅读(170) 评论(0) 推荐(0)
摘要: 求树上的每个节点能到达的最远距离。 先预处理出每个节点从叶子上来的最大距离和次大距离,并且记录最大距离是从哪个儿子上来的。 对于每个节点,它能到的最大距离,要不就是走到自己的某个叶子,要不就是走到某个祖先节点然后转弯进入这个祖先的另一个儿子。向下DP,传递不经过这棵子树到该顶点的最大距离。 1 #include <string.h> 2 #include <stdio.h> 3 #include <algorithm> 4 #define MAXN 10001 5 #define INF 0x3f3f3f3f 6 using namespace std; 7 阅读全文
posted @ 2012-09-28 14:01 Burn_E 阅读(357) 评论(0) 推荐(0)
摘要: 水题。。记录每个节点的孩子个数就可以了。。 1 #include <string.h> 2 #include <stdio.h> 3 #include <vector> 4 #include <algorithm> 5 #define MAXN 16001 6 #define INF 0x3f3f3f3f 7 using namespace std; 8 9 struct egde{10 int v, n;11 }e[MAXN*2];12 int n, tu, tv, ans;13 int first[MAXN], es;14 vector< 阅读全文
posted @ 2012-09-28 13:52 Burn_E 阅读(289) 评论(0) 推荐(0)
摘要: 一个序列长度为n的序列P(1,n),构造一个序列Q,长度为N并且由1~N组成。一开始Qn对在P1的位置,接下来每秒Q都会整体右移一个位置,直到2N秒后和P没有交集。Ai代表第i秒P和Q交集元素的个数,Bi代表位置重合并且元素相等的元素个数。令Ci=max(Ai-Bi),构造一个序列,使Ci最小。 Ci最小是N-sqrt(N),官方题解说的比较详细。构造序列这个地方看了半天才看明白他是怎么构造的,对于S序列,可以这么理解:给出一个序列x[1,n],以及S(a1,a2,a3....),对应的操作就是先把x[1~a1]翻转,再把[a1+1,a1+a2+1]翻转....,比如x[]=(1,2,3... 阅读全文
posted @ 2012-09-25 15:05 Burn_E 阅读(331) 评论(1) 推荐(0)
摘要: 经典页面调度问题,理想算法就是移出从现在开始最久未使用的。 线段树中存正在使用的页面(题中是模版。。)下次出现的时间,每次选出现时间最晚的扔掉。如果遇到一个已经在内存中的页面,也要跟新该页面在线段树中的值。 1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 #define lson l,m,p<<1 5 #define rson m+1,r,p<<1|1 6 #define calm l+r>>1 7 #define MAXN 10000 阅读全文
posted @ 2012-09-25 14:21 Burn_E 阅读(226) 评论(0) 推荐(0)
摘要: 求至少经过K条边,到达终点的最短路(K<=50)。 K比较小,先用Bellman求出走50步到达每个点的最短路,然后把50步的可达点加到队列里SPFA即可。 题解是直接二维最短路的,不过好像比bellman+spfa慢。。目前排在HDOJ第一。。 1 #include <string.h> 2 #include <stdio.h> 3 #include <queue> 4 #define MAXN 5005 5 #define MAXE 200005 6 #define INF 0x3f3f3f3f 7 struct edge{ 8 int u,v,n 阅读全文
posted @ 2012-09-25 14:13 Burn_E 阅读(227) 评论(0) 推荐(0)
摘要: 用若干个-1到2的数组成一个最接近D的数(-1<D<2)。过程中不能超过2。 吐槽一下题目,看了半天才看明白。。。。排个序然后背包。。 1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 #define MAXN 205 5 int cas,n,tot,x[MAXN],d[240005]; 6 double x1; 7 int main(){ 8 //freopen("test.in","r",stdin); 9 scanf 阅读全文
posted @ 2012-09-25 14:04 Burn_E 阅读(216) 评论(0) 推荐(0)
摘要: 求最小的尾数为X的平方数。 符合情况的数不会有太多,从后向前搜就可以了。 1 #include <string.h> 2 #include <stdio.h> 3 #include <algorithm> 4 #define INF 0x3fffffff 5 typedef long long LL; 6 int cas,n,num[15],len,ans; 7 LL sqr(int x){ 8 return (LL)x*x; 9 }10 void dfs(int l,int mul,int pre){11 if(l==len){12 ans=st... 阅读全文
posted @ 2012-09-23 11:47 Burn_E 阅读(159) 评论(0) 推荐(0)
上一页 1 2 3 4 5 6 7 8 9 ··· 15 下一页