题目地址:http://poj.org/problem?id=2993

  1 /*
  2     题意:与POJ2996完全相反
  3     模拟题 + 字符串处理:无算法,读入两行字符串找出相应点用used标记,输出时标记过的输出字母,否则输出'.'或':'。
  4     注意:棋盘的行的顺序是从下到上递增的
  5 */
  6 #include <cstdio>
  7 #include <iostream>
  8 #include <algorithm>
  9 #include <cstring>
 10 #include <cmath>
 11 #include <string>
 12 #include <map>
 13 #include <queue>
 14 #include <vector>
 15 using namespace std;
 16 
 17 const int MAXN = 1e3 + 10;
 18 const int INF = 0x3f3f3f3f;
 19 int used[MAXN][MAXN];
 20 char a[MAXN][MAXN];
 21 map<char, int> m;
 22 string s1,s2;
 23 
 24 void print(int tw, int tb)
 25 {
 26     bool flag = false;
 27     for (int i=1; i<=8; ++i)
 28     {
 29         cout << "+---+---+---+---+---+---+---+---+" << endl;
 30         cout << "|";
 31         flag = !flag;
 32         for (int j=1; j<=8; ++j)
 33         {
 34             (flag) ? cout << "." : cout << ":";
 35             if (!used[i][j])    (flag) ? cout << "." : cout << ":";
 36             else
 37             {
 38                 cout << a[i][j];
 39             }
 40             (flag) ? cout << "." : cout << ":";
 41             flag = !flag;
 42             cout << "|";
 43         }
 44         cout << endl;
 45     }
 46 
 47     cout << "+---+---+---+---+---+---+---+---+" << endl;
 48 }
 49 
 50 void work(void)
 51 {
 52     int tw = 0, tb = 0;
 53     for (int i=7; s1[i]!='\0'; ++i)        //White
 54     {
 55         if (s1[i] == ',')    continue;
 56         if (s1[i]<='S' && s1[i] >= 'B')
 57         {
 58             a[9-(s1[i+2]-'0')][m[s1[i+1]]] = s1[i];
 59             used[9-(s1[i+2]-'0')][m[s1[i+1]]] = 1;
 60             i += 3;
 61         }
 62         if (s1[i]<='s' && s1[i]>='a')
 63         {
 64             a[9-(s1[i+1]-'0')][m[s1[i]]] = 'P';
 65             used[9-(s1[i+1]-'0')][m[s1[i]]] = 1;
 66             i += 2;
 67         }
 68         if (i >= s1.size ())    break;
 69     }
 70     for (int i=7; s2[i]!='\0'; ++i)        //Black
 71     {
 72         if (s2[i] == ',')    continue;
 73         if (s2[i]<='S' && s2[i] >= 'B')
 74         {
 75             a[9-(s2[i+2]-'0')][m[s2[i+1]]] = s2[i] - 'A' + 'a';
 76             used[9-(s2[i+2]-'0')][m[s2[i+1]]] = 1;
 77             i += 3;
 78         }
 79         if (s2[i]<='s' && s2[i]>='a')
 80         {
 81             a[9-(s2[i+1]-'0')][m[s2[i]]] = 'p';
 82             used[9-(s2[i+1]-'0')][m[s2[i]]] = 1;
 83             i += 2;
 84         }
 85         if (i >= s2.size ())    break;
 86     }
 87 
 88     print (tw, tb);
 89 }
 90 
 91 int main(void)        //POJ 2993 Emag eht htiw Em Pleh
 92 {
 93     //freopen ("J.in", "r", stdin);
 94 
 95     char ch = 'a';
 96     for (int i=1; i<=8; ++i)
 97     {
 98         m[ch++] = i;
 99     }
100 
101     getline (cin, s1);
102     getline (cin, s2);
103     memset (used, 0, sizeof (used));
104     work ();
105     
106     return 0;
107 }
108 
109 /*
110 +---+---+---+---+---+---+---+---+
111 */
112 
113 /*
114 +---+---+---+---+---+---+---+---+
115 |.r.|:::|.b.|:q:|.k.|:::|.n.|:r:|
116 +---+---+---+---+---+---+---+---+
117 |:p:|.p.|:p:|.p.|:p:|.p.|:::|.p.|
118 +---+---+---+---+---+---+---+---+
119 |...|:::|.n.|:::|...|:::|...|:p:|
120 +---+---+---+---+---+---+---+---+
121 |:::|...|:::|...|:::|...|:::|...|
122 +---+---+---+---+---+---+---+---+
123 |...|:::|...|:::|.P.|:::|...|:::|
124 +---+---+---+---+---+---+---+---+
125 |:P:|...|:::|...|:::|...|:::|...|
126 +---+---+---+---+---+---+---+---+
127 |.P.|:::|.P.|:P:|...|:P:|.P.|:P:|
128 +---+---+---+---+---+---+---+---+
129 |:R:|.N.|:B:|.Q.|:K:|.B.|:::|.R.|
130 +---+---+---+---+---+---+---+---+
131 */

 

编译人生,运行世界!