记录编号 |
103756 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[POJ2931][MIT2005]拖延游戏 |
最终得分 |
100 |
用户昵称 |
cstdio |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.006 s |
提交时间 |
2014-05-31 15:21:55 |
内存使用 |
0.32 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
class SURREAL{
public:
ll s;
void make(int a[],int n){//a是塔,n是高度
s=0;
ll k=1ll<<52;
int i=1;
while(i<=n){
if(a[i]==a[1]){
if(!a[i]) s+=k;
else s-=k;
}
else break;
i++;
}
k>>=1;
while(i<=n){
if(!a[i]) s+=k;
else s-=k;
i++,k>>=1;
}
}
};
SURREAL operator + (SURREAL a,SURREAL b){
SURREAL c;
c.s=a.s+b.s;
return c;
}
bool operator < (SURREAL a,SURREAL b){return a.s<b.s;}
const int SIZEN=1010;
char s[SIZEN];
int a[SIZEN],l[SIZEN];
int g[SIZEN];
int main(){
freopen("procrastination.in","r",stdin);
freopen("procrastination.out","w",stdout);
int T;
scanf("%d",&T);
SURREAL p[2],r;
int kase;
while(T--){
scanf("%s %d\n",s,&kase);
for(int k=0;k<=1;k++){
p[k].s=0;
for(int i=0;i<=2;i++) scanf("%d",&l[i]);
for(int j=0;j<=2;j++){
for(int i=1;i<=l[j];i++){
scanf("%s",s);
a[i]=(s[0]=='W'?0:1);
}
r.make(a,l[j]);
p[k]=p[k]+r;
}
}
printf("Test %d: %s\n",kase,p[0]<p[1]?"No":"Yes");
}
return 0;
}