symons

___________每一天都是幸福的!!

  博客园  ::  :: 新随笔  ::  :: 订阅 订阅  :: 管理

2013年1月9日

摘要: 代码出处:http://www.notonlysuccess.com/index.php/segment-tree-complete/这个是基础线段树,用树形数组实现的。实现,查询,建树,添加修改结点信息。 1 #include <stdio.h> 2 #define lson l,m,rt<<1 3 #define rson m+1,r,rt<<1|1 4 #define maxn 55555 5 int sum[maxn<<2]; 6 void PushUp(int rt) 7 { 8 sum[rt]=sum[rt<<1]+sum 阅读全文
posted @ 2013-01-09 13:27 symons 阅读(160) 评论(0) 推荐(0)

2013年1月7日

摘要: 转自:http://blog.csdn.net/acm_cxlove/article/details/7835016----------------------------------------------------------------------------------------------------------------------------------------------------引用:http://blog.csdn.net/dgq8211/article/details/7602807有一堆个数为n的石子,游戏双方轮流取石子,满足:1)先手不能在第一次把所有的石 阅读全文
posted @ 2013-01-07 18:18 symons 阅读(180) 评论(0) 推荐(0)

摘要: 这个题目好玩,知道推算方法了以后,刚做完之前那个题,然后我就果断打表!MLE!然后我就输出了20*20的情况找找规律吧,我发现当n,m中只要有一个为偶数的时候先手就会赢。下面附上2段代码。0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 //这个是打表出来的20*20的值。n是行号,m是列号。1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 ... 阅读全文
posted @ 2013-01-07 16:23 symons 阅读(156) 评论(0) 推荐(0)

摘要: 这题范围是1-1000,可以用打表法写出来,满足2^n<=1000这个条件的n的取值是[0,9]。 就简单了,只要在i-2^n的记录中找到必败点那么就可以认定i点是必胜点。 然后打表输出就可以了。 1 #include <stdio.h> 2 bool num[1000+10]; 3 int main() 4 { 5 int n,i,j; 6 num[0]=num[1]=1;//1代表赢 0代表输 (针对先手来说) 7 int POWa[11]={0,1,2,4,8,16,32,64,128,256,512}; 8 for(i=2;i<=1000;++i) ... 阅读全文
posted @ 2013-01-07 15:44 symons 阅读(158) 评论(0) 推荐(0)

摘要: 这个题看了一上午,一直没头绪,撞了东南西北墙,终于在中午看了解题报告。恍然大悟! 这个题的意思是这样的,只能从较大数中取较小数的倍数。到最后谁不能拿了,就视为失败。 我开始想找到一个数字的规律来解题,后来发现不行,接着又想尝试递归来模拟拿的步骤来写,又被自己否定了,终于看了解题报告。恍然大雾,明白了决策与影响控制对手的节奏。如果a/b>=2,则有两种选择来控制对手的行动,1种是将状态变为{a>b&&a/b=1}另一种是{a<b}。这样对手在两种情况下均只能有一种选择,而结果也只有两种,所以具有选择权的就会控制比赛结果。 也许大家在担心,是不是这下控制住了,下次 阅读全文
posted @ 2013-01-07 12:24 symons 阅读(240) 评论(0) 推荐(0)

2013年1月5日

摘要: 看了尼姆博弈的简单情况,然后找了这道题来看,刚开始看的时候没啥思路,以为这情况不多了去了。、 后来才发现,有n堆物品,最多有n个情况,因为一次只能拿一堆的物品,所以在这一堆拿多少受限于其他n-1堆,所以就可以枚举所有的奇异局势,看目前这一堆需要多少个物品才能满足奇异局势,(上面这些是针对开始时候是非奇异局势来说的),然后求出来这个值再与之比较,如果比当前值小则res++。 而且要注意,开始要计算一下初始状态是不是奇异局势。--------------------------------------------------------------------------------------. 阅读全文
posted @ 2013-01-05 14:34 symons 阅读(348) 评论(0) 推荐(1)

摘要: 威佐夫博奕(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。 这种情况下是颇为复杂的。我们用(ak,bk)(ak ≤ bk ,k=0,1,2,…,n)表示两堆物品的数量并称其为局势,如果甲面对(0,0),那么甲已经输了,这种局势我们称为奇异局势。前几个奇异局势是:(0,0)、(1,2)、(3,5)、(4,7)、(6,10)、(8,13)、(9,15)、(11,18)、(12,20)。 可以看出,a0=b0=0,ak是未在前面出现过的最小自然数,而 bk= ak + k,奇异局势有如下三条性质: 1。任 阅读全文
posted @ 2013-01-05 11:38 symons 阅读(300) 评论(0) 推荐(0)

2012年11月20日

摘要: 这道题是一道DP题,解题思路: NUM[i][j]表示在数字中从i到j位组成的数。 dp[i][j]表示前i位数字分成j段的最大乘积。 状态转移方程 if(j==1) dp[i][j]=NUM[1][i]; if(j>=1&&j<=i) dp[i][j]=max{ dp[d,j-1]*NUM[d+1][i] }其中 1<=d<i else if(i<j) dp[i][j]=0;----------------------------------------------------------------------------------- 1 # 阅读全文
posted @ 2012-11-20 09:15 symons 阅读(155) 评论(0) 推荐(0)

2012年11月19日

摘要: Descriptionhero为了能顺利娶princess ,花了血本,买了个房子,现在决定装修。房子的长度为n米,宽度为3米,现在我们有2种地砖,规格分别是1米×1米,2米×2米,如果要为该教室铺设地砖,请问有几种铺设方式呢 1 /* 2 *这道题我着实卡了挺长时间的,今天翻出来一看最开始以为是DP,原来不是DP, 3 *是组合数学里面的问题,然后我害怕超范围特意写了个c[m][n]=c[m][n-1]+c[m-1][n-1] 4 *递推。 5 *然后还是没过,因为我开始写的是res+=c[i][n-i]*2; 然后我怎么想都对。 6 *后来我发现这么搞是不对的,应该是* 阅读全文
posted @ 2012-11-19 17:20 symons 阅读(312) 评论(0) 推荐(0)

摘要: 之前看没头绪,现在看太水了。水过。 1 #include <iostream> 2 #include <map> 3 #include <string> 4 using namespace std; 5 bool judge(string a,string b) 6 { 7 if(a<b) return 0; 8 else return 1; 9 }10 int main()11 {12 map<string,int>haha;13 map<string,int>::iterator it;14 string abc,tt,ma 阅读全文
posted @ 2012-11-19 13:40 symons 阅读(174) 评论(0) 推荐(0)