ACM-ICPC国际大学生程序设计竞赛北京赛区(2016)网络赛 C.A Simple Job 字符串处理

ProLightsfx 2016-9-24 123 9/24

 A Simple Job 字符串处理

Source

https://hihocoder.com/contest/acmicpc2016beijingonline/problems

 

My Solution

map<string, map<string, int> > 、字符串单词词组的处理

A,B C

A ,B A B

等等情况处理好就好

当碰到,或者行末的时候, res.clear(), str.clear(); flag = false;

然后用res表示该词组的前一个单词,str表示后面的单词

具体实现请看代码吧

 

#include 
#include 
#include 
#include 

//#include 
using namespace std;
typedef long long LL;
const int maxn = 1e6 + 8;

string s, str, res;
map<string, map<string, int> > ans;

int sz;
bool flag;
inline void work(const string &s)
{
    sz = s.size();flag = false;
    for(int i = 0; i < sz; i++){
        if(!flag){
            if(isalpha(s[i])){
                str += s[i];
            }
            else if(!str.empty()){
                if(s[i] == ',' || s[i] == '.'){
                    str.clear();
                }
                else{
                    flag = true;
                    res = str;
                    str.clear();
                }

            }
        }
        else{
            if(s[i] == ',' || s[i] == '.'){
                if(!res.empty() && !str.empty()){
                    ans[res][str]++;
                }
                str.clear();
                res.clear();
                flag = false;
                continue;
            }
            if(str.empty()){
                if(isalpha(s[i])){
                    str += s[i];
                }
            }
            else{
                if(isalpha(s[i])){
                    str += s[i];
                }
                else{
                    ans[res][str]++;
                    //cout << res << " " << str << endl;
                    res = str;
                    str.clear();
                }
            }
        }
    }
    if(!res.empty() && !str.empty()){
        ans[res][str]++;
    }
}

int main()
{
    #ifdef LOCAL
    freopen("3.txt", "r", stdin);
    //freopen("a.out", "w", stdout);
    int T = 4;
    while(T--){
    #endif // LOCAL
    ios::sync_with_stdio(false); cin.tie(0);
    //stringstream ss;
    int cnt;
    while(getline(cin, s)){
        work(s);

        str.clear();
        res.clear();
        //cout << str << " " << res << endl; while(getline(cin, s)){ if(s[0] == '#'){ cnt = 0; for(auto i = ans.begin(); i != ans.end(); i++){ for(auto j = (i->second).begin(); j != (i->second).end(); j++){
                        if((j->second) > cnt){
                            res = i->first;
                            str = j->first;
                            cnt = j->second;
                        }
                        /*
                        else if((j->second) == cnt){
                            if(res > (i->first)){
                                res = i->first;
                                str = j->first;
                            }
                            else if(res == (i->first)){
                                if(str > (j->first)){
                                    str = j->first;
                                }
                            }
                        }
                        */
                    }
                }
                cout << res << " " << str << ":" << cnt << "n";
                str.clear();
                res.clear();
                break;
            }
            str.clear();
            res.clear();
            work(s);

        }
        ans.clear();

    }



    #ifdef LOCAL
    cout << endl;
    }
    #endif // LOCAL
    return 0;
}

 


非特殊说明,本博所有文章均为博主原创,未经许可不得转载。

https://www.prolightsfxjh.com/

Thank you!

                                                                                                                                             ------from ProLightsfx

- THE END -
Tag:

ProLightsfx

11月15日20:41

最后修改:2024年11月15日
0

非特殊说明,本博所有文章均为博主原创,未经许可不得转载。

共有 0 条评论