LuoguP7008 [CERC2013]What does the fox say? 题解

Content

森林里面有很多声响,你想知道有哪些声响是由狐狸发出来的。

已知你搜集到了 \(n\) 个声响,并且还知道某些其他动物能够发出的声响,已知如果没有哪一个声响是由其他任何一种动物发出来的话,那这个声响绝对是由狐狸发出来的。现在,给定你这 \(n\) 个声响,以及某些其他动物能够发出的声响,请你求出狐狸发出的声响。

其他动物的声响和名字都仅由一个字符串组成。

数据范围:\(t\) 组询问,\(n\leqslant 100\),每个字符串的长度不超过 \(100\) 个字符且仅由小写字母组成。

Solution

简单的字符串模拟。

由于我们输入时不能确定 \(n\),我们先把所有的 \(n\) 个声响都一个个统计出来,然后再看这 \(n\) 个声响都被那些其他种类的动物给占了,这里我们可以开一个 \(\texttt{map}\),记录一下每个声响是否已经被占,最后输出所有没有被占的字符串即可。

记得多组询问时要清空数组和变量。

Code

int t;
string s[107], ss[107];

int main() {
	//This program is written in Windows 10 by Eason_AC
	getint(t);
	while(t--) {
		map<string, int> vis;
		int cnt = 1;
		string so;
		getline(cin, so);
		int lenso = so.size();
		_for(i, 0, lenso - 1) {
			if(so[i] == ' ') cnt++;
			else s[cnt] += so[i];
		}
		while(getline(cin, so)) {
			int cntt = 1; lenso = so.size();
			_for(i, 0, lenso - 1) {
				if(so[i] == ' ') cntt++;
				else ss[cntt] += so[i];
			}
			if(cntt > 3) {
				_for(i, 1, cntt) ss[i].clear();
				break;
			}
			else vis[ss[3]] = 1;
			_for(i, 1, cntt) ss[i].clear();
		}
		_for(i, 1, cnt) {
			if(!vis[s[i]]) cout << s[i] << ' ';
			s[i].clear();
		}
		puts("");
	}
	return 0;
}
posted @ 2021-12-16 15:01  Eason_AC  阅读(122)  评论(0)    收藏  举报