zoukankan      html  css  js  c++  java
  • POJ

    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;
    }
    
  • 相关阅读:
    linux每天一小步cp命令详解
    linux每天一小步ls命令详解
    linux每天一小步cd命令详解
    linux每天一小步rm命令详解
    linux每天一小步touch命令详解
    linux每天一小步mkdir命令详解
    input、textarea等输入框输入中文时,拼音在输入框内会触发input事件的问题
    (转)周志华:“深”为什么重要,以及还有什么深的网络
    CSS画行内分隔线
    百度之星资格赛E:C++ 与Java
  • 原文地址:https://www.cnblogs.com/Inko/p/11715653.html
Copyright © 2011-2022 走看看