摘要: 题意:有n个人爬山,山顶坐标为0,其他人按升序给出,不同的坐标只能容纳一个人(山顶不限),Alice和Bob轮流选择一个人让他移动任意步,但不能越过前面的人,且不能和前面一个人在相同的位置。现在有一个人是king,给出king是哪个人(id),谁能将国王移动到山顶谁胜。解题思路:先考虑简化版,没有king,谁先不能移动谁输掉。和阶梯博弈类似http://blog.csdn.net/longshuai0821/article/details/7793043。根据人数的奇偶性:把人从上顶向下的位置记为a1,a2,...an, 如果为偶数个人,则把a(2i-1)和a(2i)之间的距离-1(空格数)当 阅读全文
posted @ 2013-08-21 22:10 _随心所欲_ 阅读(445) 评论(0) 推荐(0)
摘要: 打表找规律:当n为质数是,GCD(n)=n;当n为质数k的q次方时,GCD(n)=k;其他情况,GCD(n)=1.代码如下: 1 #include 2 #include 3 #include 4 #define ll long long 5 #define M 1000001 6 using namespace std; 7 ll a[M]; 8 int prime[79000],cnt; 9 bool f[M];10 int fac(int n)11 {12 for(int i=0;i<cnt&&prime[i]*prime[i]<=n;i++){13 if(n% 阅读全文
posted @ 2013-08-21 21:45 _随心所欲_ 阅读(436) 评论(0) 推荐(1)
摘要: K倍动态减法游戏!!!链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4683代码如下: 1 #include 2 #include 3 #include 4 #define ll long long 5 using namespace std; 6 ll a[3000000],b[3000000]; 7 int main() 8 { 9 int i,j,t,k;10 ll n,ans;11 scanf("%d",&t);12 while(t--){13 scanf("%... 阅读全文
posted @ 2013-08-21 21:04 _随心所欲_ 阅读(251) 评论(0) 推荐(0)
摘要: 思路:这就是K倍动态减法游戏,可以参考曹钦翔从“k倍动态减法游戏”出发探究一类组合游戏问题的论文。首先k=1的时候,必败态是2^i,因为我们把数二进制分解后,拿掉最后一个1,那么会导致对方永远也取不完,我们可以拿到最后一个1.k=2的时候,必败态是斐波那契数列,因为任何一个整数n都可以写成两项斐波那契数的和,所以我们拿掉1,对方永远取不完高两位的数。k的时候我们必须构造数列,将n写成数列中一些项的和,使得这些被取到的项的相邻两个倍数差距>k 那么每次去掉最后一个1 还是符合上面的条件。设这个数列已经被构造了i 项,第 i 项为a[ i ],前 i 项可以完美对1..b[ i ] 编码使得 阅读全文
posted @ 2013-08-21 20:17 _随心所欲_ 阅读(418) 评论(0) 推荐(0)
摘要: 思路:求必胜区间和必败区间!1-9 先手胜10-2*9后手胜19-2*9*9先手胜163-2*2*9*9后手胜……易知右区间按9,2交替出现的,所以每次除以18,直到小于18时就可以直接判断了。代码如下: 1 #include 2 int main() 3 { 4 double n; 5 while(scanf("%lf",&n)!=EOF){ 6 while(n>18) n/=18; 7 if(n<=9) puts("Stan wins."); 8 else puts("Ollie wins."); 9 }10 阅读全文
posted @ 2013-08-21 19:12 _随心所欲_ 阅读(173) 评论(0) 推荐(0)