acdream 1684 娜娜梦游仙境系列——莫名其妙的插曲 (gcd)

题意:一开始有一个集合,集合里有n个不同的数,然后Alice(娜娜)与Bob轮流进行操作,每人都可以任意选择两个数a,b,不妨设a>b,不过要求a-b不在集合中,把a-b放入集合(集合元素个数只增不减)。如果轮到某人,无法进行任何操作,则该人输掉游戏。当Alice(娜娜)与Bob都沿着最优策略进行,娜娜先手,最终谁会获胜?

思路:减来减去的,跟最大公约数GCD差不多。此题没有什么最优的策略,都是平等的。用的也不是博弈知识。

  最后不能操作的局面一定是{1g, 2g,3g......xg},3g表示3*g,g表示最大公约数。这样的局面就不能操作了,谁遇谁输。经过多少步会产生这样的局面?原序列最大元素big一定不会从集合消失,所以等于xg,那么将这个“死局面”每个元素除以g变成{1,2,3.....x},所以最后局面中有x个元素,而给的序列是n个元素,因每次操作增加一个数,所以功走了x-n步,奇数步为先手赢。

  总结,这题需要求的就是gcd,big/gcd后再减去n,再判奇偶定结果。

  

 1 /*
 2 * this code is made by xcw0754
 3 * Problem: 1684
 4 * Verdict: Accepted
 5 * Submission Date: 2015-07-19 23:45:13
 6 * Time: 0MS
 7 * Memory: 1680KB
 8 */
 9 #include <bits/stdc++.h>
10 using namespace std;
11 const int N=1050;
12 int a[N];
13
14 int cal(int n)
15 {
16     sort(a,a+n);
17     int tmp=a[0];
18     for(int i=1; i<=n; i++)
19         tmp=__gcd(tmp,a[i]);
20     return tmp;
21 }
22 int main(void)
23 {
24     //freopen("e://input.txt", "r", stdin);
25     int t, n;
26     cin>>t;
27     while(t--)
28     {
29         scanf("%d",&n);
30         int big=0;
31         for(int i=0; i<n; i++)
32         {
33             scanf("%d",&a[i]);
34             big=max(big,a[i]);
35         }
36         int gcd=cal(n);//最大公约数
37         int ans=big/gcd-n;
38         if(ans&1)   puts("Win");
39         else    puts("Lose");
40     }
41     return 0;
42 }

AC代码

时间: 2024-10-24 23:06:58

acdream 1684 娜娜梦游仙境系列——莫名其妙的插曲 (gcd)的相关文章

E - 娜娜梦游仙境系列——莫名其妙的插曲

E - 娜娜梦游仙境系列——莫名其妙的插曲 E - 娜娜梦游仙境系列——莫名其妙的插曲 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) Problem Description 娜 娜因为帮桃花村民们解决了一大难题而受到村民们的尊敬,不过由于娜娜还想继续探索这个神奇的世界,只好恋恋不舍地与村民告别.当娜娜离开村庄的一刻,娜娜 失忆了!她不记得桃花村的一切,她不记得之前吃了很多糖果

ACdream HUT新生摸底训练赛 E - 娜娜梦游仙境系列——莫名其妙的插曲 数论

解题思路:其实就是找能组成的最大集合.max(a[1],a[2],a[3].........a[n])/gcd(a[1],a[2],a[3],......a[n]) 解题代码: 1 // File Name: e.cpp 2 // Author: darkdream 3 // Created Time: 2015年04月13日 星期一 13时56分11秒 4 5 #include<vector> 6 #include<list> 7 #include<map> 8 #i

A - 娜娜梦游仙境系列——诡异的钢琴

A - 娜娜梦游仙境系列——诡异的钢琴 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) Submit Status Problem Description 从前,有一个ACdream王国,王国里住着一位公主,她叫娜娜,娜娜公主有一天做了一个很长很长的梦~她说她从来没有遇到过这些奇妙的东西~ 现在站在娜娜面前的是一台钢琴,这是一台看上去很正常的钢琴,上面有88个键(频率从27赫兹

G - 娜娜梦游仙境系列——梦醒

G - 娜娜梦游仙境系列——梦醒 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others)     Special Judge Submit Status Problem Description 娜娜离开了这个王国,走向远方,在旷野上,娜娜看到了一个大时钟,上面的时针分针秒针都在缓缓转动,那只挥着翅膀的天使又出现了,天使说:“外面天已经亮了,娜娜你别睡过头哟~”,娜娜问:“我怎样才能醒过

D - 娜娜梦游仙境系列——村民的怪癖

D - 娜娜梦游仙境系列——村民的怪癖 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) Submit Status Problem Description 娜娜费劲九牛二虎之力终于把糖果吃完了(说好的吃不完呢?骗人,口亨~),于是,缘溪行,忘路之远近.忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷,娜娜甚异之.复前行,欲穷其林.林尽水源,便得一山,山有小口,仿佛若有光.便

F - 娜娜梦游仙境系列——多民族王国

F - 娜娜梦游仙境系列——多民族王国 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) Submit Status Problem Description 娜娜好不容易才回忆起自己是娜娜而不是什么Alice,也回忆起了自己要继续探索这个世界的目标,便偷偷溜出皇宫.娜娜发现这个王国有很多个民族组成,每个民族都有自己的方言,更要命的是这些方面差别还很远,这就导致这个王国的人民交流十

C - 娜娜梦游仙境系列——吃不完的糖果

C - 娜娜梦游仙境系列——吃不完的糖果 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) Submit Status Problem Description 娜娜好不容易才在你的帮助下"跳"过了这个湖,果然车到山前必有路,大战之后必有回复,大难不死,必有后福!现在在娜娜面前的就是好多好多的糖果还有一些黑不溜秋的东西!不过娜娜眼中只有吃不完的糖果!娜娜高兴地快要蹦起来了

B - 娜娜梦游仙境系列——跳远女王

B - 娜娜梦游仙境系列——跳远女王 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) Problem Description 娜 娜觉得钢琴很无趣了,就抛弃了钢琴,继续往前走,前面是一片湖,娜娜想到湖的对岸,可惜娜娜找了好久都没找到小桥和小船,娜娜也发现自己不是神仙,不能像 八仙过海一样.正当娜娜发愁的时候,娜娜发现湖上面有一些石头!娜娜灵机一动,发现可以沿着石头跳吖跳吖,这样

ACdream HUT新生摸底训练赛 C 娜娜梦游仙境系列——吃不完的糖果 DP

解题思路:环形数组最大字串,穿过和不穿过的DP 解题代码: 1 // File Name: c.cpp 2 // Author: darkdream 3 // Created Time: 2015年04月12日 星期日 19时52分24秒 4 5 #include<vector> 6 #include<list> 7 #include<map> 8 #include<set> 9 #include<deque> 10 #include<st