文章目录

  • 题目
  • 题解
  • 代码

题目

题目描述

HanHanHan找来兄弟伙DominikDominikDominik帮他写程序,搞了一个通宵后,DominikDominikDominik有点恍惚就回家了,回家路上被警察盘问,警察怀疑他喝了酒,于是警察问:冒泡排序时间复杂度是多少?DominikDominikDominik轻松回答nnn的平方。警察又问倒着说出英文字母表,DominikDominikDominik回答zyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcba。警察说这是你背的,没有思考,于是准备出道难题

现在想象一下,英语字母表中从“aaa”到“zzz”的所有字母都是顺时针方向写在一个圆圈里的。以字母“aaa”开头,顺时针读。在每读一个字母后,警察会提出操作或询问,操作是以当前字母反向读,询问是当读到nnn个字母后,xxx字母被读过几次?

明白规则后,DominikDominikDominik便开始从aaa开始读了,请你编写一个程序,解决警察的问题。

输入

第一行,一个整数QQQ,表示操作和询问总数(1≤Q≤100000)(1 ≤ Q ≤ 100000)(1≤Q≤100000)

接下来QQQ行,若是UPITnxUPIT\ n\ xUPIT n x,UPITUPITUPIT为克罗地亚语,表示询问,即读到第nnn个字母时xxx出现了几次?

若是SMJERnSMJER\ nSMJER n,SMJERSMJERSMJER为克罗地亚语,表示操作,即读到第nnn个字母时反向读。

xxx为小写字母aza~za z

nnn的取值范围是(1≤n≤1e9)(1 ≤ n ≤ 1e9)(1≤n≤1e9)

输出

一共询问行

每行一个整数,询问结果,即xxx出现的次数

样例输入

5
UPIT 1 b
UPIT 3 b
SMJER 4
UPIT 7 a
UPIT 10 z

样例输出

0
1
2
1

题解

先吐槽一波,考试时老师一直说这个题很难,搞得我想到模拟的时候一阵慌不敢打
但这个题一看就是模拟啊。。。

我们只需要用一个变量记录当前读字母的方向,由于数据保证nnn递增,我们就直接循环两次询问之间所经过的字母,将每一个字母出现的次数加一即可,这有什么难的

最后要考虑一个优化,不然O(NQ)O(NQ)O(NQ)的复杂度肯定超时,如果两次nnn相差很大,我们可以直接算出读了多少圈,也就是每个字母一定会被读到的次数,再将剩余的处理就可以了

代码

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>using namespace std;int q, n, start, step;
int cnt[30];
char s;
char a[10];
bool dir;   //0顺1逆int main() {scanf("%d", &q);step = 0;start = 0;for(int i = 1; i <= q; i ++) {scanf("\n");scanf("%s", a);scanf("%d", &n);int p = n - step;for(int i = 1; i <= 26; i ++)cnt[i] += p / 26;p %= 26;if(dir == 0) {for(int i = 1; i <= p; i ++) {if(start + i <= 26) cnt[start + i] ++;else cnt[(start + i) % 26] ++;}start += p;if(start > 26) start %= 26;}else {for(int i = 1; i <= p; i ++) {if(start - i >= 1) cnt[start - i] ++;else cnt[start - i + 26] ++;}start -= p;if(start < 1) start += 26;}if(a[0] == 'U') {s = getchar();s = getchar();printf("%d\n", cnt[s - 'a' + 1]);}else {if(dir == 0) dir = 1;else dir = 0;}step = n;}return 0;
}

[模拟] 警察的询问相关推荐

  1. 老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩. 输入描述:

    老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问.当然,老师有时候需要更新某位同学的成绩. 输入描述: 输入包括多组测试数据. 每组输入第一行是两个正整数N和M(0 < N ...

  2. 【华为上机试题C++】老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩.

    老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问.当然,老师有时候需要更新某位同学的成绩. 输入描述: 输入包括多组测试数据. 每组输入第一行是两个正整数N和M(0 < N ...

  3. 计算机教授技术追踪劫匪,打脸 911警察

    2018年即将过去的周末,对史弋宇博士一家来说是惊心动魄的两天. 为了满足女儿寒假想去海岛度假扮演Moana公主的愿望,又考虑到太太又因怀孕无法前往有寨卡病毒的地区(包括绝大部分加勒比海地区),史博士 ...

  4. 【基本操作】主席数统计区间不同颜色个数

    例题:询问 $n$ 个数中无修改的区间不同数个数,不带修改(SPOJ的一道题). 方法1:直接删 我们尝试头铁地开正常的下标主席树! 依次插入 $n$ 个数,插入第 $i$ 个数时,我们只要在把第 $ ...

  5. 求职者提问的问题面试官不会_如何通过三个简单的问题就不会陷入求职困境

    求职者提问的问题面试官不会 by DJ Chung 由DJ Chung 如何通过三个简单的问题就不会陷入求职困境 (How to get un-stuck in your job search wit ...

  6. 暑期集训5:并查集 线段树 练习题G: HDU - 1754

    2018学校暑期集训第五天--并查集 线段树 练习题G  --   HDU - 1754 I Hate It 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.  这让 ...

  7. 杭电1754--I Hate It(线段树)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  8. HDU1754_I Hate It(线段树/单点更新)

    解题报告 题意: 略 思路: 单点替换,区间最值 #include <iostream> #include <cstring> #include <cstdio> ...

  9. I Hate It(线段树基础)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

最新文章

  1. malloc 和alloc及calloc的区别
  2. girton college map
  3. 【Python】while里面是负数时条件还为真吗?
  4. 在NumericStepper控件中使用嵌入字体显示数字.
  5. BeanDefinitionRegistryPostProcessor​ 的处理源码流程
  6. Enterprise Library Step By Step系列(一):配置应用程序块——入门篇
  7. 说说如何用JavaScript实现一个模板引擎
  8. MTU MSS 详解记录
  9. Security+ 学习笔记19 密码学应用
  10. 2020华为软挑热身赛
  11. 下载速度15MB/s,度盘新版本?
  12. Bootstrap辅助类之文本情景类
  13. bilibili ,B站视频预览缩略图实现分析
  14. Python 关于日期相减 获得两个日期的天数差
  15. 电脑里有老版java删不掉,电脑上的一些文件老是删不掉怎么办 win7中经常出现一些文件夹删不掉...
  16. k8s部署EFK实现日志管理(mac desktop)
  17. C#获取微信打卡数据
  18. python 制作 二维码
  19. Python(py3fdfs)上传到fastdfs配置store_serv.ip_addr问题
  20. 工作中使用到的单词(软件开发)_2021-12-26_备份

热门文章

  1. 在线伪原创-免费批量在线伪原创工具
  2. 计算机学院学生会会徽,学生会会徽策划书
  3. cleanmymac3.9.6_ArcGIS 10.6技术特点
  4. 整合Tkinter GUI界面的古诗词词云生成
  5. ceph admin socket机制
  6. 中南大学刘嘉忆(刘路)论文--破解西塔潘猜想.pdf
  7. c 获取webform页面html,C#-WebForm-纯HTML提交方式
  8. delphi android jni,Delphi使用android的NDK是通过JNI接口,封装好了,不用自己写本地代码,直接调用...
  9. mysql远程不能访问_解决MySQL无法远程访问的3方案
  10. 切换终端_桐见 | 智能生活随心切换,车联网整合方案无缝连接生态终端