PAT 1071. Speech Patterns

又是考输入输出

#include <cstdio>

#include <cstdlib>

#include <string>

#include <vector>

#include <unordered_map>

#include <algorithm>



using namespace std;



char buf[1048577];



bool is_alphanumerical(char &ch) {

    if (ch >= '0' && ch <= '9') return true;

    if (ch >= 'a' && ch <= 'z') return true;

    if (ch >= 'A' && ch <= 'Z') {

        ch += 'a' - 'A';

        return true;  

    }

    return false;

}



int main() {



    char ch;

    

    bool inword = false;

    int wpos = 0;

    int max_count = -1;

    

    unordered_map<string, int> count;

    vector<string> maxs;



    while(ch = getchar()) {

        bool isan = is_alphanumerical(ch);

        if (isan) {

            if (!inword) {

                // new word begin

                wpos     = 0;

                inword     = true;

            }

            // append character

            buf[wpos++] = ch;

        } else {

            if (inword) {

                // current word end

                buf[wpos] = '\0';

                string word(buf);

                auto iter = count.find(word);

                if (iter == count.end()) {

                    iter = count.insert(make_pair(word, 0)).first;

                }

                if (++(iter->second) > max_count) {

                    max_count = iter->second;

                    maxs.clear();

                    maxs.push_back(word);

                } else if (iter->second == max_count) {

                    maxs.push_back(word);

                }

                inword = false;

            }

        }

        if (ch == '\n') {

            break;

        }

    }

    

    sort(maxs.begin(), maxs.end());

    int mcount = count.find(maxs[0])->second;

    printf("%s %d", maxs[0].c_str(), mcount);

    return 0;

}

 

你可能感兴趣的:(Pattern)