LuoguP3880 [JLOI2008]提示问题 题解
Content
由于题目要求是在太过复杂,请见原题面查看。
Solution
这题明显是一个大模拟,那么废话少说,我们开始吧。
首先就是要找到所有的字母,比如说样例,其中底下加了^ 号的就是所有字母的位置:
Upomoc! Lpv s nm pkrl sv smglsnk.
^^^^^^ ^^^ ^ ^^ ^^^^ ^^ ^^^^^^^
把它们的位置存下来,然后就可以输出第一个提示了——直接将所有字母替换成 . 即可。
自然而然地,字母出现的次数 \(cnt\) 也可以模拟得出来了。然后,我们就可以求出来前 \(\dfrac{1}{3}\) 和前 \(\dfrac{2}{3}\) 的字母的位置了。
然后,我们先从 \(\dfrac{1}{3}\) 的字母出现的位置开始找起,一直到字符串末尾,如果有元音,那么第三个提示就只输出 \(\dfrac{1}{3}\) 的字母的位置之前的所有字符以及之后的所有元音字母,否则输出 \(\dfrac{2}{3}\) 的字母的位置之前所有的字符。
至于第二个提示就不用再说了吧,直接输出 \(\dfrac{1}{3}\) 的字母的位置之前所有的字符即可。
那么这道题目就算做完了,作为省选题算是很水的(毕竟这是 10 多年以前了)。
Code
#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <map>
using namespace std;
string s;
int pk[57];
map<int, int> pk2;
int main() {
getline(cin, s);
int len = s.size();
for(int i = 0; i < len; ++i)
if((s[i] >= 'A' && s[i] <= 'Z') || (s[i] >= 'a' && s[i] <= 'z')) {
pk[++pk[0]] = i; //将字母出现的位置记录下来
pk2[i] = pk[0];
printf(".");
} else printf("%c", s[i]);
puts("");
int key1 = floor(pk[0] / 3.0 + 0.5), key2 = floor((pk[0] * 2) / 3.0 + 0.5), vowel = 0;
// printf("%d %d\n", key1, key2);
for(int i = 0; i < len; ++i)
if(pk2[i] >= 1 && pk2[i] <= key1) printf("%c", s[i]);
else if(pk2[i]) printf(".");
else printf("%c", s[i]);
puts("");
for(int i = pk[key1] + 1; i < len; ++i)
if(s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u' || s[i] == 'A' || s[i] == 'E' || s[i] == 'I' || s[i] == 'O' || s[i] == 'U') {
vowel = 1;
break;
}
if(vowel) {
for(int i = 0; i < len; ++i)
if(pk2[i] >= 1 && pk2[i] <= key1) printf("%c", s[i]);
else if(s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u' || s[i] == 'A' || s[i] == 'E' || s[i] == 'I' || s[i] == 'O' || s[i] == 'U') printf("%c", s[i]);
else if(pk2[i]) printf(".");
else printf("%c", s[i]);
} else {
for(int i = 0; i < len; ++i)
if(pk2[i] >= 1 && pk2[i] <= key2) printf("%c", s[i]);
else if(pk2[i]) printf(".");
else printf("%c", s[i]);
}
}
LuoguP3880 [JLOI2008]提示问题 题解的更多相关文章
- [JLOI2008]提示问题
题目描述 最近在JLOI网上的一个流行游戏中,选手要回答很难的问题.假如在规定时间内不能回答,系统将给出1个提示,之后再依次给出第2,3个提示.出现在答案中的是字母和下列字符: '.',',',':' ...
- 【数论】小A进学校
小A进学校 题目描述 近日,清华大学挖出来一个明清古墓.小A决定冒充考古系科研人员去盗墓.他遇到的第一个难关是来自校门口保安的质疑,因为小没有清华学生证,所以保安决定通过问问题的方式验证小A的身份. ...
- [题解]codevs1001 舒适的路线
h3 { font-family: Consolas; color: #339966 } .math { font-family: Consolas; color: gray } 题目描述 Descr ...
- NOIP 2008提高组第三题题解by rLq
啊啊啊啊啊啊今天已经星期三了吗 那么,来一波题解吧 本题地址http://www.luogu.org/problem/show?pid=1006 传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们 ...
- NOI题库刷题日志 (贪心篇题解)
这段时间在NOI题库上刷了刷题,来写点心得和题解 一.寻找平面上的极大点 2704:寻找平面上的极大点 总时间限制: 1000ms 内存限制: 65536kB 描述 在一个平面上,如果有两个点( ...
- codevs3500 快速幂入门题解
codevs3500 快速幂入门题解 //我也是抄的题解 题目描述 Description 输入3个数a,b,c,求a^b mod c=? 输入描述 Input Description 三个数a,b, ...
- [题解]扫雷Mine
// 此博文为迁移而来,写于2015年2月6日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vrft.html 1088 ...
- NOIP 2012 Day2T2 借教室题解
NOIP 2012 Day2T2 借教室题解 题目传送门:http://codevs.cn/problem/1217/ 题目描述 Description 在大学期间,经常需要租借教室.大到院系举办活动 ...
- Code[VS] 2370 LCA 题解
Code[VS] 2370 小机房的树 题解 RMQ 树链剖分 题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同 ...
随机推荐
- [bzoj1177]Oil
考虑将三个矩形按某种方式划分为再三个大矩形中找最大值,容易发现只有6种划分方式,分为两类:1.4种,考虑第一条横/竖和第二条在第一条的两侧,这一类情况只需要预处理出左上/左下/右上/右下的最大子矩阵即 ...
- 列生成算法(求解Cutting Stock问题)
列生成是用于求解大规模线性优化问题的一种算法,其实就是单纯形法的一种形式.单纯性可以通过不断迭代,通过换基变量的操作,最终找到问题的最优解.但是当问题的规模很大之后,变量的个数就会增大到在有限时间内无 ...
- 将vue文档下载到本地预览
1下载:https://github.com/vuejs/cn.vuejs.org 到本地 2. npm install npm start # 开发服务器地址为 http://localhost ...
- Go语言核心36讲(Go语言实战与应用十五)--学习笔记
37 | strings包与字符串操作 Go 语言不但拥有可以独立代表 Unicode 字符的类型rune,而且还有可以对字符串值进行 Unicode 字符拆分的for语句. 除此之外,标准库中的un ...
- Codeforces 961F - k-substrings(二分+哈希)
Codeforces 题面传送门 & 洛谷题面传送门 介绍一种奇怪的 \(\Theta(n\log n)\) 的奇怪做法. 注意到这个"border 的长度必须是奇数"的条 ...
- python-django111111111111
111 内置电池的意思就是,内置了很多功能,插件等等帮助文档:https://docs.djangoproject.com/en/3.0/ model,很多集成的东西,连接数据库等 vierm: Te ...
- Linux内网时钟同步问题(ntp和chrony)
我们都知道时钟同步可以使用外网服务器,在内网内不能连接外网的时候也需要时钟同步,那怎么进行呢? 选择内网的一台稳定的服务器作为时钟源,然后让其他机器都来同步这台机器即可. 注:其实ntp服务和chro ...
- 爬虫动态渲染页面爬取之Splash的介绍和使用
Splash是一个JavaScript渲染服务,是一个带有HTTP API的轻量级浏览器,同时它对接了Python中的Twisted和QT库.利用它,我们同样可以实现动态渲染页面的抓取. 1. 功能介 ...
- Redis | 第8章 发布订阅与事务《Redis设计与实现》
目录 前言 1. 发布订阅 1.1 频道的订阅与退订 1.2 模式的订阅与退订 1.3 发送消息 1.4 查看订阅消息 2. 事务 2.1 事务的实现 2.2 WATCH 命令的实现 2.3 事务的 ...
- 痞子衡嵌入式:利用GPIO模块来测量i.MXRT1xxx的系统中断延迟时间
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1xxx的系统中断延迟时间. 在 <Cortex-M系统中断延迟及其测量方法简介> 一文里,痞子衡介绍了 Cor ...