AtCoder Beginner Contest 187 C - 1-SAT
C - 1 - SAT
看了官网提供的题解,发现这个思路很巧妙,同时也作为对STL中的set容器的学习吧
题目分析
这道题需要一个set容器来储存输入的字符串。
测试数据无非有两类:以!
开头的字符串和没有以!
开头的字符串 。输入的如果是以!
开头的字符串,那么把!
去掉后再在set容器查找一下是否有匹配的元素,如果存在的话,输出匹配的元素,结束程序运行;对于非!
开头的元素,那么在容器查找一下加上!
后是否有匹配的元素,如果存在的话,输出匹配的元素,结束程序运行。如果无匹配元素,那么将输入的字符串储存在容器中。
我原本的思路是储存完字符串之后,再遍历一遍 好暴力qwq ,但这个思路完全是反过来了:判断完再储存。对于我这蒟蒻来说这个思路确实是想不到,顺便也学习了set的一些用法。
AC代码
#include<bits/stdc++.h>
using namespace std;
int n;
string ss;
set<string> s;
int main(){
ios_base::sync_with_stdio(false);
ios::sync_with_stdio(false);
cin >> n;
for(int i = 0; i < n; i++){
cin >> ss;
if(ss[0] == '!'){
string t = ss;
t.erase(t.begin());
if(s.count(t)){
cout << t << endl; return 0;
}
}
else {
string t = "!" + ss;
if(s.count(t)){
cout << ss << endl; return 0;
}
}
s.insert(ss);
}
cout << "satisfiable" << endl;
return 0;
}