题目背景
一封好的情书需要撰写人全身心的投入。lin_toto同学看上了可爱的卡速米想对她表白,但却不知道自己写的情书是否能感动她,现在他带着情书请你来帮助他。
题目描述
为了帮助lin_toto,我们定义一个量化情书好坏的标准感动值。判断感动值的方法如下:
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字符。
刷几道水题压压惊,,
第一次写set,
感觉这的确是个好东西,
思路的话。
首先把所有字符全部转换成大写,
然后用一个set维护就好
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<set> 6 using namespace std; 7 const int MAXN=300001; 8 inline void read(int &n) 9 { 10 char c=getchar();bool flag=0;n=0; 11 while(c<‘0‘||c>‘9‘) c==‘-‘?flag=1,c=getchar():c=getchar(); 12 while(c>=‘0‘&&c<=‘9‘) n=n*10+(c-48),c=getchar();if(flag==1)n=-n; 13 } 14 set<string>key,happen; 15 int n; 16 int ans=0; 17 int main() 18 { 19 read(n); 20 for(int i=1;i<=n;i++) 21 { 22 string s;cin>>s; 23 transform(s.begin(), s.end(), s.begin(), ::toupper); 24 key.insert(s); 25 } 26 char c=getchar(); 27 string now; 28 while(scanf("%c",&c)==1) 29 { 30 now; 31 if((c>=‘a‘&&c<=‘z‘)||(c>=‘A‘&&c<=‘Z‘)) 32 { 33 if(c>=‘a‘&&c<=‘z‘) 34 c=c+‘A‘-‘a‘; 35 now+=c; 36 } 37 else 38 { 39 if(!now.empty()) 40 { 41 // cout<<now<<endl; 42 if(key.find(now)!=key.end()) 43 happen.insert(now); 44 now.clear(); 45 } 46 if(c==‘.‘) 47 { 48 ans+=happen.size(); 49 happen.clear(); 50 } 51 } 52 } 53 printf("%d",ans); 54 return 0; 55 }
时间: 2024-10-06 00:37:02