码迷,mamicode.com
首页 > 其他好文 > 详细

第四周 8.1 --- 8.7

时间:2016-08-05 07:46:15      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:

...

8.1

忘记在干嘛了..好像补了弱鸡赢第一场的题

8.2

不会做多校..水题也不会..什么都不会

8.3

补多校,做了个弱鸡赢,还没补

8.4

依然是什么都不会的多校

 

好菜.....

 

 

8.5

巴什博奕

一堆 n 个石子,两个人轮流取,每次取 x 个(1<= x <= m) 

n = (m+1) 是必败状态

所以 对于 一般 的 n = k*(m+1) + r ,只要 每次 把石头 取成 (m+1)的倍数 转移给对方,自己就可以赢了

想起当时司老大 讲的时候,说,你就把(m+1)的倍数留给对方,你就肯定赢了

当时还觉得这样 好毒啊...

诶...过这么久还不会博弈...真是对不起司老大

 

hdu 1846 Brave Game

技术分享
 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <algorithm>
 5 using namespace std;
 6 int n,m;
 7 
 8 int main(){
 9     int T;
10     scanf("%d",&T);
11     while(T--){
12         scanf("%d %d",&n,&m);
13         if(n%(m+1) == 0) puts("second");
14         else puts("first");
15     }
16     return 0;
17 }
View Code

 

威佐夫博弈

两堆石头,两个人轮流取,每次操作 可以取走其中一堆的任意数目的石头,或者 取走两堆石头的相同数目

必败 状态 为 (ak,bk)

1.bk = ak + k

2.double phi = (1+sqrt(5))/2 (黄金分割率)

ak = floor(k*phi) bk = floor(k*k*phi)

 

hdu 1527 取石子游戏

n,m 太大,打表打不下,用差值来判断

技术分享
 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <algorithm>
 5 #include <map>
 6 #include <cmath>
 7 using namespace std;
 8 int n,m;
 9 
10 map<int,map<int,int> > h;
11 
12 int main(){
13     double phi = (1.0+sqrt(5.0))/2.0;
14     while(scanf("%d %d",&n,&m) != EOF){
15         if(n > m) swap(n,m);
16         int l = floor((m-n)*phi);
17         if(l == n) puts("0");
18         else puts("1");
19     }
20     return 0;
21 }
View Code

 

第四周 8.1 --- 8.7

标签:

原文地址:http://www.cnblogs.com/wuyuewoniu/p/5739806.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!