题目:小易参与了一个记单词的小游戏。游戏开始系统提供了m个不同的单词,小易记忆一段时间之后需要在纸上写出他记住的单词。小易一共写出了n个他能记住的单词,如果小易写出的单词是在系统提供的,将获得这个单词长度的平方的分数。注意小易写出的单词可能重复,但是对于每个正确的单词只能计分一次。
我使用C++的map容器实现这个简单的编程题,但只能通过80%的用例,不知什么原因,以下是我的代码:
#include <map>
#include <string>
using namespace std;
int main()
{
int n, m, sum = 0;
string xiaoyi, sys;
map<string, int> hashxiaoyi;
cin>>n>>m;
for(inti = 0; i < n; i ++)
{
cin>>xiaoyi;
hashxiaoyi[xiaoyi] = 1;
}
for(inti = 0; i < m; i ++)
{
cin>>sys;
if(hashxiaoyi.find(sys) != hashxiaoyi.end())
sum += sys.length()*sys.length();
}
cout<<sum<<endl;
return0;
}
牛客网给出的题解用set实现:
/*
作者:NotDeep
链接:https://www.nowcoder.com/discuss/22696?type=0&order=0&pos=5&page=2
来源:牛客网
*/
#include <bits/stdc++.h>
using namespace std;
int m, n;
set<string> S1;
set<string> S2;
int main() {
cin >> n >> m;
for(int i = 0; i < n; i++) {
string x;
cin >> x;
S1.insert(x);
}
for(int i = 0; i < n; i++) {
string x;
cin >> x;
S2.insert(x);
}
int ans = 0;
for(auto &x : S1) {
if(S2.find(x) != S2.end()) ans += x.size() * x.size();
}
cout << ans << endl;
return 0;
}