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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值