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; }