poj 2996 Help Me with the Game

題意:給出一個8 x 8的黑白相間的棋盤,棋盤上有黑子和白字,棋子類型有K、Q、R、B、N、P,白棋用大寫表示,黑棋用小寫表示,根據給出的棋盤,分別輸出白棋、黑棋的位置。
分析:模擬

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
typedef pair<char,int> pos;
const char piece[] = "KQRBNP";
char line[100];
map<char, vector<pos> >h;

bool blackcmp(pos a, pos b) {
    if(a.se == b.se) {
        return a.fi < b.fi;
    }
    return a.se > a.se;
}

bool whitecmp(pos a, pos b) {
    if(a.se == b.se) {
        return a.fi < b.fi;
    }
    return a.se < b.se;
}

int main() {
    while(scanf("%s", line) != EOF) {
        h.clear();
        for(char i = 8; i > 0; i--) {
            scanf("%s", line);
            for(int k = 0, j = 'a' - 1; line[k] != '\0'; k++) {
                if(isalpha(line[k])) {
                    h[line[k]].push_back(pos((char)j, i));
                }
                else if(line[k] == '|') {
                    j++;
                }
            }
            scanf("%s", line);
        }
        for(int i = 0; piece[i] != '\0'; i++) {
            char tmp1 = tolower(piece[i]), tmp2 = piece[i];
            sort(h[tmp1].begin(), h[tmp1].end(), blackcmp);
            sort(h[tmp2].begin(), h[tmp2].end(), whitecmp);
        }
        vector<pos>::iterator it;
        printf("White: ");
        for(int i = 0, f = 0; piece[i] != '\0'; i++) {
            char tmp = piece[i];
            if(!h[tmp].empty()) {
                for(it = h[tmp].begin(); it != h[tmp].end(); ++it) {
                    if(f) { putchar(','); }
                    if(piece[i] != 'P') { putchar(piece[i]); }
                    printf("%c%d", it->fi, it->se);
                    f = 1;
                }
            }
        }
        puts("");
        printf("Black: ");
        for(int i = 0, f = 0; piece[i] != '\0'; i++) {
            char tmp = tolower(piece[i]);
            if(!h[tmp].empty()) {
                for(it = h[tmp].begin(); it != h[tmp].end(); ++it) {
                    if(f) { putchar(','); }
                    if(piece[i] != 'P') { putchar(piece[i]); }
                    printf("%c%d", it->fi, it->se);
                    f = 1;
                }
            }
        }
        puts("");
    }
    return 0;
}
發佈了31 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章