3 条题解

  • 2
    @ 2024-1-30 19:16:00

    模拟即可。

    C++ STL 提供了 std::string 的成员函数 find(),例如 s.find("\/qq") != std::string::npos 等价于判断 ss 中是否含有子串 /qq\texttt{/qq}

    注意不要对同一个字符串重复累加。

    • 1
      @ 2024-2-3 22:11:24

      按题意模拟即可。

      cyx是0。

      #include<bits/stdc++.h>
      using namespace std;
      int n,cyx,zzp;
      string str;
      int main(){
      	cin>>n;
      	while(n--){
      		int user=-1;//0->cyx 1->zzp
      		bool love=false;
      		cin>>str;
      		if(str=="cyx") user=0;
      		if(str=="zzp") user=1;
      		cin>>str;
      		getline(cin,str);
      		if(str.find("/qq")!=string::npos) love=true;
      		if(str.find("/yqq")!=string::npos) love=true;
      		if(str.find("/bixin")!=string::npos) love=true;
      		transform(str.begin(),str.end(),str.begin(),::tolower);
      		if(str.find("meow")!=string::npos) love=true;
      		if(str.find("cute")!=string::npos) love=true;
      		if(str.find("lovely")!=string::npos) love=true;
      		if(str.find("kawaii")!=string::npos) love=true;
      		if(str.find("love")!=string::npos) love=true;
      		if(str.find("tietie")!=string::npos) love=true;
      		if(str.find("cyx")!=string::npos&&user==1&&!(str[str.find("cyx")+3]>='A'&&str[str.find("cyx")+3]<='z')&&!(str[str.find("cyx")-1]>='A'&&str[str.find("cyx")-1]<='z')) love=true;
      		if(str.find("zzp")!=string::npos&&user==0&&!(str[str.find("zzp")+3]>='A'&&str[str.find("zzp")+3]<='z')&&!(str[str.find("zzp")-1]>='A'&&str[str.find("zzp")-1]<='z')) love=true;
      		if(user==0&&love) cyx++;
      		if(user==1&&love) zzp++;
      	}
      	cout<<cyx<<" "<<zzp<<endl;
      	return 0;
      }
      
      • 1
        @ 2024-2-3 8:43:32

        给一发 std:

        // std written by Greenzhe_qwq(uid=7)
        // 2024/1/29
        // clang-format
        
        #include <bits/stdc++.h>
        using namespace std;
        
        char s1[121], s2[121];
        
        bool judge(string speaker, string msg) {
            // Detect emoji
            if (msg.find("/qq") != msg.npos) return true;
            if (msg.find("/yqq") != msg.npos) return true;
            if (msg.find("/bixin") != msg.npos) return true;
        
            // Change all the letters to lower
            for (int i = 0; i < msg.size(); ++i) msg[i] = tolower(msg[i]);
        
            // Detect words
            if (msg.find("meow") != msg.npos) return true;
            if (msg.find("cute") != msg.npos) return true;
            if (msg.find("lovely") != msg.npos) return true;
            if (msg.find("kawaii") != msg.npos) return true;
            if (msg.find("love") != msg.npos) return true;
            if (msg.find("tietie") != msg.npos) return true;
        
            // Detect names
            for (int i = 0; i + 2 < msg.size(); ++i) {
                string sub = msg.substr(i, 3);
                if ((sub == "cyx" || sub == "zzp") && sub != speaker) {
                    if (i > 0 && isalpha(msg[i - 1])) continue;
                    if (i + 3 < msg.size() && isalpha(msg[i + 3])) continue;
                    return true;
                }
            }
        
            // Sadly there's no dog food
            return false;
        }
        
        int main() {
            int T, cyx = 0, zzp = 0;
            scanf("%d\n", &T);
        
            while (T--) {
                scanf("%s : %[^\n]", s1, s2);
                string speaker = s1, msg = s2;
        
                if (speaker == "cyx")
                    cyx += judge(speaker, msg);
                else
                    zzp += judge(speaker, msg);
            }
        
            printf("%d %d\n", cyx, zzp);
            return 0;
        }
        

        花絮:本题数据大部分都是用《哈姆雷特》完成的。所以假如你打开数据就会发现两人在互相莎士比亚。

        • 1

        [CZOJ 一周一测 R7 D] Chen Yuxiang x Zhang Zipei FOREVER!

        信息

        ID
        790
        时间
        1000ms
        内存
        256MiB
        难度
        3
        标签
        递交数
        100
        已通过
        24
        上传者