[洛谷]P2786 英语1(eng1)- 英语作文 (#STL)

题目背景

蒟蒻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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值