您的位置:首页 > 其它

【网易2017内推笔试】小易记单词

2017-03-26 11:37 274 查看

题目:小易参与了一个记单词的小游戏。游戏开始系统提供了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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: