zoukankan      html  css  js  c++  java
  • 【Luogu1580】yyy loves Easter_Egg I(纯字符串模拟)

    problem

    • 保持队形(我们认为只要这一句内含有且恰好含有一次@,@的人和上一句话一样就算为队形)
    • 若艾特的人与第一个人不同,就算队形被打破,油炸失败。若这个人在队形被打破之前出来吱声了,或者就是他打破队形了,就算(油)炸成功了。
    • 若(油)炸成功,输出“Successful @某某某 attempt”,若队形被破坏第一行输出“Unsuccessful @某某某 attempt”,接下来一行输出队形第一次被破坏的行数,第三行输出第一次破坏队形的人的id。如果队形一直没被打破,就先输出“Unsuccessful @某某某 attempt”,再输出队形的长度,最后输出”Good Queue Shape”
    • 总行数<50000, 每行消息长度<=1000, 文件<4MB

    solution

    纯字符串模拟,无话可说。

    codes

    #include<iostream>
    #include<string>
    using namespace std;
    
    int ans;//队形长度
    //find name:找说话的人名字
    string findname(string b){
        int w = b.find(":");
        return b.substr(0,w-1);
    }
    //find @:找@的第一个人
    string findat(string b){
        if(b.find("@")==std::string::npos)return "abcd";
        int w = b.find("@");
        int ws = b.find("loves ",w); ws+=6;
        int ok = 0;
        if(b.find(" ",ws) == std::string::npos)b+=" ",ok=1;
        int wt = b.find(" ",ws);
        return "yyy loves "+b.substr(ws,wt-ws-ok);
    }
    //判断这个人@了几个人
    int ats(string b){
        int sum = 0;
        for(int i = 0; i < b.size(); i++)
            if(b[i]=='@')sum++;
        return sum;
    }
    
    int main(){
        string t;  getline(cin,t);  ans = 1;
        //找第一个被@的人,即被轰炸的人的名字
        string at = findat(t);
        while(getline(cin,t)){
            //空格字符串
            int ww=0;
            while(t[ww]==' ')ww++;
            if(ww==(t.size()-1))break;
            //破坏队形的人所在行数
            ans++;
            //找出当前说话的人的名字以及他@的人
            string x = findname(t), y = findat(t);
            //如果说话的人是被轰炸的人,说明轰炸成功,输出,程序结束
            if(x == at){
                cout<<"Successful @"<<at<<" attempt"<<endl;
                return 0;
            }
            //如果这个人@了一个不是被轰炸的人或者没有@人亦或是@了不止一个人,那么视为打破队列,输出,程序结束
            if(y!=at || ats(t)!=1){
                cout<<"Unsuccessful @"<<at<<" attempt"<<endl;
                cout<<ans<<endl<<x<<endl; return 0;
            }
            //如果是队形,那么长度+1
        }
        //如果成功到了while外面,说明轰炸失败,并且没人打破队列,输出
        cout<<"Unsuccessful @"<<at<<" attempt"<<endl;
        cout<<ans<<endl<<"Good Queue Shape"<<endl;
        return 0;
    }
  • 相关阅读:
    【AGC010E】Rearranging(博弈,图论,拓扑排序)
    【ARC074F】Lotus Leaves(最小割)
    【ARC069F】Flags(2-SAT,Tarjan,线段树优化建图)
    [CTS 2019] 氪金手游
    HDU
    LOJ
    LOJ
    [TJOI 2015] 概率论
    [AGC 018F] Two Trees
    LOJ
  • 原文地址:https://www.cnblogs.com/gwj1314/p/9444610.html
Copyright © 2011-2022 走看看