POJ原址:POJ2993
死掉了无数脑细胞,终于结束了这两个棋盘,回想起乍一看去,棋盘长得有多奇异,结果现在都能自己还原了,难得。
程序实在太简太长,好烦,看看别人怎么做的。
别人的比我确实行数少了好多,小优是用了结构体做的,还有包括之前那题,有用find做的,find是虾米,待会再看吧。
一步一步把棋盘还原出来,还是很艰辛的,该做点别的了,暑期社会实践报告come on~
程序:
//看了一眼discuss就让我不得不知竟然white和black还要考虑先后输入,呵呵呵呵,这算好事坏事
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int i,j,k=0,p=0;
char temp1[1000],temp2[1000],var[1000],varp[100];
int x[100],y[100],px[100],py[100];
memset(var,0,sizeof(var));
memset(x,0,sizeof(x));memset(y,0,sizeof(y));
memset(varp,0,sizeof(varp));
memset(px,0,sizeof(x));memset(py,0,sizeof(x));
int len1,len2;
cin.getline(temp1,1000);
cin.getline(temp2,1000);
len1=strlen(temp1);
len2=strlen(temp2);
if(temp1[0]=='W')
{
for(i=7;i<=len1;i++)
{
if(temp1[i]=='K'||temp1[i-1]=='K'||temp1[i-2]=='K')
{
if(i%4==3)
var[k]='K';
else if(i%4==0)
x[k]=temp1[i]-'a';
else if(i%4==1)
y[k++]=temp1[i]-'1';
}
if(temp1[i]=='Q'||temp1[i-1]=='Q'||temp1[i-2]=='Q')
{
if(i%4==3)
var[k]='Q';
else if(i%4==0)
x[k]=temp1[i]-'a';
else if(i%4==1)
y[k++]=temp1[i]-'1';
}
if(temp1[i]=='R'||temp1[i-1]=='R'||temp1[i-2]=='R')
{
if(i%4==3)
var[k]='R';
else if(i%4==0)
x[k]=temp1[i]-'a';
else if(i%4==1)
y[k++]=temp1[i]-'1';
}
if(temp1[i]=='B'||temp1[i-1]=='B'||temp1[i-2]=='B')
{
if(i%4==3)
var[k]='B';
else if(i%4==0)
x[k]=temp1[i]-'a';
else if(i%4==1)
y[k++]=temp1[i]-'1';
}
if(temp1[i]=='N'||temp1[i-1]=='N'||temp1[i-2]=='N')
{
if(i%4==3)
var[k]='N';
else if(i%4==0)
x[k]=temp1[i]-'a';
else if(i%4==1)
y[k++]=temp1[i]-'1';
}
if((temp1[i-1]==','&&temp1[i]>='a'&&temp1[i]<='h')||(temp1[i-2]==','&&temp1[i]>='1'&&temp1[i]<='8'))
//这个约束想了半天
{
int num=6+k*4;
if((i-num)%3==1)
{
varp[p]='P';
px[p]=temp1[i]-'a';
}
else if((i-num)%3==2)
py[p++]=temp1[i]-'1';
}
}
}
//至此应该已经将white全部分离
//接下来构建没有分隔符的map
char map[8][8];
memset(map,0,sizeof(map));
for(i=0;i<=k-1;i++)
map[7-y[i]][x[i]]=var[i];
for(i=0;i<=p-1;i++)
map[7-py[i]][px[i]]=varp[i];//丫这里xy是反的
//white的map构建完成
//开始构建black
k=0;
p=0;
memset(var,0,sizeof(var));
memset(x,0,sizeof(x));memset(y,0,sizeof(y));
memset(varp,0,sizeof(varp));
memset(px,0,sizeof(x));memset(py,0,sizeof(x));
if(temp2[0]=='B')
{
for(i=7;i<=len2;i++)
{
if(temp2[i]=='K'||temp2[i-1]=='K'||temp2[i-2]=='K')
{
if(i%4==3)
var[k]='k';
else if(i%4==0)
x[k]=temp2[i]-'a';
else if(i%4==1)
y[k++]=temp2[i]-'1';
}
if(temp2[i]=='Q'||temp2[i-1]=='Q'||temp2[i-2]=='Q')
{
if(i%4==3)
var[k]='q';
else if(i%4==0)
x[k]=temp2[i]-'a';
else if(i%4==1)
y[k++]=temp2[i]-'1';
}
if(temp2[i]=='R'||temp2[i-1]=='R'||temp2[i-2]=='R')
{
if(i%4==3)
var[k]='r';
else if(i%4==0)
x[k]=temp2[i]-'a';
else if(i%4==1)
y[k++]=temp2[i]-'1';
}
if(temp2[i]=='B'||temp2[i-1]=='B'||temp2[i-2]=='B')
{
if(i%4==3)
var[k]='b';
else if(i%4==0)
x[k]=temp2[i]-'a';
else if(i%4==1)
y[k++]=temp2[i]-'1';
}
if(temp2[i]=='N'||temp2[i-1]=='N'||temp2[i-2]=='N')
{
if(i%4==3)
var[k]='n';
else if(i%4==0)
x[k]=temp2[i]-'a';
else if(i%4==1)
y[k++]=temp2[i]-'1';
}
if((temp2[i-1]==','&&temp2[i]>='a'&&temp2[i]<='h')||(temp2[i-2]==','&&temp2[i]>='1'&&temp2[i]<='8'))
{
int num=6+k*4;
if((i-num)%3==1)
{
varp[p]='p';
px[p]=temp2[i]-'a';
}
else if((i-num)%3==2)
py[p++]=temp2[i]-'1';
}
}
}
//至此已经将black全部分离
//接下来构建没有分隔符的map
for(i=0;i<=k-1;i++)
map[7-y[i]][x[i]]=var[i];
for(i=0;i<=p-1;i++)
map[7-py[i]][px[i]]=varp[i];
//至此,没有:与.的map构建完成
for(i=0;i<8;i++)
for(j=0;j<8;j++)
{
if(map[i][j]==0)
{
if((i+j)%2==1)//如果i+j是奇数
map[i][j]=':';
else
map[i][j]='.';
}
}
//至此map完全构造完毕
//开始还原棋盘
int n,m;
for(i=0;i<17;i++)
{
if(i%2==0)
cout<<"+---+---+---+---+---+---+---+---+"<<endl;
else
{
n=i/2;
if(n%2==0)
{
cout<<"|.";
for(m=0;m<7;m++)
{
if(m%2==0)
cout<<map[n][m]<<".|:";
else
cout<<map[n][m]<<":|.";
}
cout<<map[n][7]<<":|"<<endl;
}
else
{
cout<<"|:";
for(m=0;m<7;m++)
{
if(m%2==0)
cout<<map[n][m]<<":|.";
else
cout<<map[n][m]<<".|:";
}
cout<<map[n][7]<<".|"<<endl;
}
}
}
return 0;
}