POJ - 2996 - Help Me with the Game = 模拟

http://poj.org/problem?id=2996

POJ里面有这种巨坑的模拟题?注意两个关键字的比较函数的写法,第一个应该是不等号!写多这种,焦作区域赛就不怕了。

#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<map>
#include<set>
#include<stack>
#include<string>
#include<queue>
#include<vector>
using namespace std;
typedef long long ll;

char g[200][200];

vector<string> vec[7];

int id[128];
char aid[7];

bool cmpw(const string &s1, const string s2) {
    if(s1.length() == 2) {
        return s1[1] != s2[1] ? s1[1] < s2[1] : s1[0] < s2[0];
    } else {
        return s1[2] != s2[2] ? s1[2] < s2[2] : s1[1] < s2[1];
    }
}

bool cmpb(const string &s1, const string s2) {
    if(s1.length() == 2) {
        return s1[1] != s2[1] ? s1[1] > s2[1] : s1[0] < s2[0];
    } else {
        return s1[2] != s2[2] ? s1[2] > s2[2] : s1[1] < s2[1];
    }
}

int main() {
#ifdef Yinku
    freopen("Yinku.in", "r", stdin);
#endif // Yinku
    id['k'] = 1;
    id['q'] = 2;
    id['r'] = 3;
    id['b'] = 4;
    id['n'] = 5;
    id['p'] = 6;
    aid[1] = 'k';
    aid[2] = 'q';
    aid[3] = 'r';
    aid[4] = 'b';
    aid[5] = 'n';
    aid[6] = 'p';

    for(int i = 1; i <= 17; ++i)
        scanf("%s", g[i] + 1);

    for(int i = 2; i <= 16; i += 2) {
        for(int j = 3; j <= 31; j += 4) {
            for(int k = 1; k <= 6; ++k) {
                if(g[i][j] == char(aid[k] - 32)) {
                    string tmp;
                    if(k != 6)
                        tmp += char(aid[k] - 32);
                    tmp += char('a' - 1 + (j + 1) / 4);
                    tmp += char('0' + 9 - i / 2);
                    vec[k].push_back(tmp);
                }
            }
        }
    }

    cout << "White: ";
    int out = 0;
    for(int k = 1; k <= 6; ++k) {
        sort(vec[k].begin(), vec[k].end(), cmpw);
        for(int i = 0; i < vec[k].size(); ++i) {
            if(out) {
                cout << ",";
            } else {
                out = 1;
            }
            cout << vec[k][i];
        }
        vec[k].clear();
    }
    cout << endl;

    for(int i = 2; i <= 16; i += 2) {
        for(int j = 3; j <= 31; j += 4) {
            for(int k = 1; k <= 6; ++k) {
                if(g[i][j] == aid[k]) {
                    string tmp;
                    if(k != 6)
                        tmp += char(aid[k] - 32);
                    tmp += char('a' - 1 + (j + 1) / 4);
                    tmp += char('0'  + 9 - i / 2);
                    vec[k].push_back(tmp);
                }
            }
        }
    }
    cout << "Black: ";
    out = 0;
    for(int k = 1; k <= 6; ++k) {
        sort(vec[k].begin(), vec[k].end(), cmpb);
        for(int i = 0; i < vec[k].size(); ++i) {
            if(out) {
                cout << ",";
            } else {
                out = 1;
            }
            cout << vec[k][i];
        }
        vec[k].clear();
    }
    cout << endl;
}

猜你喜欢

转载自www.cnblogs.com/Inko/p/11715653.html