ACdream之取集合中任意俩个数做差,求集合最大扩充
来源:互联网 发布:软件外包管理流程 编辑:程序博客网 时间:2024/06/01 18:47
E - 娜娜梦游仙境系列——莫名其妙的插曲
Problem Description
娜娜因为帮桃花村民们解决了一大难题而受到村民们的尊敬,不过由于娜娜还想继续探索这个神奇的世界,只好恋恋不舍地与村民告别。当娜娜离开村庄的一刻,娜娜失忆了!她不记得桃花村的一切,她不记得之前吃了很多糖果,她不记得她为了过湖而跳了半天,甚至她连自己的名字都不记得了!娜娜盲目地四处溜达,突然迎面走来了一个白马王子,他问:“你是Alice吗?”。娜娜心想:“Alice?好熟的名字啊,难道这就是我的名字吗?",便回答:”是的。请问您是?“白马王子很高兴地说:”我叫Bob,我找你找了一辈子了,没有你,我总是被父王忘记,我们回王宫吧!"于是娜娜就迷迷糊糊地被带到了王宫。
国王:“你就是Alice?怎么士别三日,你变痴呆了啊,你先和我的儿子Bob先玩一玩游戏,我看看你是不是脑子有问题。”娜娜为了证明自己脑子没问题,只好与Bob玩起了游戏。
游戏规则很简单,一开始有一个集合,集合里有n个不同的数,然后Alice(娜娜)与Bob轮流进行操作,每人都可以任意选择两个数a,b,不妨设a>b,不过要求a-b不在集合中,把a-b放入集合。如果轮到某人,无法进行任何操作,则该人输掉游戏。作为职业博弈选手,娜娜即使失忆了也能凭着身体的直觉去进行最优操作。那么问,当Alice(娜娜)与Bob都沿着最优策略进行,女士优先(即娜娜先手),最终谁会获胜?
Input
多组数据,首先是一个正整数t(t<=20),表示数据的组数
对于每组数据,首先是一个整数n(1<=n<=1,000),然后是n个整数x[i](0<x[i]<=1,000,000,000),表示集合。保证集合元素不会出现相同。
Output
对于每组数据,若Alice(娜娜)最终胜利,输出"Win"
若Bob最终胜利,输出"Lose"
若无法分出胜负,输出"Draw",(均不包括双引号,注意大小写,建议复制)
Sample Input
251 2 3 4 551 2 3 4 6
Sample Output
LoseWin
Hint
样例1,一开始无论娜娜选择哪两个元素,其差值均包括在集合中,故娜娜无法操作,Bob胜利,输出Lose
样例2,一开始娜娜只能选择1和6这两个元素,并把6-1=5放入集合中,则集合变为1,2,3,4,5,6 Bob无法操作,Alice(娜娜)胜利,输出Win
这题实际上就是任意取数集中俩个数作差然后将这个数放入集合中,求集合最多可以增加多少个数,
使用的是max(a[1],a[2],a[3].........a[n])/gcd(a[1],a[2],a[3],......a[n]) ,不过暂时没搞明白为什么这样可以求出来,留着以后理解吧:
#include<iostream>#include<cstdio>#include<cstring>#include<cctype>#include<cmath>#include<cstdlib>#include<string>#include<map>#include<set>#include<vector>using namespace std;const int N=1e5+10;int t,n,a[1005];int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}int main(){ cin>>t; while(t--) { int tmp; cin>>n; cin>>tmp; int ans=tmp; int mx=tmp; for(int i=1;i<n;i++) { cin>>tmp; ans=gcd(ans,tmp); mx=max(tmp,mx); } if((mx/ans-n)%2) cout<<"Win"<<endl; else cout<<"Lose"<<endl; } return 0;}
- ACdream之取集合中任意俩个数做差,求集合最大扩充
- n个整数的集合中任意取r个数进行排列
- PAT1113 求数集合之差
- hdu 1856求集合中元素个数
- matlab 集合求差运算
- JS两集合做差
- 【二进制枚举】求在n个数中取任意个数加起来组成x的方案数
- C++ 递归艺术----求任意集合的幂集组合和子集合的总个数
- 取2个集合的差集
- 集合内求最大和
- 求集合差的几种算法
- 求两个集合的差集
- setdiff--求两个集合的差
- java集合运算:求交集,并集,集合差
- java集合运算:求交集,并集,集合差
- 10个集合,集合中无重复元素,但元素个数海量。求这个10个集合的交集。
- 集合中取集合的值
- Java中取两个集合的并集、交加和差集
- Android ActionBar完全解析,使用官方推荐的最佳导航栏(下)
- Mybatis/Ibatis,数据库操作的返回值
- Linux中的错误:too many open files
- Android开发帮助文档Doc打开速度慢解决_Python篇
- C#第一次作业
- ACdream之取集合中任意俩个数做差,求集合最大扩充
- Android -- 序列化Parcelable与Serializable区别及用法
- 魅族手机内存卡微信数据清除怎么恢复
- Qt Creator 安装 VLD
- 算法导论第二章mergesort的C++ 实现
- 观察者模式浅析(1)
- Github+Jekyll建独立博客
- C#实验4 异常处理
- hibernate获取session连接对象