1 条题解

  • 0
    @ 2025-8-24 22:25:49

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar luobotianle
    luobosuanle

    搬运于2025-08-24 22:25:49,当前版本为作者最后更新于2024-05-24 15:49:45,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题意其实很简单:在给出的 nn 个字符串中排除一些字符串,输出剩下的字符串;但由于这题没有给出 nn,所以读入是一个问题。如果你会用 getlinestringstream 的话,输入会变得很简单,但蒟蒻不会,所以这里用了 getchar 边读入字符边存储字符串。

    由于 getchar “什么都吃”的特性,导致这样写要注意很多细节,在代码中将一一展示。

    #include<bits/stdc++.h>
    using namespace std;
    vector<string> a;//用来记录出现过的叫声 
    map<string,bool> mp;//用来记录是否是狐狸的叫声 
    string s,s1,s2;
    int main(){
    	int T;
    	cin>>T;
    	char ch=getchar();//将 T 后面的换行 ('\n') 吃掉 
    	while(T--){
    		mp.clear();//多测清空 
    		a.clear();
    		s=s1=s2="";
    		while(1){
    			ch=getchar();
    			if(ch=='\n'){//第一段输入是一行,所以遇到换行就说明结束了 
    				a.push_back(s); //最后一个词也要加入 
    				mp[s]=1;//该叫声出现过,可能是狐狸的叫声 
    				break;
    			}
    			else if(ch==' '){//遇到空格,将此时的 s 加入 
    				a.push_back(s);
    				mp[s]=1;
    				s="";//将用于记录的 s 清空 
    			}
    			else s+=ch;//更新 s 
    		}
    		while(cin>>s>>s1>>s2,s1=="goes")mp[s2]=0;//该声音不是狐狸叫声 
    		do{ch=getchar();}while(ch!='\n');//这里要用do_while,因为此时的 ch 还是换行符 '\n'
    		for(auto &i:a){
    			if(mp[i])cout<<i<<" ";//循环每一个出现过的叫声,将狐狸的叫声输出 
    		}
    		cout<<"\n";
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    6168
    时间
    1000ms
    内存
    1024MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者