当前位置: 首页 > news >正文

P2786 英语1(eng1)- 英语作文

P2786 英语1(eng1)- 英语作文

题目背景

蒟蒻 HansBug 在英语考场上,挠了无数次的头,可脑子里还是一片空白。

题目描述

眼下出现在 HansBug 蒟蒻面前的是一篇英语作文,然而智商捉急的 HansBug 已经草草写完了,此时他发现离考试结束还有 40 40 40 分钟,于是他打算估计一下这篇共有 M M M 个单词的英语作文的含金量如何。众所周知的是,在中高考英语作文中使用高级词汇可以有效提高文章的含金量,从而获得更好的分数。已知蒟蒻HansBug知道 N N N 个高级词汇,该词汇为 A i A_i Ai(词汇长度为 L i L_i Li ,包含数字、大小写字母),该高级词汇的含金量为 B i B_i Bi,则该高级词汇每出现一次便可增加 B i B_i Bi 的含金量。可是他脑细胞和 RP 已经消耗殆尽,所以这个伟大的任务就交给你啦!

输入格式

第一行包含两个整数 N N N P P P N N N 表示HansBug共知道的高级词汇个数, P P P 为模数

2 − N + 1 2-N+1 2N+1行,每行包含一个单词 A i A_i Ai (长度为Li)和一个整数 B i B_i Bi ,其中 B i ( 0 < B i ≤ 1 0 5 ) B_i(0<B_i\le 10^5) Bi(0<Bi105) 表示该单词的含金量

接下来直到输入结束的若干行为一篇英语作文,其中包含共计 M M M 个单词,以及若干的分隔符(分隔符包含且仅包含,.!?

输出格式

一行,包含一个整数,为该文章的总含金量对 P P P 的模。

输入输出样例 #1

输入 #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

输入 #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 1 1 中,共计出现了 2 2 2hansbug 2 2 2absi2011 1 1 1yyy 1 1 1kkksc03 1 1 1lzn ,所以总含金量为 1 × 2 + 2 × 4 + 3 × 1 + 4 × 1 + 100 × 1 = 115 1\times2+2\times4+3\times1+4\times1+100\times1=115 1×2+2×4+3×1+4×1+100×1=115,对 99 99 99 取模就是 16 16 16

样例 2 2 2 中,和样例 1 1 1 基本一样,值得注意的是整体的 yyyy 不可以被认为是 yyy 出现 2 2 2 次,请注意这是一篇英语作文,一切以单词为最小单位。

此题目中大小写敏感。

数据范围(设所有单词的最大长度为 L m a x Lmax Lmax ):

题解

本题是一个红黑树的题目,利用前面所讲的红黑树中的map来解决。

利用map<string,int>即<单词,含金量>便可以很容易解决。本题的关键问题主要是细节上的处理。

这是根据上面的思路写下的初版代码:

#include <iostream>
#include <string>
#include <map>
using namespace std;map<string,int> mp;
int b;int main(){int n,p;cin >> n >> p;while(n--){string str;int b;cin >> str >> b;mp[str] = b;}string s;while(cin >> s){if(mp.count(s)) b += mp[s];}cout << b % p << endl;return 0;
} 

实际得分:0

题目中提到:包含共计 M M M 个单词,以及若干的分隔符(分隔符包含且仅包含,.!?)。很显然,在这版解法中,我们以字符串为单位进行读取,而分隔符也被当作了字符串,因此会导致无法正确以单词为单位进行读取,从而导致错误。

因此,我们需要以字符串为单位进行读取,再转换为单词。

正解

#include <iostream>
#include <string>
#include <map>
using namespace std;map<string,int> mp;
int b;bool low(char x){if((x >= '0' && x <= '9')||(x >= 'a' && x <= 'z')||(x >= 'A' && x <= 'Z')){return true;}else return false;
}int main(){int n,p;cin >> n >> p;while(n--){string str;int b;cin >> str >> b;mp[str] = b;}char ch;string s;while(scanf("%c",&ch) != EOF){if(low(ch)){s += ch;}else{b += mp[s];s = "";}}cout << b % p << endl;return 0;
} 

http://www.mrgr.cn/news/95112.html

相关文章:

  • STM32原理性知识
  • SAP 附件增删改查与文件服务器交互应用
  • dijkstra算法——47. 参加科学大会
  • PostgreSQL:语言基础与数据库操作
  • 数据大屏标题加载顶部流光
  • LEDNet总结
  • Python Pyecharts面试题及参考答案
  • 数据结构-------栈
  • 【C++】动态规划从入门到精通
  • 详解Sympy:符号计算利器
  • MySQL 调优
  • Firebase崩溃:ViewBinding not init!!
  • Quartus + VScode 实现模块化流水灯
  • MySQL 入门大全:查询语言分类
  • 【免费网址/插件】视频和图片数据采集推荐~
  • Python散点图(Scatt Plot):数据探索的“第一张图表”
  • 数仓开发那些事(10)
  • YOLOv11 目标检测
  • 网络编程之客户端通过服务器与另外一个客户端交流
  • springCloud集成tdengine(原生和mapper方式) 其一