调手表

小明买了块高端大气上档次的电子手表,他正准备调时间呢。
在 M78 星云,时间的计量单位和地球上不同,M78 星云的一个小时有 n 分钟。
大家都知道,手表只有一个按钮可以把当前的数加一。在调分钟的时候,如果当前显示的数是 0 ,那么按一下按钮就会变成 1,再按一次变成 2 。如果当前的数是 n - 1,按一次后会变成 0 。
作为强迫症患者,小明一定要把手表的时间调对。如果手表上的时间比当前时间多1,则要按 n - 1 次加一按钮才能调回正确时间。
小明想,如果手表可以再添加一个按钮,表示把当前的数加 k 该多好啊……
他想知道,如果有了这个 +k 按钮,按照最优策略按键,从任意一个分钟数调到另外任意一个分钟数最多要按多少次。
注意,按 +k 按钮时,如果加k后数字超过n-1,则会对n取模。
比如,n=10, k=6 的时候,假设当前时间是0,连按2次 +k 按钮,则调为2。

「输入格式」
一行两个整数 n, k ,意义如题。

「输出格式」
一行一个整数
表示:按照最优策略按键,从一个时间调到另一个时间最多要按多少次。

「样例输入」
5 3

「样例输出」
2

「样例解释」
如果时间正确则按0次。否则要按的次数和操作系列之间的关系如下:
1:+1
2:+1, +1
3:+3
4:+3, +1

「数据范围」
对于 30% 的数据 0 < k < n <= 5
对于 60% 的数据 0 < k < n <= 100
对于 100% 的数据 0 < k < n <= 100000

资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms

代码

#include <algorithm>
#include <iostream>
#include <cstring>
#include <queue>using namespace std;const int N=1e5+5;
const int INT=0x3f3f3f3f;int n,k;
int num[N];
bool visited[N];struct Point
{int pos,step;Point(){}Point(int pp,int ss):pos(pp),step(ss) {}
};void bfs(int s)
{memset(num,INT, sizeof(num));memset(visited,0, sizeof(visited));queue<Point> Q;Q.push(Point(s,0));visited[s]= true;num[s]=0;while (!Q.empty()){Point cur =Q.front();Q.pop();int nex=(cur.pos+1)%n;if (!visited[nex]){visited[nex]=true;Q.push(Point(nex,cur.step+1));num[nex]=cur.step+1;}nex=(cur.pos+k)%n;if (!visited[nex]){visited[nex]= true;Q.push(Point(nex,cur.step+1));num[nex]=cur.step+1;}}
}
int main()
{cin>>n>>k;int ans=-1;bfs(0);     //从0开始拨动按键for (int i = 0; i < n; ++i) {ans=max(num[i],ans);}cout<<ans<<endl;return 0;
}

2018第九届蓝桥杯C/C++ B国赛 —— 第四题:调手表相关推荐

  1. 2018第九届蓝桥杯C/C++ B国赛 —— 第六题:矩阵求和

    矩阵求和 经过重重笔试面试的考验,小明成功进入 Macrohard 公司工作. 今天小明的任务是填满这么一张表: 表有 n 行 n 列,行和列的编号都从1算起. 其中第 i 行第 j 个元素的值是 g ...

  2. 2018第九届蓝桥杯C/C++ B国赛 —— 第三题:格雷码

    格雷码 格雷码是以n位的二进制来表示数. 与普通的二进制表示不同的是,它要求相邻两个数字只能有1个数位不同. 首尾两个数字也要求只有1位之差. 有很多算法来生成格雷码.以下是较常见的一种: 从编码全0 ...

  3. 2018第九届蓝桥杯大赛软件类国赛 C/C++ 大学 B 组

    A标题:换零钞 x星球的钞票的面额只有:100元,5元,2元,1元,共4种. 小明去x星旅游,他手里只有2张100元的x星币,太不方便,恰好路过x星银行就去换零钱. 小明有点强迫症,他坚持要求200元 ...

  4. 第九届蓝桥杯大赛软件类国赛

    文章目录 第九届蓝桥杯大赛软件类国赛 国赛C++ A组 三角形面积 阅兵方阵 找假币 约瑟夫环 -- important 自描述序列 -- todo 采油 -- todo 国赛C++ B组 换零钞 激 ...

  5. 2018第九届蓝桥杯Java C组 省赛真题

    文章目录 一.哪天返回 1.题目 2.解法 2.1 解法一 2.1 解法二 二.猴子分香蕉 1.题目 2.解法 2.1方法一 2.2方法二 三.字母阵列 1.题目 2.解题 四.第几个幸运数 1.题目 ...

  6. 2018第九届蓝桥杯大赛软件类B组C/C++省赛题解

    2018第九届蓝桥杯大赛软件类B组C/C++省赛目录 试题 A:第几天(结果填空) 试题 B:明码(结果填空) 试题 C:乘积尾0(结果填空) 试题 D:测试次数(结果填空) 试题 E:快速排序(结果 ...

  7. 2018第九届蓝桥杯JavaB组省赛真题及详解

    2018第九届蓝桥杯JavaB组省赛真题及详解 第一题:第几天 第二题:方格计数 第三题:复数幂 第四题:测试次数 第五题:快速排序 第六题:递增三元组 第七题:螺旋折线 第八题:日志统计 第九题:全 ...

  8. 2019第十届蓝桥杯A组决赛(国赛)A题(三升序列)

    2019第十届蓝桥杯A组决赛(国赛)A题(三升序列) 输入: VLPWJVVNNZSWFGHSFRBCOIJTPYNEURPIGKQGPSXUGNELGRVZAG SDLLOVGRTWEYZKKXNK ...

  9. 第十三届蓝桥杯Python B组国赛题解

    第十三届蓝桥杯Python B组国赛题解 试题A:斐波那契与7 试题 B: 小蓝做实验 试题 C: 取模 试题 D: 内存空间 试题 E: 近似 GCD 试题 F: 交通信号 试题 G: 点亮 试题 ...

最新文章

  1. 面试:为什么 https 比 http 更安全?
  2. Android中启动Activity(startActivity)流程图分析
  3. asp.net的几个错误
  4. sql语句中开窗函数的使用
  5. c#中一个进程启动另一个进程并传递参数
  6. 【推荐实践】内容分发场景的多目标架构实践
  7. MacBook安装Mysql
  8. linux下blast设计引物,Primer-BLAST:NCBI的引物设计和特异性检验工具
  9. 如何录制游戏视频?游戏录制软件推荐
  10. word中套用表格样式在哪里_表格套用表格样式在哪 word表格自动套用样式在哪
  11. [大学物理实验-4]弦上驻波实验
  12. poco mysql 安装_linux 下 POCO 安装
  13. 请不用条件转移指令JG,JGE,JL,JLE等指令实现如下程序片段的功能
  14. java第八章习题,第八章 Servlet技术习题
  15. YARN - Task, Node manager, AppMaster, Resource manager 失败时所做的处理
  16. 英文状态下输入字母,字母之间的间隔较大怎么解决?
  17. 详解 P沟道mos管与N沟道mos管
  18. PowerBI小技巧--新式书签导航器
  19. Facebook联合创始人Chris Hughes呼吁该公司进行分拆
  20. 李开复成长中的十句格言:求知若饥 虚心若愚(from cnbeta)

热门文章

  1. RPC与其实现方式概念笔记
  2. 动态规划之一最长上升子序列LIS
  3. oracle status
  4. 【More Effective C#】LINQ表达式与方法调用的映射
  5. 随机生成元素升序向量_推荐系统中用户向量的表示学习
  6. 1.7-27编程基础之字符串 单词翻转
  7. 每日程序C语言3-三个数大小排序
  8. 的setinterval函数_Vue定时器与JS 定时器 setInterval() 和 setTimeout()
  9. oracle 02380,oracle 11.2.0.3 fornb…
  10. linux手动生成dump文件权限不足_来玩一玩Linux常见命令~