10、小易记单词--2017网易春招

[编程题] 小易记单词
时间限制:1秒
空间限制:32768K
小易参与了一个记单词的小游戏。游戏开始系统提供了m个不同的单词,小易记忆一段时间之后需要在纸上写出他记住的单词。小易一共写出了n个他能记住的单词,如果小易写出的单词是在系统提供的,将获得这个单词长度的平方的分数。注意小易写出的单词可能重复,但是对于每个正确的单词只能计分一次。 
输入描述:
输入数据包括三行:
第一行为两个整数n(1 ≤ n ≤ 50)和m(1 ≤ m ≤ 50)。以空格分隔
第二行为n个字符串,表示小易能记住的单词,以空格分隔,每个单词的长度小于等于50。
第三行为m个字符串,系统提供的单词,以空格分隔,每个单词的长度小于等于50。
 
输出描述:
输出一个整数表示小易能获得的分数
 
输入例子:
3 4 apple orange strawberry strawberry orange grapefruit watermelon
 
输出例子:
136
 
解题思路:本题用n的每个字符串去跟m中字符串比,若相等,则count+=strlen(n)*strlen(n)且break循环m字符串的循环,因为题目中说n可能重复但只算一次,因此使用set进行存储
注意点:比较两个字符串对于string类型,需要m.c_str()作为strcmp函数的参数,不能直接用string变量
 1 #include <iostream>
 2 #include <string.h>
 3 #include <set>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int n,m;
 9 
10     while(cin>>n>>m)
11     {
12         string a;
13         set<string> nn;
14         string b;
15         set<string> mm;
16         int count = 0;
17         for(int i=0;i<n;i++)
18         {
19             cin>>a;
20             nn.insert(a);
21         }
22         for(int i=0;i<m;i++)
23         {
24             cin>>b;
25             mm.insert(b);
26         }
27         set<string>::iterator n_it; //定义前向迭代器
28         set<string>::iterator m_it; //定义前向迭代器
29         for(n_it = nn.begin(); n_it != nn.end(); n_it++)
30         {
31             for(m_it = mm.begin();m_it!=mm.end();m_it++)
32             {
33                 if(strcmp((*n_it).c_str(),(*m_it).c_str()) == 0)
34                 {
35                     count += strlen((*n_it).c_str())*strlen((*n_it).c_str());
36                     break;
37                 }
38             }
39         }
40         cout<<count<<endl;
41 
42     }
43 }

 

posted @ 2017-06-02 09:22  qqky  阅读(382)  评论(0编辑  收藏  举报