题目描述
为了帮助CYY,我们定义一个量化情书好坏的标准感动值。判断感动值的方法如下:
- 在情书的一句话中若含有给定词汇列表中的特定单词,则感动值加1,但每一单词在同一句话中出现多次感动值不叠加,不同单词不受影响。保证输入的单词不重复。
- 每句话以英文句号定界。
- 全文不区分大小写。
输入输出格式
输入格式:
第一行包含一个数字n,表示导致感动值提升的词汇列表中单词的数量,随后n行是给定单词,每行一个。保证单词只包含英文字母。
最后一行为情书正文,保证只包含以下几种字符: 英文字母、数字、空格、英文逗号、英文句号。
输出格式:
一个数字g,表示情书带来的感动值。
输入输出样例
说明
对于所有的数据,保证1 ≤ n,m,k ≤ 100,每个单词不超过50字符,全文不超过1000字符。
题解
- 这么小的数据瞎搞,用map暴力做,注意逗号算单词分隔符,如果有句号就算另一句
-
同一句的单词重复出现只计算一次贡献,再开个map来判重就好了
代码
1 #include <cstdio> 2 #include <iostream> 3 #include <cstring> 4 #include <map> 5 using namespace std; 6 int n,ans,len,w; 7 map <string,bool> mp,vis; 8 string s,t; 9 int main() 10 { 11 cin>>n; 12 for (int i=1;i<=n;i++) 13 { 14 cin>>s,len=s.length(); 15 for (int j=0;j<len;j++) if (s[j]<'a') s[j]+='a'-'A'; 16 mp[s]=1; 17 } 18 getline(cin,s),getline(cin,s),len=s.length(); 19 for (int i=0;i<len;i++) 20 { 21 if (s[i]==',') s[i]=' '; 22 if (s[i]!='.'&&s[i]!=' '&&s[i]<'a') s[i]+='a'-'A'; 23 } 24 for (int i=0;i<len;i++) 25 if (s[i]==' '||s[i]=='.') 26 { 27 t=s.substr(w,i-w),w=i+1; 28 if (!vis[t]) vis[t]=1,ans+=mp[t]; 29 if (s[i]=='.') vis.clear(); 30 } 31 printf("%d",ans); 32 }