题目背景
蒟蒻HansBug在英语考场上,挠了无数次的头,可脑子里还是一片空白。
题目描述
眼下出现在HansBug蒟蒻面前的是一篇英语作文,然而智商捉急的HansBug已经草草写完了,此时他发现离考试结束还有40min,于是他打算估计一下这篇共有M个单词的英语作文的含金量如何。众所周知的是,在中高考英语作文中使用高级词汇可以有效提高文章的含金量,从而获得更好的分数。已知蒟蒻HansBug知道N个高级词汇,该词汇为Ai(词汇长度为Li,包含数字、大小写字母),该高级词汇的含金量为Bi,则该高级词汇每出现一次便可增加Bi的含金量。可是他脑细胞和RP已经消耗殆尽,所以这个伟大的任务就交给你啦!
输入输出格式
输入格式:
第一行包含两个整数N和P,N表示HansBug共知道的高级词汇个数,P为模数
第2-N+1行,每行包含一个单词Ai(长度为Li)和一个整数Bi,其中Bi表示该单词的含金量(0<Bi<=100000)
接下来直到输入结束的若干行为一篇英语作文,其中包含共计M个单词,以及若干的分隔符(分隔符包含且仅包含" "、","、"."、"!"、"?")
输出格式:
一行,包含一个整数,为该文章的总含金量对P的模。
输入输出样例
输入样例#1
5 99 hansbug 1 kkksc03 2 yyy 3 absi2011 4 lzn 100 hansbug is a juruo!but absi2011 not.!?! one day absi2011 laughed at yyy and hansbug. then kkksc03 and lzn blamed him for that.
输出样例#1
16
输入样例#2
5 99 yyyy 1 kkksc03 2 yyy 3 absi2011 4 lzn 100 yyyy is a juruo!but absi2011 not.!?! one day absi2011 laughed at yyy and yyyy. then kkksc03 and lzn blamed him for that.
输出样例#2
16
说明
样例1中,共计出现了2次hansbug、2次absi2011、1次yyy、1次kkksc03、1次lzn,所以总含金量为1*2+2*4+3*1+4*1+100*1=115,对99取模就是16。
样例2中,和样例1基本一样,值得注意的是整体的yyyy不可以被认为是yyy出现2次,请注意这是一篇英语作文,一切以单词为最小单位。
此题目中大小写敏感。
数据范围(设所有单词的最大长度为Lmax):
思路
吐槽一下cin,用cin全tm输出0。
这题用map(哈希表)极其方便。
#include <stdio.h>
#include <iostream>
#include <map>
#include <algorithm>
#include <string>
using namespace std;
int n,p,s;
string a,b;
char c;
map<string,int> mmp;
signed main()
{
//ios::sync_with_stdio(false);
//cin.tie(0);
//cout.tie(0);
register int i;
cin>>n>>p;
for(i=1;i<=n;i++)
{
cin>>a;
cin>>mmp[a];
}
a="";
while(scanf("%c",&c)!=EOF)
{
if((c>='a' && c<='z') || (c>='A' && c<='Z') || (c>='0' && c<='9'))
{
a+=c;
}
else
{
s=(s+mmp[a])%p;
a="";
}
}
printf("%d",s);
return 0;
}