zoukankan      html  css  js  c++  java
  • 模拟 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 */
    编译人生,运行世界!
  • 相关阅读:
    Angular JS 学习之 Scope作用域
    PHP变量
    AngularJS学习之模型
    Angular JS学习之指令
    Angular JS学习之表达式
    Angular JS 学习之简介
    HTML DOM学习之三
    HTML DOM学习之二
    HTML DOM学习之一
    《集体智慧编程》第一章
  • 原文地址:https://www.cnblogs.com/Running-Time/p/4372527.html
Copyright © 2011-2022 走看看