这个题,时限是0.1s,一般 c++ 每秒运行 $10^{7}$ ~ $10^{8}$ 次,这个题是0.1s,所以是 $10^{6}$ 次。所以如果写暴力会超时。(双重循环,$10^{4}$ * $10^{4}$)
这时候就要分析,哪个地方可以简化一下。check_exist()的作用是扫一遍字符看有没有重的,这是$O(n)$的,所以我们想到了换一个数据结构——哈希表 来存储。哈希表的增删改查都是 $O(1)$ 的,就不会超时了。
(等以后讲 stl 的时候好好学一下吧,现在还不是太了解hh)
#include<unordered_set>
unordered_set<char> hash; // 定义哈希表
hash.insert(c); // 将s2中的字符插入哈希表
hash.count(a); // 统计字符在哈希表中出现的次数
#include<iostream>
#include<unordered_set>
using namespace std;
string s1, s2;
string res;
int main()
{
getline(cin, s1);
getline(cin, s2);
unordered_set<char> hash; // 定义哈希表
for (auto c : s2) hash.insert(c); // 将s2中的字符插入哈希表
for (auto a : s1)
if(!hash.count(a)) res += a; // 统计字符在哈希表中出现次数
cout << res << endl;
return 0;
}
试了一下,暴力在pat可以交,但在y总这不行hh
555 y总连暴力都写得这么优雅!
#include<iostream>
#include<cstdio>
using namespace std;
string s1, s2;
string res;
bool check_exist(char c)
{
for (auto a : s2)
if(c == a) return false;
return true;
}
int main()
{
getline(cin, s1);
getline(cin, s2);
for (auto c : s1)
if(check_exist(c)) res += c;
cout << res << endl;
return 0;
}
唉写暴力也是一种能力啊,这个破双重循环我写了半个小时…
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
string s1, s2;
string res;
getline(cin, s1);
getline(cin, s2);
for (int i = 0; i < s1.size(); i ++ )
{
bool flag = true;
for (int j = 0; j < s2.size(); j ++ )
{
if(s1[i] != s2[j]) continue;
else
{
flag = false;
break;
}
}
if (flag) res += s1[i];
}
cout << res << endl;
return 0;
}
新手初学比较吃力,如有错误欢迎指出!谢谢您!