Emag eht htiw Em Pleh POJ - 2993
题目链接:https://vjudge.net/problem/POJ-2993
题意:Help Me with the Game POJ - 2996的逆版本,给你黑白棋子的描述,请你输出这个棋盘。具体的定义见 https://vjudge.net/problem/POJ-2996
输入:
输出:
思路:模拟,2996做完了这题应该没有什么难度。重点如下:
1.棋子描述 [type] [column] [row]的结构体编写。
2.找到棋盘上行列和棋子位置行列对应关系。
3.找到棋盘上行列’:‘和’.‘的放置特点,容易看出与其(i+j)的奇偶性有关。
4.将输入的字符串转化成white和black的位置。从’,'下手即可。
具体见代码:
#include<iostream>
#include<map>
using namespace std;
struct pos{//位置描述
int type_toint;
char type;
int x,y;
}p[107];
pos white[107];
pos black[107];
char ma[24][42];
int main(){
string white_s;
string black_s;
getline(cin,white_s);
getline(cin,black_s);
int i;
int cnt_w=0;
int cnt_b=0;
//white
//cout<<"w!\n";
string per="";
int len_w=white_s.size();
//将字符串转化为white的位置
for(i=7;i<white_s.size();i++){
if(white_s[i]!=','&&i!=len_w-1){
per+=white_s[i];
}
else {
if(i==len_w-1)per+=white_s[i];;
cnt_w++;
if(per.size()==3)
{
white[cnt_w].type=per[0];
white[cnt_w].x=per[2]-'0';
white[cnt_w].y=(int)per[1]-96;
}
else{//2
white[cnt_w].type='P';
white[cnt_w].x=per[1]-'0';
white[cnt_w].y=(int)per[0]-96;
}
per="";
}
}
将字符串转化为black的位置
//cout<<"b!\n";
per="";
int len_b=black_s.size();
for(i=7;i<black_s.size();i++){
if(black_s[i]!=','&&i!=len_b-1){
per+=black_s[i];
}
else{
if(i==len_b-1)per+=black_s[i];
cnt_b++;
if(per.size()==3)
{
black[cnt_b].type=(char)((int)per[0]+32);
black[cnt_b].x=per[2]-'0';
black[cnt_b].y=(int)per[1]-96;
}
else{//2
black[cnt_b].type='p';
black[cnt_b].x=per[1]-'0';
black[cnt_b].y=(int)per[0]-96;
}
per="";
}
}
//check
// for(i=1;i<=cnt_b;i++){
// cout<<black[i].type<<" "<<black[i].x<<" "<<black[i].y<<endl;
// }
int j;
int row,c;
row=0;
c=0;
//cout<<"oper!\n";
for(i=0;i<=16;i++){
//cout<<"i="<<i<<endl;
if(i%2==0){
//cout<<"even>\n";
string sim="+---+---+---+---+---+---+---+---+";
for(int id=0;id<=32;id++)ma[i][id]=sim[id];
}
else{
for(j=0;j<=32;j++){
// cout<<"j="<<j<<endl;
row=8-((i+2-1)/2-1);
c=j/4+1;
if(j%4==0){
ma[i][j]='|';
}
else{
//奇偶性判断放'.'还是':"
if(1){
if((row+c)%2!=0)ma[i][j]='.';
else ma[i][j]=':';
}
}
}
}
}
//cout<<"chess!\n";
//chess
//white
for(i=1;i<=cnt_w;i++){
char c=white[i].type;
int xx=white[i].x;
int yy=white[i].y;
int ii=15-(xx-1)*2;
int jj=2+(yy-1)*4;
ma[ii][jj]=c;
}
//black
for(i=1;i<=cnt_w;i++){
char c=black[i].type;
int xx=black[i].x;
int yy=black[i].y;
//也许有更好的处理方式
int ii=15-(xx-1)*2;//行对应关系
int jj=2+(yy-1)*4;//列对应关系
ma[ii][jj]=c;
}
//cout<<"ans:\n";
for(i=0;i<=16;i++){
for(j=0;j<=32;j++)cout<<ma[i][j];
cout<<endl;
}
//cout<<">>>\n";
return 0;
}