此题是阶梯博弈。
学习阶梯博弈的话推荐看这个博客,讲的很好http://blog.sina.com.cn/s/blog_63e4cf2f0100tq4i.html
此题wa在sort函数,发现我竟然不会用呀!郁闷
这个函数可以传两个参数或三个参数。第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址。也就是说,排序的区间是[a,b)。简单来说,有一个数组int a[100],要对从a[0]到a[99]的元素进行排序,只要写sort(a,a+100)就行了,默认的排序方式是升序。
对向量v排序也差不多,sort(v.begin(),v.end());
排序的数据类型不局限于整数,只要是定义了小于运算的类型都可以,比如字符串类string。
如果是没有定义小于运算的数据类型,或者想改变排序的顺序,就要用到第三参数——比较函数。比较函数是一个自己定义的函数,返回值是bool型,它规定了什么样的关系才是“小于”。想把刚才的整数数组按降序排列,可以先定义一个比较函数cmp
bool cmp(int a,int b)
{
return a>b;
}
排序的时候就写sort(a,a+100,cmp);
#include<stdio.h>
#include<algorithm>
using namespace std;
int main(){
int i,j,t,T,n;
int num[1010],a[1010];
scanf("%d",&T);
for(t=1;t<=T;t++){
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&num[i]);
num[0]=0;
sort(num+1,num+n+1);
j=1;
for(i=n;i>=1;i--){
a[j]=num[i]-num[i-1]-1;
j++;
}
int s=0;
for(i=1;i<=n;i+=2){
s^=a[i];
}
if(s!=0)
printf("Georgia will win\n");
else
printf("Bob will win\n");
}
}