随笔分类 -  PKUOJ

1 2 3 4 5 ··· 11 下一页
pku online judge
摘要:/*采用树状数组加速程序思路是,分数无关,先排序,把index拿出来。满足条件的的 a b c编号必须是a < b < c或者 a >b > c所以对编号数组从左到右和从右到左扫描,计算出每个编号左边比自己小的个数,右边比自己大的个数,乘起来就是结果,当然还要加上反的情况。基本上可以算是O(n)把*/#include <cstdio>#include <cstdlib>#include <iostream>#include <cmath>#include <algorithm>#include <cstr 阅读全文
posted @ 2012-03-30 12:03 AC2012 阅读(404) 评论(1) 推荐(0)
摘要:/*最长回文子串算法manacher算法 O(n)线性算法当然也使用扩展的KMP算法 O(nlogn)*/#include <cstdio>#include <cstdlib>#include <iostream>#include <cmath>#include <algorithm>#include <cstring>using namespace std;#define MAXN 1000010char in[MAXN],in2[MAXN*2];int p[MAXN*2];int n,m;void init(){ in 阅读全文
posted @ 2012-03-28 22:00 AC2012 阅读(487) 评论(0) 推荐(0)
摘要:/*简单的sg游戏*/#include <cstdio>#include <cstring>int T;int N;int A[22],L[22];int sg[22];int dfs(int x,int m){ int& cur = sg[x]; if(cur!=-1)return cur; bool used[22] ={0}; for(int i=1;i<=m;i++) { if(x>=i) used[ dfs(x-i,m) ] = 1; } for(int i=0;;i++) { if(!used[i]) { cur = i;break; } 阅读全文
posted @ 2011-06-17 00:38 AC2012 阅读(330) 评论(0) 推荐(0)
摘要:/*无环图,树计算 sg值,求出每个节点处得sg值来*/#include <cstdio>#include <vector>using namespace std;int N,M,Q;int sg[1010];vector<int> G[1010];int dfs(int x){ int& cur = sg[x]; if(cur!=-1) return cur; cur = 0; bool used[1010]={0}; for(int t,i=G[x].size()-1;i>=0;i--) { used[ dfs(G[x][i]) ] = 1 阅读全文
posted @ 2011-06-16 23:51 AC2012 阅读(210) 评论(0) 推荐(0)
摘要:/*指定一个数 nn ~ oo 是必败态n/9 - n-1 必胜n/18 ~ n/9 必败n/(18*9) ~ n/18-1必胜态n/(18*18) ~ n/(18*9) 必败对于这个题目,很明显的需要用到必胜态和必败态来判断。而且n很大,所以不可能用数组求,所以只能找规律对于n及比n大的数是必败态所有能够转到必败态的状态都是必胜态所以n/9 ~ n-1就是必胜态了所有全部到达必胜态的状态是必败态所以n/18 ~ n/9 就是必败态,可以用一个区间来表示。这里需要注意边界,这里我没有考虑*/#include <cstdio>int n,ans;int main(){ while(s 阅读全文
posted @ 2011-06-16 14:08 AC2012 阅读(191) 评论(0) 推荐(0)
摘要:/*Nim游戏,首先求出sg异或和的值。如果是胜,判断每堆石块通过变化个数能够达到败态。计数就可以了*/#include <cstdio>int N,A[1010],ans;int main(){ while(scanf("%d",&N)==1) { if(!N) break; ans = 0; for(int i=0;i<N;i++) { scanf("%d",&A[i]);ans^=A[i]; } int cnt=0; if(ans) for(int i=0;i<N;i++) { if( A[i]>= ( 阅读全文
posted @ 2011-06-16 01:22 AC2012 阅读(143) 评论(0) 推荐(0)
摘要:/*NIM游戏基础*/#include <cstdio>int N,a,ans;int main(){ while(scanf("%d",&N)==1) { ans = 0; for(int i=0;i<N;i++) { scanf("%d",&a); ans ^= a; } if(ans) printf("Yes\n"); else printf("No\n"); } return 0;} 阅读全文
posted @ 2011-06-16 00:54 AC2012 阅读(136) 评论(0) 推荐(0)
摘要:/*由于任何两个相邻的棋子只与他们之间的空为有关。这些空位可以看做是石子数,谁取得了最后一个空位(石子)就是赢家,所以是转化为了普通的NIM游戏。*/#include <cstdio>#include <algorithm>using namespace std;int T,N;int d[1010];int main(){ scanf("%d",&T); while(T--) { scanf("%d",&N); for(int i=0;i<N;i++) scanf("%d",d+i); 阅读全文
posted @ 2011-06-16 00:32 AC2012 阅读(174) 评论(0) 推荐(0)
摘要:/*稍有难度的题目。sg游戏树删边游戏。不过在树的基础上加入了环,这个环是一个特殊的环,每个环和树只有一个公共节点,没有公共边。而且存在重边。所以对于无向图的保存需要注意这里除了记录下每个节点的连接边以外,还要记录每两个节点之间边的个数。然后分析环的特性:没一个环最终都可以化简,奇数环可以化简为一条边,偶数环可以删去,详细可参见论文。*/#include <cstdio>#include <vector>#include <cstring>using namespace std;int N;int M,K;vector<int> G[110];i 阅读全文
posted @ 2011-06-15 14:37 AC2012 阅读(224) 评论(0) 推荐(0)
摘要:/*floyd求最小环。在floyd算法的基础上,我们知道第k次循环,就是求i到j经过编号1~k之间顶点的最小距离。所以可以在第k次循环的时候,利用k-1次循环的信息,找到一个最小解。k次循环完成,就找到了全局的最下解*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include &l 阅读全文
posted @ 2011-06-12 14:33 AC2012 阅读(153) 评论(0) 推荐(0)
摘要:/*优先队列,注意直接用string速度比较慢,总之用STL比较慢自己写堆,数据结构可能会比较快*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip> 阅读全文
posted @ 2011-05-28 14:35 AC2012 阅读(170) 评论(0) 推荐(0)
摘要:/* 威佐夫博奕(Wythoff Game) 两堆 对于这种博弈,有一个通项公式:a[k] = [k*(1+sqrt(5))/2],b[k] = a[k]+k; 基于两个规律.首先枚举前几个必败态 (0,0) (1,2) (3,5) (4,7) (6,10),.... 规律是,a[k] = 等于之前没有出现的自然数 b[k] = a[k]+k 通项公式的给出,还有一个定理,beatty定理: 正无理数,alpha,beta,如果有1/a+1/b=1,那么数列[an],[bn],严格递增,而且构成正整数上的一个划分 a[n] = [cn] b[n] = a[n]+n = [c*n] +n = [ 阅读全文
posted @ 2011-05-02 20:30 AC2012 阅读(241) 评论(0) 推荐(0)
摘要:/* 当P>M的时候C有可能不等于P-M*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include <bitset>#i 阅读全文
posted @ 2011-05-02 11:46 AC2012 阅读(106) 评论(0) 推荐(0)
摘要:/* 不仅求最优解,还要过程,我的懒方法,执行两次。*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include <bitset> 阅读全文
posted @ 2011-05-02 11:08 AC2012 阅读(188) 评论(0) 推荐(0)
摘要:// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include <bitset>#include <algorithm># 阅读全文
posted @ 2011-05-02 01:49 AC2012 阅读(197) 评论(0) 推荐(0)
摘要:/* 不找规律,打表,搜索,O(n)*/// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include <bitset>#includ 阅读全文
posted @ 2011-05-02 01:37 AC2012 阅读(124) 评论(0) 推荐(0)
摘要:/* a[i] = (a[i-1]+a[i+1])/2-c[i]; (a[i]+c[i])*2=a[i-1]+a[i+1] a[i+1]= (a[i]+c[i])*2-a[i-1]; a[i] = (a[i-1]+c[i-1])*2-a[i-2] a[2] = (a[1]+c[1])*2-a[0] = 2*a[1]-a[0]+2*c[1] a[3] = (a[2]+c[2])*2-a[1] = ( (a[1]+c[1])*2-a[0]+c[2] )*2-a[1] = = 4*(a[1]+c[1])-2*a[0]+2*c[2]-a[1] = 3*a[1]-2*a[0]+2*c[2]+4*c[1] 阅读全文
posted @ 2011-05-02 00:37 AC2012 阅读(184) 评论(0) 推荐(0)
摘要:// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include <bitset>#include <algorithm># 阅读全文
posted @ 2011-05-01 02:50 AC2012 阅读(168) 评论(0) 推荐(0)
摘要:// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include <bitset>#include <algorithm># 阅读全文
posted @ 2011-05-01 02:07 AC2012 阅读(173) 评论(0) 推荐(0)
摘要:// include file#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <cctype>#include <ctime>#include <iostream>#include <sstream>#include <fstream>#include <iomanip>#include <bitset>#include <algorithm># 阅读全文
posted @ 2011-05-01 01:54 AC2012 阅读(177) 评论(0) 推荐(0)

1 2 3 4 5 ··· 11 下一页