[字符串] 洛谷 P2264 情书

题目描述

为了帮助CYY,我们定义一个量化情书好坏的标准感动值。判断感动值的方法如下:

  1. 在情书的一句话中若含有给定词汇列表中的特定单词,则感动值加1,但每一单词在同一句话中出现多次感动值不叠加,不同单词不受影响。保证输入的单词不重复。
  2. 每句话以英文句号定界。
  3. 全文不区分大小写。

输入输出格式

输入格式:

 

第一行包含一个数字n,表示导致感动值提升的词汇列表中单词的数量,随后n行是给定单词,每行一个。保证单词只包含英文字母。

最后一行为情书正文,保证只包含以下几种字符: 英文字母、数字、空格、英文逗号、英文句号。

 

输出格式:

 

一个数字g,表示情书带来的感动值。

 

输入输出样例

输入样例#1: 
3
love
so
much
I love you so much.
输出样例#1:
3

说明

对于所有的数据,保证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 }

 

posted @ 2019-02-26 20:58  BEYang_Z  阅读(160)  评论(0编辑  收藏  举报