• 模拟 POJ 2996 Help Me with the Game


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

      1 /*
      2     题意:给出白方和黑方的棋子和对应的坐标,输出该副棋盘的样子
      3     模拟题 + 结构体排序:无算法,switch区分读入的字符,按照黑白的排序规则排序,再输出
      4     注意:(转载)1,棋盘中大写字母表示的是白方棋子,小写是黑方。
      5                   2,注意棋盘的行数是从最下面开始计数的。和数组的下标相反。也就是说数组行数为8的棋盘行   数为1(数组从1开始)。
      6                   3,最容易忽略也最重要的是:白旗和黑棋在输出的时候其实排序规则是不一样的(但是棋子的类型都要按照KQRBNP顺序)。
      7                       主要是行列的优先问题:
      8                           白棋先按行数(棋盘的行编号)升序排,然后按照列升序排。解决办法:按行升序扫描输出。
      9                           黑棋先按行数(棋盘的编号)降序排,然后按照列升序排。解决办法:按行降序扫描输出。
     10                           输出的时候主要是要注意一下循环扫描的顺序就行了。
     11     详细解释:http://poj.org/showmessage?message_id=346814
     12 */
     13 #include <cstdio>
     14 #include <iostream>
     15 #include <algorithm>
     16 #include <cstring>
     17 #include <cmath>
     18 #include <string>
     19 #include <map>
     20 #include <queue>
     21 #include <vector>
     22 using namespace std;
     23 
     24 const int MAXN = 1e6 + 10;
     25 const int INF = 0x3f3f3f3f;
     26 struct NODEb
     27 {
     28     char ch, col;
     29     int pow, row;
     30 }nodeb[1000];
     31 struct NODEw
     32 {
     33     char ch, col;
     34     int pow, row;
     35 }nodew[1000];
     36 int a[50][50];
     37 string s[16];
     38 string ss[16];
     39 
     40 bool cmpw(NODEw x, NODEw y)
     41 {
     42     if (x.pow == y.pow)
     43     {
     44         if (x.row == y.row)        return x.col < y.col;
     45         else        return x.row < y.row;
     46     }
     47     return x.pow < y.pow;
     48 }
     49 
     50 bool cmpb(NODEb x, NODEb y)
     51 {
     52     if (x.pow == y.pow)
     53     {
     54         if (x.row == y.row)        return x.col < y.col;
     55         else        return x.row > y.row;
     56     }
     57     return x.pow < y.pow;
     58 }
     59 
     60 void work(void)
     61 {
     62     for (int i=1; i<=8; ++i)
     63     {
     64         int k = 0;
     65         for (int j=2; j<33; j+=4)
     66         {
     67             ++k;
     68             switch (s[i][j])
     69             {
     70                 case 'K': a[i][k] = 1;    break;
     71                 case 'Q': a[i][k] = 2;    break;
     72                 case 'R': a[i][k] = 3;    break;
     73                 case 'B': a[i][k] = 4;    break;
     74                 case 'N': a[i][k] = 5;    break;
     75                 case 'P': a[i][k] = 6;    break;
     76                 case 'k': a[i][k] = -1;    break;
     77                 case 'q': a[i][k] = -2;    break;
     78                 case 'r': a[i][k] = -3;    break;
     79                 case 'b': a[i][k] = -4;    break;
     80                 case 'n': a[i][k] = -5;    break;
     81                 case 'p': a[i][k] = -6;    break;
     82                 case ':': a[i][k] = 0;    break;
     83                 case '.': a[i][k] = 0;    break;
     84                 default: break;
     85             }
     86         }
     87     }
     88     int tb = 0, tw = 0;
     89     for (int i=1; i<=8; ++i)
     90     {
     91         for (int j=1; j<=8; ++j)
     92         {
     93             if (a[i][j] > 0)
     94             {
     95                 nodew[++tw].pow = a[i][j];
     96                 nodew[tw].row = 9 - i;    nodew[tw].col = 'a' + j - 1;
     97                 switch (a[i][j])
     98                 {
     99                     case 1: nodew[tw].ch = 'K';    break;
    100                     case 2: nodew[tw].ch = 'Q';    break;
    101                     case 3: nodew[tw].ch = 'R';    break;
    102                     case 4: nodew[tw].ch = 'B';    break;
    103                     case 5: nodew[tw].ch = 'N';    break;
    104                     default: break;
    105                 }
    106             }
    107             if (a[i][j] < 0)
    108             {
    109                 nodeb[++tb].pow = -a[i][j];
    110                 nodeb[tb].row = 9 - i;    nodeb[tb].col = 'a' + j - 1;
    111                 switch (a[i][j])
    112                 {
    113                     case -1: nodeb[tb].ch = 'K';    break;
    114                     case -2: nodeb[tb].ch = 'Q';    break;
    115                     case -3: nodeb[tb].ch = 'R';    break;
    116                     case -4: nodeb[tb].ch = 'B';    break;
    117                     case -5: nodeb[tb].ch = 'N';    break;
    118                     default: break;
    119                 }
    120             }
    121         }
    122     }
    123 
    124     sort (nodew+1, nodew+1+tw, cmpw);
    125     sort (nodeb+1, nodeb+1+tb, cmpb);
    126 
    127     cout << "White: ";
    128     for (int i=1; i<=tw; ++i)
    129     {
    130         if (nodew[i].pow != 6)
    131             cout << nodew[i].ch;
    132         cout << nodew[i].col << nodew[i].row;
    133         if (i != tw)    cout << ',';
    134     }
    135     cout << endl;
    136     cout << "Black: ";
    137     for (int i=1; i<=tb; ++i)
    138     {
    139         if (nodeb[i].pow != 6)
    140             cout << nodeb[i].ch;
    141         cout << nodeb[i].col << nodeb[i].row;
    142         if (i != tb)    cout << ',';
    143     }
    144     cout << endl;
    145 }
    146 
    147 int main(void)        //POJ 2996 Help Me with the Game
    148 {
    149     freopen ("I.in", "r", stdin);
    150 
    151     for (int i=1; i<=8; ++i)
    152     {
    153         cin >> ss[i];    cin >> s[i];
    154     }
    155     cin >> ss[9];
    156 
    157     work ();
    158 
    159     return 0;
    160 }
    161 
    162 /*
    163 White: Ke1,Qd1,Ra1,Rh1,Bc1,Bf1,Nb1,a2,c2,d2,f2,g2,h2,a3,e4
    164 Black: Ke8,Qd8,Ra8,Rh8,Bc8,Ng8,Nc6,a7,b7,c7,d7,e7,f7,h7,h6
    165 */
    编译人生,运行世界!
  • 相关阅读:
    MySQL "show users"
    MySQL
    A MySQL 'create table' syntax example
    MySQL backup
    MySQL show status
    Tomcat, pathinfo, and servlets
    Servlet forward example
    Servlet redirect example
    Java servlet example
    How to forward from one JSP to another JSP
  • 原文地址:https://www.cnblogs.com/Running-Time/p/4372527.html
Copyright © 2020-2023  润新知