Sunday 22 March 2009

The 9th Zhejiang University Programming Contest F

题目在这里 http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=3211


#include <iostream>
#include <memory.h>
using namespace std;
typedef unsigned int uint;
int p10(int n){
switch(n){
case 0: return 1;
case 1: return 10;
case 2: return 100;
case 3: return 1000;
case 4: return 10000;
case 5: return 100000;
case 6: return 1000000;
}
}
bool fail(int n){
for(;n;--n)
cin.ignore(8,'\n');
return false;
}
bool check(uint n){
char tmp[8];
bool should_move[6]={false};
int i,remained;
cin.getline(tmp,8);
for(i=0;i<6;++i)
should_move[i]=(n/p10(i))%10>=5;
for(i=0;i<6;++i)
if((tmp[i]=='o')==should_move[5-i]) return fail(7);
cin.getline(tmp,8);
cin.getline(tmp,8); //---
cin.getline(tmp,8);
cin.getline(tmp,8);
for(i=0;i<6;++i)
should_move[i]=(n/p10(i))%10%5==1;
for(i=0;i<6;++i)
if((tmp[i]=='o')==should_move[5-i]) return fail(3);
cin.getline(tmp,8);
for(i=0;i<6;++i)
should_move[i]=(n/p10(i))%10%5==2;
for(i=0;i<6;++i)
if((tmp[i]=='o')==should_move[5-i]) return fail(2);
cin.getline(tmp,8);
for(i=0;i<6;++i)
should_move[i]=(n/p10(i))%10%5==3;
for(i=0;i<6;++i)
if((tmp[i]=='o')==should_move[5-i]) return fail(1);
cin.getline(tmp,8);
for(i=0;i<6;++i)
should_move[i]=(n/p10(i))%10%5==4;
for(i=0;i<6;++i)
if((tmp[i]=='o')==should_move[5-i]) return false;
return true;
}
int main() {
int N,a,b;
for(cin>>N;N;--N) {
cin>>a>>b; cin.get();
cout<<(check((a+b)*(b-a+1)/2)?"No mistake":"Mistake")<<endl;
}
return 0;
}

No comments:

Post a Comment