题目描述

奶牛Bessie最近买了一台手机,它的手机号码是:13300303003,手机号码由11个数字组成。Bessie最近在上电脑课学了【复制】和【粘贴】,于是它打开word软件,把它的手机号码复制,然后粘贴了N次。例如N=1时,是这样:13300303003 。又例如N=2时,是这样:1330030300313300303003。 再例如N=3时,是这样:133003030031330030300313300303003。 如果N=4,会是这样:13300303003133003030031330030300313300303003。 现在给出了三个正整数:N,S,T。表示奶牛Bessie把它的手机号码复制粘贴了N次,然后奶牛要计算:第S个数字到第T个数字之间,有多少个数字3(包含第S个数字和第T个数字)?由于奶牛Bessie复制粘贴N次手机号码后已经眼花了,所以它希望你能写个程序来帮它计算,你能做到吗?

输入

一行,三个正整数: N,S,T

输出

一个整数,表示Bessie把手机号码复制粘贴N次后,第S个数字到第T个数字之间包含了多少个数字3(包含第S个数字和第T个数字)。

样例输入

1 2 11

样例输出

5

提示

由于N=1,所以复制粘贴后是13300303003,那么第2个数字至第11个数字就是:3300303003,可以算出有5个数字3。
对于50%的数据,  1<=N<=1000,  1 <= S < T <= 11×N
对于100%的数据, 1<=N<=100000000,  1 <= S < T <= 11×N


题目大意:给出一组n,l,r,询问初始字符串“13300303003”复制n次后,第l位到r位中有多少个3

题目分析:简单的分块问题,但在着手做这个题目的时候,思路混乱,分类讨论的略显麻烦,导致最后漏情况,其实这个题目可以将模型抽象出来,然后就特别好处理了

因为l和r是基于连续序号之上的,而且是11位一组,我们不妨将其视为一个矩阵:

1   2   3   4   5   6   7   8   9 10 11

12 13 14 15 16 17 18 19 20 21 22

23 24 25 26 27 28 29 30 31 32 33

类似于这样的一个矩阵

为了方便处理,我们每一位都减一,变为下面这样:

0  1   2   3   4   5   6   7   8   9 10

11 12 13 14 15 16 17 18 19 20 21

22 23 24 25 26 27 28 29 30 31 32

这样,我们假设每个编号为k,则其对应的坐标就是x=k/11,y=k%11

有了这样的一个转换,接下来的操作就方便多了,我们将l的坐标表示为(x,y),r的坐标表示为(xx,yy)

那么我们只需要分类讨论一下:

  1. 若x==xx:l和r在同一行,只需要从y遍历到yy即可
  2. 若x!=xx:l和r不在同一行,我们只需要加上中间差的行数中的3的个数即可(每行5个),然后再从y遍历到尾,从头遍历到yy记录一下个数

这样答案很容易的就计算出来了

代码:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e5+100;string s="13300303003";int main()
{
//  freopen("input.txt","r",stdin);
//  ios::sync_with_stdio(false);int n,l,r;cin>>n>>l>>r;int x=(l-1)/11;int xx=(r-1)/11;int ans=0;int y=(l-1)%11;int yy=(r-1)%11;if(x!=xx)//不在一行 {ans+=(xx-x-1)*5;for(int i=0;i<=yy;i++)if(s[i]=='3')ans++;for(int i=y;i<s.size();i++)if(s[i]=='3')ans++;}else//在同一行 {for(int i=y;i<=yy;i++)if(s[i]=='3')ans++;}cout<<ans<<endl;return 0;
}

中石油训练赛 - 手机号码(简单分块+思维)相关推荐

  1. 中石油训练赛 - 奎奎画画(思维+并查集+离线处理)

    题目描述 "为你写诗,为你静止,为你做不可能的事",爱情是一种怪事,它让奎奎开始学习画画.奎奎认为一张画的艺术价值等于画上的白色联通块个数(当一个格子和它上下左右四个方向上的某个相 ...

  2. 中石油训练赛 - 位置(模拟+思维)

    题目描述 由于晨晨还没有研究出核心算法,在游戏中总是被明明击败.晨晨拿出了杀手锏进行反击,精心设计了一个大型取数字求位置的难题:N*N( N是奇数)个地砖,每个上面写有一个编号,这些编号正好是1到N平 ...

  3. 中石油训练赛 - 姓氏(思维+水题)

    题目描述 在一个很大的课室里,里面有很多学生在听课.L老师挑选了其中的N个不同的学生起立回答问题,L老师对起立的每一个学生都是问同样的问题:"在本课室里,和你同姓的学生有多少人(不包括你自己 ...

  4. 中石油训练赛 - 数学问题(思维)

    题目描述 我们高中曾经学过何为组合数. 那么,给出整数n,m,g,聪明的你能否求出有多少整数对(i,j),满足g整除吗?(其中0≤i≤n,0≤j≤min(i,m)). (提示:n!=1×2×⋯×n:特 ...

  5. 中石油训练赛 - Block(二维前缀和+思维)

    题目描述 Alice得到了一张由n×m个黑白像素点组成的图片,她想要压缩这张图片.压缩图片的过程如下: 1.首先,选择一个正整数k(k>1),将图片划分成若干个k×k的小块.如果n,m不能被k整 ...

  6. 中石油训练赛 - 围栏翻新(思维+贪心+差分)

    题目描述 小明的破旧围栏又要喷涂油漆了.围栏由N个木板构成,每个宽度都为1cm,但是高度各不相同.他给自己买了一个喷漆机器,喷涂头恰好也是1cm宽. 小明的喷漆机器是直接喷射的,因此喷头的每一个部位必 ...

  7. 中石油训练赛 - 招待(思维)

    题目链接:点击查看 题目大意:给出一个天平,砝码由3的幂次组成,再给出物品重量,求如何摆放砝码能使得天平平衡 题目分析:既然给出的砝码是3的幂次组成,那么我们就将给出的物品重量转换为三进制即可,那么表 ...

  8. 中石油训练赛 - Edit Distance(思维+构造)

    题目描述 A binary string is a non-empty sequence of 0's and 1's, e.g., 010110, 1, 11101, etc. The edit d ...

  9. 中石油训练赛 - Watch Later(状压dp)

    题目链接:点击查看 题目大意: 给出一个长度为 n 的字符串,字符串中共有 k 种不同的字符,现在问删除掉所有字符的最小操作数,对于每种字符需要确定一个先后顺序,每次需要删除掉当前所有的这种字符才能去 ...

最新文章

  1. 惠普中国前总裁孙振耀:离开时心痛得哭了出来
  2. 学python的好处-python语言的优点和缺点
  3. Oracle imp字符集转换,imp/exp 字符集转换
  4. UIAutomation 自动化
  5. linux进程管理 pdf,高效与精细的结合--Linux的进程管理.pdf
  6. 数据结构-队列之顺序队列
  7. Linux Shell 中 > 和 >> 的异同点和应用场景
  8. SpringMVC 注解 : @ModelAttribute
  9. pitr 原理_PostgreSQL基于时间点恢复(PITR)
  10. windows安装tensorflow GPU
  11. illustrator插件开发指南pdf_Jenkins之pipeline开发工具
  12. 7.docker pull
  13. pcs7更改项目计算机名时出错,pcs7的C/S模式,从AS下装到OS或客户机项目时出错-工业支持中心-西门子中国...
  14. ATV 开发 三 DRM技术简介
  15. 助力社区防疫,百数提供了一款管理系统模板
  16. jdk和tomcat的关系
  17. 服务器怎么架设为虚拟主机,架设服务器虚拟主机教程
  18. matlab 狼追兔子,数学模型--狼追击兔子的问题.doc
  19. Simulink统一模块大小
  20. 在VS Code中使用Clang-Format

热门文章

  1. MySQL 高级 - 触发器 - 介绍
  2. Redis中的可用性保证之Sentinel 原理
  3. 微信支付 - 构建商户订单
  4. SpringMVC的数据响应-页面跳转-返回ModelAndView3(应用)
  5. 规格参数组查询的代码实现
  6. 企业微服务:实现crud操作之创建实体类
  7. 变量的引用-函数返回值传递引用
  8. 模拟实现顺序表ArrayList1(三级)
  9. cookie和session常见问题
  10. linux终端安装playonlinux,Ubuntu怎么安装PlayOnLinux