UVA 11489 Integer Game(博弈)
2014-05-22 20:02
351 查看
题目链接:http://vjudge.net/contest/view.action?cid=46225#problem/H
题意就是给定一个长度不超过1000位的数 每次可以取其中的一个 使剩下的各位的和为3的倍数,直到不能取为止; 分别统计各位对三取余得到0,1,2;已经各位数的和sum;
然后通过sum%3的值第一次取谁使剩下的和为三的倍数;
最后再判断step的奇偶性来确定赢家。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char a[1010];
int num[3];
int main()
{
int t,x=0;
cin>>t;
while(t--){
printf("Case %d: ",++x);
cin>>a;
num[0]=num[1]=num[2]=0;
int sum=0;
int len=strlen(a);
for(int i=0;i<len;i++){
sum+=a[i]-'0';
num[(a[i]-'0')%3]++;
}
int step=0;
if(num[sum%3]){
num[sum%3]--;
step=1;
}
if(step)
step+=num[0];
if(step%2)
puts("S");
else
puts("T");
}
return 0;
}
题意就是给定一个长度不超过1000位的数 每次可以取其中的一个 使剩下的各位的和为3的倍数,直到不能取为止; 分别统计各位对三取余得到0,1,2;已经各位数的和sum;
然后通过sum%3的值第一次取谁使剩下的和为三的倍数;
最后再判断step的奇偶性来确定赢家。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char a[1010];
int num[3];
int main()
{
int t,x=0;
cin>>t;
while(t--){
printf("Case %d: ",++x);
cin>>a;
num[0]=num[1]=num[2]=0;
int sum=0;
int len=strlen(a);
for(int i=0;i<len;i++){
sum+=a[i]-'0';
num[(a[i]-'0')%3]++;
}
int step=0;
if(num[sum%3]){
num[sum%3]--;
step=1;
}
if(step)
step+=num[0];
if(step%2)
puts("S");
else
puts("T");
}
return 0;
}
相关文章推荐
- UVA 11489 - Integer Game 博弈
- UVa11489 - Integer Game(博弈)
- UVA11489Integer Game博弈
- UVA 11489 Integer Game——博弈
- UVa 11489 - Integer Game (简单博弈 脑筋急转弯)
- UVa 11489 (博弈) Integer Game
- UVA - 11489 Integer Game (博弈)
- UVA 11489 Integer Game(博弈,规律)
- UVA 11489 - Integer Game(数论+博弈)
- (UVA - 11489)Integer Game(博弈)
- UVA 11489 - Integer Game 博弈
- Integer Game(UVA11489)3的倍数
- uva11489 - Integer Game(考思维,找规律)
- UVa 11489 Integer Game (博弈&想法题)
- UVA - 11489 Integer Game
- UVA 11489 - Integer Game(找规律)
- Uva 11489 - Integer Game 解题报告(简单推理)
- uva 11489 Integer Game
- UVa 11489 - Integer Game
- Uva 11489 - Integer Game