摘要: /*这题貌似就是找规律。f1 = k-1;f2 = k*k - k;f3 = (f1 + f2) * (k-1);//(k-1)表示首位不为0的个数,比如n = 3时, 首位可能是1, 2, 3, 4, 5, 6, 7, 8, 9。My Code:*/#include <iostream>#include <cstdio>using namespace std;int main(){ //freopen("data.in", "r", stdin); int f1, f2, f3; int n, k, i; while(~scan 阅读全文
posted @ 2011-09-29 16:25 AC_Von 阅读(303) 评论(0) 推荐(0) 编辑
摘要: /*拿到这题首先想到的转移方程就是 :dp[i][j] = max(dp[i-1][j-1], dp[i-1][j], dp[i-1][j+1]) + dp[i][j];不过这题如果从time = 0开始往下分的话,会很复杂。可以采用类似数塔的理想,从下往上推。转移方程是 :dp[i][j] = max(dp[i+1][j], dp[i+1][j-1], dp[i+1][j+1]) + dp[i][j];注意考虑position = 0 和 position = 10的情况。My Code:*/#include <iostream>#include <cstdio>#i 阅读全文
posted @ 2011-09-29 15:27 AC_Von 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 威佐夫博弈公式:当处在奇异局势时,ak = (k*(1 + sqrt(5))/2), bk = ak + k;所以,这题套公式即可:My Code:#include <iostream>#include <cstdio>#include <cmath>using namespace std;int main(){ int n, m, k, tmp; while(~scanf("%d%d", &n, &m)){ if(m > n){ n = n + m; m = n - m; n = n - m; ... 阅读全文
posted @ 2011-09-28 15:26 AC_Von 阅读(225) 评论(0) 推荐(0) 编辑
摘要: /*做完后看到网上很多人推的规律,还有巴什博弈。表示还没有学习巴什博弈,直接用sg写的,这题可以说是sg函数的简化版。最后只需判断sg[n]是否为0即可。回家看巴什博弈去,T_T...(看到队里很多人都是0MS过的,不得不佩服啊,估计网上流传的代码这题用sg写的我这是独此一家了,就是时间有点烂。呵呵,不过这题作为sg函数的入门题还是不错的)*//*My Code 109+ms */#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int N = 10 阅读全文
posted @ 2011-09-28 11:18 AC_Von 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 拿到这题的第一个感觉就是跟Nim博弈正好反过来了,然后就不知道怎么做了,后来问大牛,大牛的回答很简练:“anit-nim,国家集训队论文”。然后我就翻了一晚上论文。表示又学到新知识了,呵呵。My Code:#include <iostream>#include <cstdio>using namespace std;int a[50];int main(){ //freopen("data.in", "r", stdin); int t, n, i, flag; while(scanf("%d", &t 阅读全文
posted @ 2011-09-27 22:04 AC_Von 阅读(533) 评论(0) 推荐(0) 编辑
摘要: 这题问了三个人才做出来,晕啊。第一位是位大牛,把基本的思路给我讲清楚了,但是在实现上卡住了,老是想着怎么开个sg[]数组记忆搜过的sg值,后来才发现想错了。第二位,之前被大牛讲明白的gbx,原来这里直接返回s - c的值当作sg值就行,至于为什么,稍后再续。第三位,zz,可以鄙视我了,因为我手贱看他的代码了,不过他的代码确实有值得学习的地方,很简练!思路:这题明显的sg函数。可惜我纠结了半天没想起思路来。1、设当前的箱子容量为si,求出一个t满足:t + t * t < si,如果当前箱子里有ci颗石头,1、ci > t 则必胜;2、ci == t 则必败;3、ci < t不 阅读全文
posted @ 2011-09-27 17:34 AC_Von 阅读(1127) 评论(1) 推荐(0) 编辑
摘要: 找规律的题目,规律如下:2 —— 9 N-position10 —— 9*2 P-position19 —— 9*2*9 N9*2*9+1 —— 9*2*9*2 P9*2*9*2+1 —— 9*2*9*2*9 N。。。思路:将输入的数连除18,当得到的数n小于18时,判断如果(2 <= n <=9)则为N位,否则为P位;My Code:#include <iostream>#include <cstdio>#include <cstring>using namespace std;int main(){ //freopen("data. 阅读全文
posted @ 2011-09-25 19:24 AC_Von 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 类似 Fibonacci again and again貌似有点模板的感觉,就是不知到hash数组的上界是怎么算出来的,无语,继续研究去。。。#include <iostream>#include <cstdio>using namespace std;const int N = 10010;const int M = 110;int num[M];int vis[N];int sg[N];int n;void get_sg(){ int i, j; for(i = 0; i < N; i++) sg[i] = 0; for(i = 1; i < N; i+ 阅读全文
posted @ 2011-09-24 20:54 AC_Von 阅读(256) 评论(0) 推荐(0) 编辑
摘要: sg函数,有人说这是解决博弈论问题的王道,不过现在我还没感觉,只是知道像这道题类型的题目用sg函数解。至于什么是sg函数。。。 先定义mex运算,mex是对集合的运算,它表示最小不属于该集合的非负整数。比如 mex {0} = 1; mex{0, 2} = 1;mex{1, 2, 3} = 0;sg(x) = mex{...};这里是三堆,求得每堆的sg值,然后抑或运算,结果为0则为P-position,否则为N-position。 至于怎么证明的,网上资料很多:sg函数入门:http://hi.baidu.com/%BA%A3%CF%E0%C1%AC/blog/item/ac7a411... 阅读全文
posted @ 2011-09-24 12:18 AC_Von 阅读(1018) 评论(0) 推荐(0) 编辑
摘要: 最近搞了一下博弈论,处于初级入门阶段,找了几个题做做,正巧碰上这题。这题是Nim博弈的一个变形,将两坐标的距离看作一堆石子中的石子数,n就是石子堆数,所以根据Nim博弈的结论:a1 ^ a2 ^ a3……^an == 0 ,则必胜。所以这题的答案就出来了。My Code:#include <iostream>#include <cstdio>using namespace std;int main(){//freopen("data.in", "r", stdin);int a, b, ans, tmp;int n, m;whil 阅读全文
posted @ 2011-09-22 21:58 AC_Von 阅读(312) 评论(0) 推荐(0) 编辑
摘要: 最近这几天,上周留下午个人赛,晚上北邮的热身赛。周天下午北邮的网络赛。可以说是比赛大集中啊。这几次比赛都没写总结,也没写解题报告。不想写,一直没感觉。。。今天抽点时间写点开学以后这段时间的小结吧。 周六下午的热身赛可以很明显的看出,本来暑假集训前我们这些人的水平度还是差不多的,没有说很好的,也没有很差的。一个暑假的集训,可以说都有很多的进步,至少开始意识到我们不会的太多了,要学的太多了。 关键的是开学后这段时间。差距已经渐渐开始拉开了。有的人从开学以来就没来过实验室,也没在宿舍作过题,至少我可以看到的,有的人的题数一直还是那些。(甚至包括暑假集训时表现很“牛”的人。。。) 再说说我们... 阅读全文
posted @ 2011-09-20 23:28 AC_Von 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 这题纠结了两天,开始一点思路没有,后来看到有大牛把这题的做法称作区间树,并说明了区间树与线段树的区别(区间树是区间内被染色的区间标记为1,未被染色的区间标记为0)。我觉得这就是线段树的一类操作,没有必要分出去吧。。。思路:区间更新,首先想到的应该是Lazy思想;这题分五种情况:CommandSemanticsUTS←S∪TITS←S∩TDTS←S−TCTS←T−SSTS←S⊕TU:直接将T对应的区间覆盖为1;I:将T的补区间(比如T[l, r], 补区间就是[0, l-1], [r+1, N])清零即可;D:直接将T区间清零;C:先将T的补区间清零,再对T区间取反;S:直接对T区间取反;(.. 阅读全文
posted @ 2011-09-20 22:13 AC_Von 阅读(307) 评论(0) 推荐(0) 编辑
摘要: 这题应该是个水题,可是我比题还水。。。TT,用map写的,存对应的roma数字时存错啦。。。正好在比赛,我晕,WA了两次,我的排名啊。。。TT#include <iostream>#include <cstdio>#include <cstdlib>#include <map>using namespace std;map<int, string> m;struct roma{ int x; string s;}roma[10010];void init(){ m[1] = "I";m[2] = "II& 阅读全文
posted @ 2011-09-17 17:16 AC_Von 阅读(247) 评论(0) 推荐(0) 编辑
摘要: /*第二次做这题,其中有些坎坷,第一次做时理解的也不深刻,导致这次做起来有些费劲。开始思路是一边更新一边计算总的Hook值,可惜一直WA,做了大半下午,晕死,先更新完再统计一遍的方法过了,再后来上网查了一下,正好有个大牛也是用第一种思路做的,参考了一下他的代码,发现原来我的flag初值整错了。。。。*///第一种思路代码(609+ms):#include <iostream>#include <cstdio>#define L(t) t << 1#define R(t) t << 1 | 1using namespace std;const in 阅读全文
posted @ 2011-09-16 16:20 AC_Von 阅读(212) 评论(0) 推荐(0) 编辑
摘要: /*题意:输出每次贴上的海报所在的行号,行号为1...h;开始拿到这题没思路,后来问了问本校的大牛,终于找到思路。这题是按high建树,结构体中定义一个len变量,存放当前该结点的空闲长度。某结点的父结点存放其子结点的最大空闲长度值;比如(len = 10): 1 len = max(len2,len3) / \ 2 3 (len = max... 阅读全文
posted @ 2011-09-15 21:52 AC_Von 阅读(226) 评论(0) 推荐(0) 编辑
摘要: /*设原序列的逆序数为sum,每往后移一个数,可以找到规律sum += n-2*num[i]-1;(n为元素个数,num[i]为移动的数);求原序列的逆序数时可以用线段树,每输入一个数,先querry [输入的数,n]中元素的个数,再把num[i]插入到线段树中。。。*/#include <iostream>#include <cstdio>#include <cstring>#define L(x) x << 1#define R(x) x << 1 | 1using namespace std;const int N = 5005 阅读全文
posted @ 2011-09-14 21:25 AC_Von 阅读(161) 评论(0) 推荐(0) 编辑
摘要: /*贡献出无数WA, 就因为一个地方写错, 悲剧的一晚上啊!不过能过了还是很爽的。 思路:用Trie树给字符串重新标号,然后用并查集,用一个a[i] 记录当前并查集跟结点上连接的结点数。*/#include <iostream>#include <cstdio>#include <cstring>using namespace std;struct node{ int flag; node * next[53];};const int N = 200005;int parent[N];int rank[N];int a[N];int num;node * n 阅读全文
posted @ 2011-09-14 00:25 AC_Von 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 大牛无视,小白代码。。。又是无聊的上机课......#include <iostream>#include <cstdio>#include <cstdlib>using namespace std;typedef struct node{ int data; struct node * next;}node, *linklist;//顺序建立链表linklist creat(linklist &l , int n){ l = (linklist)malloc(sizeof(node)); linklist p, tail; tail = l; fo 阅读全文
posted @ 2011-09-13 15:47 AC_Von 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 这题做的真的很想砸电脑!!!!TLE, 完了WA, 检查完错误又RE,无数次的RE,RE,RE,RE!!!RE你妹啊!把字符串定义在while()外边就能过,定义在里边就RE,还有char型能过,string就TLE,至于卡这么贱吗!!!前后总共来了30多遍!!!!崩溃啊!!!!!!#include <iostream>#include <cstdio>#include <string>#include <map>using namespace std;const int N = 108;const int inf = 0x3fffffff;ma 阅读全文
posted @ 2011-09-11 21:08 AC_Von 阅读(199) 评论(0) 推荐(0) 编辑
摘要: /*开始思路想错了,直接用并查集把输入的square并到并查集里边了,后来想到可能一种square连续出现多次,这样直接合并肯定会出问题的。然后就一直再想其他思路,昨晚睡觉时突然想到可以给这些square重新编号,把对应的square的pipes type继承过来,然后再用并查集合并。最终以6A告终。不容易啊,大牛鄙视我吧。*/#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int N = 3000;class pipes{ public: int 阅读全文
posted @ 2011-09-10 09:42 AC_Von 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 貌似是道水题。Prim, 484MS水过。。。#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int N = 505;const int inf = 0x7ffffff;int dis[N][N];int low[N];int vis[N];int v[N];void Prim(int n){ int flag, i, j, min, sum = 0; for(i = 1; i <= n; i++) { low[i] = dis[1][i]; 阅读全文
posted @ 2011-09-09 19:52 AC_Von 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 这题A 的很是纠结,从下午5点多开始做到现在,一直WA。。。其中滋味,别提了。。。请容我发泄两句。。。1385!WA你妹啊!!!My Code:#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int N = 105;const int inf = 10000000;int dis[N][N];int map[N][N];int low[N];int vis[N];int pre[N];int v[N];int cmp(int src, int de 阅读全文
posted @ 2011-09-08 22:16 AC_Von 阅读(333) 评论(0) 推荐(0) 编辑
摘要: 个人感觉这个题挺好,用到了 最短路+DP,题意很容易就看出来了,其实就是0-1背包问题,状态转移方程:dp[j] = min(dp[j], dp[j-v[i]] + w[i]), 背包容量V = sum(v[0]+v[1] +...+v[n]},]其中每点的power为v[i], 0点到i点的最短路为w[i];然后再在i = [sum/2+1, sum]范围内找min(dp[i])。 ps:偶悲剧的把i的范围写成i = [sum/2, sum]了,贡献无数WA。。。郁闷!!!My Code:#include <iostream>#include <cstdio>#inc 阅读全文
posted @ 2011-09-07 16:32 AC_Von 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 开始用Floyd做的,TLE!更二的时我自己找了一组1 1000 的数据,4S才算出来,本身程序就有问题,我居然还交上去了。。。后来用Dijkstra做,过了。。。200+ms;#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int N = 1005;const int inf = 1000000;int dis[N][N];int low[N];int vis[N];int num1[N];int num2[N];void Dijkstra(in 阅读全文
posted @ 2011-09-07 11:10 AC_Von 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 数据结构上机课,无聊。。。(严蔚敏那本书上的例题)/*Another: VonData: 2011/09/06*/#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>using namespace std;const int LIST_SIZE = 100;const int LISTINCREMENT = 10;struct sqlist{ int * elem; int len; int listsize;};//creatint InitList_s 阅读全文
posted @ 2011-09-06 16:05 AC_Von 阅读(180) 评论(0) 推荐(0) 编辑