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 }