https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2855
模拟之
#include <cstdlib>
#include <cctype>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
#include <sstream>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <fstream>
#include <numeric>
#include <iomanip>
#include <bitset>
#include <list>
#include <stdexcept>
#include <functional>
#include <utility>
#include <ctime>
using namespace std;
#define PB push_back
#define MP make_pair
#define CLR(vis) memset(vis,0,sizeof(vis))
#define MST(vis,pos) memset(vis,pos,sizeof(vis))
#define MAX3(a,b,c) max(a,max(b,c))
#define MAX4(a,b,c,d) max(max(a,b),max(c,d))
#define MIN3(a,b,c) min(a,min(b,c))
#define MIN4(a,b,c,d) min(min(a,b),min(c,d))
#define PI acos(-1.0)
#define INF 0x7FFFFFFF
#define LINF 1000000000000000000LL
#define eps 1e-8
typedef long long ll;
typedef unsigned long long ull;
char s[11][22];
int weight(int n)
{
int a=0;
int b=0;
while(n>0)
{
int tp=n%2;
if(tp)
b++;
else
a++;
n>>=1;
}
return a*250+b*500;
}
void solve1()
{
for(int i=1; i<=5;i++)
{
for(int j=0;j<=7;j++)
{
s[i][j]=s[i+1][j];
}
}
for(int i=0;i<=7;i++)
{
s[6][i]='.';
}
for(int i=5;i>=1;i--)
{
for(int j=10;j<=17;j++)
{
s[i][j]=s[i-1][j];
}
}
for(int i=10;i<=17;i++)
{
s[0][i]='.';
}
}
void solve2()
{
for(int i=0;i<=4;i++)
{
for(int j=0;j<=7;j++)
{
s[i][j]=s[i+2][j];
}
}
for(int i=0;i<=7;i++)
{
s[5][i]='.';
s[6][i]='.';
}
for(int i=6;i>=2;i--)
{
for(int j=10;j<=17;j++)
{
s[i][j]=s[i-2][j];
}
}
for(int i=10;i<=17;i++)
{
s[0][i] = '.';
s[1][i] = '.';
}
}
void solve3()
{
for(int i=6;i>=2;i--)
{
for(int j=0; j<=7;j++)
{
s[i][j]=s[i-1][j];
}
}
for(int i=0;i<=7;i++)
{
s[1][i]='.';
}
for(int i=0;i<=4;i++)
{
for(int j=10;j<=17;j++)
{
s[i][j]=s[i+1][j];
}
}
for(int i=10;i<=17;i++)
{
s[5][i] = '.';
}
}
void solve4()
{
for(int i=0;i<=4;i++)
{
for(int j=0;j<=7;j++)
{
s[i][j]=s[i+1][j];
}
}
for(int i=0;i<=7;i++)
{
s[5][i]='.';
}
for(int i=6;i>=2;i--)
{
for(int j=10;j<=17;j++)
{
s[i][j] = s[i-1][j];
}
}
for(int i=10;i<=17;i++)
{
s[1][i] = '.';
}
}
void solve5()
{
for(int i=5;i>=1;i--)
{
for(int j=0;j<=7;j++)
{
s[i][j]=s[i-1][j];
}
}
for(int i=0;i<=7;i++)
{
s[0][i] = '.';
}
for(int i=1; i<=5;i++)
{
for(int j=10;j<=17;j++)
{
s[i][j]=s[i+1][j];
}
}
for(int i=10;i<=17;i++)
{
s[6][i]='.';
}
}
void solve6()
{
for(int i=6;i>=2;i--)
{
for(int j=0;j<=7;j++)
{
s[i][j]=s[i-2][j];
}
}
for(int i=0;i<=7;i++)
{
s[0][i]='.';
s[1][i]='.';
}
for(int i=0;i<=4;i++)
{
for(int j=10;j<=17;j++)
{
s[i][j]=s[i+2][j];
}
}
for(int i=10;i<=17;i++)
{
s[6][i]='.';
s[5][i]='.';
}
}
int main()
{
int t;
cin>>t;
int cas=1;
int flag;
while(t--)
{
CLR(s);
flag=0;
for(int i=0;i<8;i++)
scanf("%s",s[i]);
printf("Case %d:\n",cas++);
int sum1=0,sum2=0;
for(int i=0;i<7;i++)
{
for(int j=0;j<=7;j++)
{
if(s[i][j]>='A' && s[i][j]<='Z')
{
sum1+=weight(s[i][j]);
}
}
}
for(int i=0;i<7;i++)
{
for(int j=10;j<=17;j++)
{
if(s[i][j]>='A' && s[i][j]<='Z')
{
sum2+=weight(s[i][j]);
}
}
}
int h1,h2;
for(int i=0;i<7;i++)
{
for(int j=0;j<=7;j++)
{
if(s[i][j]=='/')
{
h1=i;
break;
}
}
}
for(int i=0;i<7;i++)
{
for(int j=10;j<=17;j++)
{
if(s[i][j]=='/')
{
h2=i;
break;
}
}
}
if(h1>h2)
{
if(sum1>sum2)
{
printf("The figure is correct.\n");
flag = 1;
}
else
{
if(sum1==sum2)
{
solve1();
}
else
{
solve2();
}
}
}
else
{
if(h1==h2)
{
if(sum1==sum2)
{
printf("The figure is correct.\n");
flag = 1;
}
else
{
if(sum1>sum2)
{
solve3();
}
else
{
solve4();
}
}
}
else
{
if(sum1<sum2)
{
printf("The figure is correct.\n");
flag = 1;
}
else
{
if(sum1==sum2)
{
solve5();
}
else
{
solve6();
}
}
}
}
if(flag==0)
{
for(int i=0;i<7;i++)
{
printf("%s\n",s[i]);
}
}
}
return 0;
}