题目:http://poj.org/problem?id=2993
AC代码(C++):
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <vector>
#include <queue>
#include <math.h>
#include <string>
#include <string.h>
#include <bitset>
using namespace std;
int main(){
char w[100];
char b[100];
char board[17][33];
memset(w,'\0',sizeof(w));
memset(b,'\0',sizeof(b));
memset(board,' ',sizeof(board));
cin.getline(w,100);
cin.getline(b,100);
int cnt = 0;
char tmp;
int tmpr;
int tmpc;
for(int i = 7; w[i]!='\0'; i++){
if(cnt==0&&w[i-1]==','&&(w[i+2]==','||w[i+2]=='\0')){
tmp = 'P';
cnt++;
}
if(cnt==0){
tmp = w[i];
cnt++;
}
else if(cnt==1){
tmpc = w[i]-'a';
cnt++;
}
else if(cnt==2){
tmpr = 8-(w[i]-'0');
cnt++;
}
else{
board[tmpr*2+1][tmpc*4+2] = tmp;
cnt=0;
}
}
if(cnt==3)board[tmpr*2+1][tmpc*4+2] = tmp;
cnt = 0;
for(int i = 7; b[i]!='\0'; i++){
if(cnt==0&&b[i-1]==','&&(b[i+2]==','||b[i+2]=='\0')){
tmp = 'P';
cnt++;
}
if(cnt==0){
tmp = b[i];
cnt++;
}
else if(cnt==1){
tmpc = b[i]-'a';
cnt++;
}
else if(cnt==2){
tmpr = 8-(b[i]-'0');
cnt++;
}
else{
board[tmpr*2+1][tmpc*4+2] = tmp+32;
cnt=0;
}
}
if(cnt==3)board[tmpr*2+1][tmpc*4+2] = tmp+32;
for(int i = 0; i < 17; i++){
for(int j = 0; j < 33; j++){
if(i%2==0&&j%4==0)board[i][j]='+';
else if(i%2==0&&j%4!=0)board[i][j]='-';
else if(i%2!=0&&j%4==0)board[i][j]='|';
else if(i%2!=0&&j%4-1==0&&((j+1)/4+i/2)%2==0)board[i][j]='.';
else if(i%2!=0&&j%4-1==0&&((j+1)/4+i/2)%2!=0)board[i][j]=':';
else if(i%2!=0&&j%4+1==4&&((j-1)/4+i/2)%2==0)board[i][j]='.';
else if(i%2!=0&&j%4+1==4&&((j-1)/4+i/2)%2!=0)board[i][j]=':';
else if(board[i][j]==' '){
if((j/4+i/2)%2==0)board[i][j]='.';
else if((j/4+i/2)%2!=0)board[i][j]=':';
}
}
}
for(int i = 0; i < 17; i++){
for(int j = 0; j < 33; j++){
cout<<board[i][j];
}
cout<<endl;
}
}
总结:水题, 注意Pawn的处理和开头结尾, 还有如果棋盘为空的情况