1 条题解
-
0
SOLUTION
由于当时我是突然灵机一动想出来的,我可能不会讲想到的过程。
我们从反方向倒推,从只有一只猴子的局面推出原始的局面。 当前还剩下 只猴子时,我们不妨将其编号为 。 记 为当前剩 只猴子时,最后留下来的一个,显然有 。
假设枚举到 只猴子的局面时,对任意 , 已知。
我们知道这一轮要报 个数,具体地,这时编号为 的猴子会出局,记这个编号为 。 接下来这个局面会转化为 只猴子,从 开始报数的局面。
不难发现此时 。
根据数学归纳法,可以求出 。
按这个模拟即可。
CODE
#include<bits/stdc++.h> using namespace std; #define fi first #define se second int T,n,m; signed main(){ ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); cin>>T; while(T--){ cin>>n; int lst=1,del=0; for(register int i=2;i<=n;i++){ del=(n-i)%i+1; lst=(del+lst-1)%i+1; } cout<<lst<<'\n'; } return 0; }
- 1
信息
- ID
- 61
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 6
- 标签
- (无)
- 递交数
- 70
- 已通过
- 22
- 上传者