2018-2019 ACM-ICPC, Asia Shenyang Regional Contest

2018-2019 ACM-ICPC, Asia Shenyang Regional Contest

先开坑,因为做了下 K 题。

J - How Much Memory Your Code Is Using?

题意

给出各种数据大小和变量或数组,求总内存,单位KB。

思路

签到题,直接模拟。

K - Let the Flames Begin

题意

以约瑟夫环为背景,有 nn 个人站成一圈,数 kk 个人后出局,接着下一个人开始继续进行,如此反复,求第 mm 个出局的人的编号。

数据范围:1n,m,k1018,nm1\leqslant n, m, k\leqslant 10^{18}, n\geqslant m,保证 min(m,k)2×106\min(m, k) \leqslant 2\times 10^6

思路

关于约瑟夫环线性算法及其优化算法,见 Blog - 约瑟夫环问题

那么区别在于题目要求第 mm 个出局的人的编号,其实这并不难解决, 设 f(n,m,k)f(n, m, k) 表示题目所要求的解。

则有

f(n,1,k)=(k1)modnf(n,m,k)=(f(n1,m1,k)+k)modn\begin{aligned} f(n, 1, k) &= (k-1) \bmod n\\ f(n, m, k) &= (f(n-1, m-1, k) + k) \bmod n \end{aligned}

于是只需要将递推的初始值改为 (k1)modn(k-1)\bmod n 即可,其他可以直接套用 优化算法,时间复杂度为 O(min(m,klogm))O(\min(m, k\log m))


2018-2019 ACM-ICPC, Asia Shenyang Regional Contest
https://wty-yy.github.io/posts/12560/
作者
wty
发布于
2021年9月1日
许可协议