1 条题解

  • 0
    @ 2025-8-24 21:40:33

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar K0stlin
    LIFE IS A CIRCLE.

    搬运于2025-08-24 21:40:33,当前版本为作者最后更新于2018-11-05 14:31:19,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    推公式

    0,1,2,3,4……k,k+1,……M-1,共M个人中,要删除报数为k的人,假设最后的幸存者编号为X,则第一只被删除的人的编号一定是(K-1)%M,第一个人出圈后下一轮是:K,k+1……M-1,0,1……k-1,这M-1只人。把这个序号映射为以下编号 0,1,2,3,4……,k+1,……M-2,在这个序列中,假设最后的幸存者编号为Y,则X=(Y+K)%M

    K→0 k+1→1 K+2→2

    则有

    int what(int n,int k){
    	int t=0;
    	for(int i=2;i<=n;i++)t=(t+k)%i;
    	return t+1;
    }
    

    main:

    int main(){
    	scanf("%d",&n);
    	while(1){
    		int s=what(n,2);//交替出圈,所以k=2
    		if(s==n){ans+=s*2;break;}//剩下的每人2元
    		ans+=(n-s);//出去的发1元
    		n-=(n-s);//该出去的出去
    	}
    	printf("%d",ans);
    	return 0;
    }
    

    by 我的老师+我自己的思考

    PS:因为一开始写错成猴子选大王了,与题意不符,改了一下,希望管理员再审一下。谢谢!

    • 1

    信息

    ID
    1830
    时间
    1000ms
    内存
    125MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者