上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 30 下一页
摘要: 这是一题简单的博弈论!!所有的空白+边界的数字(个数为n)为一堆,容易推出其SG函数值为n%2+1;其他所有的数字(个数为m)的SG值为m%2。再就是用dfs将空白部分搜一下即可!(注意细节)代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #define MAX 1005 9 #pragma comment(linker,"/STACK:1024000000,1024000000") 10 using namespace std; 11 int vis[ 阅读全文
posted @ 2013-08-16 13:16 _随心所欲_ 阅读(239) 评论(0) 推荐(0)
摘要: 思路:首先给出一个结论,就是最多用两个数就可以表示任何数的倍数。证明 :对于一个数字a,可以构造出的数字有a,aa,aaa,aaaa,aaaaa,……每一个数对于n都有一个余数,余数最多有n个,根据鸽巢原理,前n+1个数中,必然有两个余数相等那么二者之差,必定为n的倍数,形式为a……a0……0。有这个结论,就简单了先枚举一个数,然后枚举两个数,BFS即可代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #define MAX 1000110 using 阅读全文
posted @ 2013-08-15 21:55 _随心所欲_ 阅读(246) 评论(0) 推荐(0)
摘要: 数学题,找循环节!!首先g(g(g(n)))=g(x) mod 1e9+7 则可知x有循环节1e9+7;之后x=g(g(n)),则可算出g(n)的循环节,在算出n的循环节就可以了!!代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #define ll __int64 9 #define mod1 100000000710 #define mod2 22222222411 #define mod3 18312012 #define mod4 24013 using names 阅读全文
posted @ 2013-08-15 19:34 _随心所欲_ 阅读(181) 评论(0) 推荐(0)
摘要: 看了解题报告才知道怎么做!!题意:有 N 堆石子和 M 个石子回收站,每回合操作的人可以选择一堆石子,从中拿出一些 放到石子回收站里(可以放进多个回收站,每个回收站可以使用无数次),但每个石子回收站每次 只能接收特定数量的石子。不能操作的输。如果有人操作完之后,有任意一堆石子无法完全回收, 那么他直接输。 一个显然的结论是,每个游戏的 SG 值就是用 M 个回收站,完全回收这堆石子可行的最大 操作次数。由于最大的 Bi 比较小,立方暴力背包即可(比较显然的是,maxBi2 以上的周期是 minBi)。而最大也就是10000,所以可以直接暴力求解sg值,找到最大操作次数。ps:看到有人竟然仅仅用 阅读全文
posted @ 2013-08-15 12:05 _随心所欲_ 阅读(599) 评论(0) 推荐(0)
摘要: 博弈论+二分!后一人会尽量选前一人切小的一块切!!代码如下: 1 #include 2 #include 3 #define I1(x) scanf("%d",&x) 4 #define I2(x,y) scanf("%d%d",&x,&y) 5 int main(){ 6 int n,t,k=0,a,b; 7 __int64 m1,m2; 8 I1(t); 9 while(t--){10 I1(n);11 m1=m2=0;12 for(int i=1;i1&&b>1){15 a>>... 阅读全文
posted @ 2013-08-14 22:25 _随心所欲_ 阅读(271) 评论(0) 推荐(0)
摘要: 思路: 其本质为阶梯博弈; 阶梯博弈:博弈在一列阶梯上进行,每个阶梯上放着自然数个点,两个人进行阶梯博弈...每一步则是将一个集体上的若干个点(>=1)移到前面去,最后没有点可以移动的人输;在本题中 1,3,4 的状态不能转移到其他状态; 其他每个状态皆可转移; 且位置特定, 如 2->1 , 5->4, 6->3, 7->2 , 8->1 9->6.....其本质我们有N级阶梯,现在要在 %3 的余数间转移, 0->0, 1->2, 2->1; 其最后的结果为1, 3, 4; 那么他们的转移的步数的奇偶性也会确定;我们只要选择步数为 阅读全文
posted @ 2013-08-14 21:37 _随心所欲_ 阅读(262) 评论(0) 推荐(0)
摘要: 找规律的博弈论!!很容易发现当n,m都为奇数时先手必败!代码如下: 1 #include 2 #include 3 #define I(x,y) scanf("%d%d",&x,&y) 4 int main(){ 5 int m,n; 6 while(I(n,m)&&(n+m)){ 7 if(!(n&1)||!(m&1)) puts("Wonderful!"); 8 else puts("What a pity!"); 9 }10 return 0;11 }View Code 阅读全文
posted @ 2013-08-14 21:00 _随心所欲_ 阅读(168) 评论(0) 推荐(0)
摘要: 很显然的nim游戏的变形,很好找规律先手败:2,3,5,8,13……其他先手胜。即满足菲波拉数列。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #define ll __int64 9 #define pi acos(-1.0)10 #define MAX 5000011 #define I(x) scanf("%d",&x)12 using namespace std;13 int f[44];14 int main(){15 int i,n 阅读全文
posted @ 2013-08-14 20:52 _随心所欲_ 阅读(190) 评论(0) 推荐(0)
摘要: 数学题!从M到1计算,在计算i的时候,算出原序列是i的倍数的个数cnt;也就是将cnt个数中的cnt-(n-k)个数变掉,n-cnt个数变为i的倍数。且i的倍数为t=m/i;则符合的数为:c[cnt][n-k]*t^(n-cnt)*(t-1)*(cnt-(n-k)).这样得到的是所有i的倍数,还要减去2*i,3*i……代码如下: 1 #include 2 #include 3 #define M 1000000007 4 #define MM 300001 5 #define ll __int64 6 #define I(x) scanf("%d",&x) 7 in 阅读全文
posted @ 2013-08-14 16:30 _随心所欲_ 阅读(229) 评论(0) 推荐(0)
摘要: 这个分区间:1 2 #include 3 #include 4 #include 5 #include 6 #define in(x) scanf("%d",&x) 7 using namespace std; 8 int main(){ 9 int n,t,ans,k,p,q;10 while(cin>>n>>p>>q){11 if(n%(p+q)>=1&&n%(p+q)<=p)12 cout<<"LOST"<<endl;13 else cout<&l 阅读全文
posted @ 2013-08-13 22:22 _随心所欲_ 阅读(164) 评论(0) 推荐(0)
上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 30 下一页