2018-2019 ACM-ICPC 沈阳赛区 K. Let the Flames Begin
K. Let the Flames Begin
题目链接:https://codeforces.com/gym/101955/problem/K
题意:
n个人围成一个圈,然后依次从1开始报数,报到k的人出局,现在有个人,他想要成为第m个出局的男人,现在要求他初始位置应该在哪。
题解:
类似于约瑟夫环问题,所以我们可以考虑一下递推。我们可以考虑一下n和n - 1规模的关系,借助于约瑟夫环的思路,我们可以知道,如果一个人在n - 1规模时位置为p,那么n的规模时位置应为(p + k) % n (下标从0 ~ n - 1)。我们设第m轮出局的位置为f(n,m),那么就有f(n,m) = (f(n - 1 , m - 1) + k ) % n。
但是这里n,m,k可能到10^18,数据范围过大,直接递推行不通。但是题目中有个条件为min(m,k) <= 2e6, 那么我们就需要利用上这个信息。
当m <= k 时,我们直接从f(n - m + 1 , 1)开始递推即可,题中数据保证这样不会超时;
当m > k时,这个k可能远小于n,也就是取模操作困难隔很久才一次,所以我们可以根据这个加速递推。设c轮过后会取模,那么有f(a,b) + c * k >= a => c >= (a - f(a,b)) / k,我们直接通过计算得出这个c就好了~
这个题主要就是在于对递推式的理解吧~
代码如下:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll; ll n,m,k;
int T;
int main() {
ios::sync_with_stdio(false);cin.tie() ;
int cnt = ;
cin >> T;
while(T--) {
cnt++;
cin >> n >> m >> k ;
cout << "Case #" << cnt << ": " ;
ll p = n - m + ;
ll ans = (k - ) % p ;
if(m < k) {
for(int i = ; i <= m ; i++)
ans = (ans + k) % (++p);
}else {
ll a = n - m + ;
if(k == ) {
cout << m << '\n' ;
continue ;
}
while(a < n) {
ll x = (ll)ceil(1.0 * (a - ans) / (k - ));
if(a + x > n) x = n - a;
ans = (ans + x * k ) % (p = a + x) ;
a = a + x ;
}
}
cout << ans + << '\n' ;
}
return ;
}
2018-2019 ACM-ICPC 沈阳赛区 K. Let the Flames Begin的更多相关文章
- hdu 4463 第37届ACM/ICPC杭州赛区K题 最小生成树
题意:给坐标系上的一些点,其中有两个点已经连了一条边,求最小生成树的值 将已连接的两点权值置为0,这样一定能加入最小生成树里 最后的结果加上这两点的距离即为所求 #include<cstdio& ...
- 2017 ACM/ICPC 沈阳 I题 Little Boxes
Little boxes on the hillside. Little boxes made of ticky-tacky. Little boxes. Little boxes. Little b ...
- 2017 ACM/ICPC 沈阳 F题 Heron and his triangle
A triangle is a Heron’s triangle if it satisfies that the side lengths of it are consecutive integer ...
- 2018 ACM ICPC 南京赛区 酱油记
Day 1: 早上6点起床打车去车站,似乎好久没有这么早起床过了,困到不行,在火车上睡啊睡就睡到了南京.南航离南京南站很近,地铁一站就到了,在学校里看到了体验坐直升机的活动,感觉很强.报道完之后去吃了 ...
- ACM-ICPC 2018 沈阳赛区现场赛 K. Let the Flames Begin (约瑟夫环问题)
题目链接: 题意:有 n 个人围成一个圈,从 1 开始报到第 k 个人出环,问第 m 个出环的人是谁,n.m.k <= 1e18 且 min(m,k)<= 2e6. 题解:容易得出O(m) ...
- 2017 ACM/ICPC 沈阳 K题 Rabbits
Here N (N ≥ 3) rabbits are playing by the river. They are playing on a number line, each occupying a ...
- 2014 ACM/ICPC 鞍山赛区现场赛 D&I 解题报告
鞍山现场赛结束了呢-- 我们出的是D+E+I三道题-- 吾辈AC掉的是D和I两道,趁着还记得.先在这里写一写我写的两道水题D&I的解题报告吧^_^. D题的意思呢是说星云内有一堆排成一条直线的 ...
- Substrings 第37届ACM/ICPC 杭州赛区现场赛C题(hdu 4455)
http://acm.hdu.edu.cn/showproblem.php?pid=4455 https://icpcarchive.ecs.baylor.edu/index.php?option=c ...
- HDU 5894 hannnnah_j’s Biological Test (组合数学) -2016 ICPC沈阳赛区网络赛
题目链接 #include <map> #include <queue> #include <math.h> #include <stdio.h> #i ...
随机推荐
- 基于日志报警插件 elastalert 实现告警
1.官方http://elastalert.readthedocs.io/en/latest/ 2.报警规则示例 http://elastalert.readthedocs.io/en/latest/ ...
- JS中自定义事件的使用与触发
1. 事件的创建 JS中,最简单的创建事件方法,是使用Event构造器: var myEvent = new Event('event_name'); 但是为了能够传递数据,就需要使用 CustomE ...
- sparkSQL中RDD——DataFrame——DataSet的区别
spark中RDD.DataFrame.DataSet都是spark的数据集合抽象,RDD针对的是一个个对象,但是DF与DS中针对的是一个个Row RDD 优点: 编译时类型安全 编译时就能检查出类型 ...
- [python][odlboy]设置字符串打印的颜色
格式:\033[显示方式;前景色;背景色m 说明:前景色 背景色 颜色---------------------------------------30 ...
- 下载与安装APache Cordova
最近老师留了写网页版或手机版程序,但先前没有好好听javaweb,而今年又没选Android移动应用开发.所以去图书馆借了一本书是关于HTML5+CSS3+jQueryMobile的. 这几天配置了打 ...
- HDU 5233 Gunner II 离散化
题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5233 bc(中文):http://bestcoder.hdu.edu.cn/contests ...
- HDU 5651 xiaoxin juju needs help 逆元
题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5651 bc:http://bestcoder.hdu.edu.cn/contests/con ...
- Android 8悬浮窗适配
背景 APP推出时,提示是退出还是更改账号,这个提示框是系统级别的.然而我的Android 9 会崩溃,宁外一个小伙伴Android 7运行理想.报错提示permission denied for w ...
- c99标准的restrict关键字
参考自restrict restrict解释 restrict关键字出现于C99标准,wiki上的解释restrict from wiki. In the C programming language ...
- Java实现的词频统计
要求: 1.读取文件: 2.记录出现的词汇及出现频率: 3.按照频率降序排列: 4.输出结果. 概要: 1.读取的文件路径是默认的,为了方便调试,将要统计的文章.段落复制到文本中即可:2.只支持英文: ...