1 条题解

  • 2
    @ 2025-3-4 8:50:43

    看到这一题,没有什么好的方式

    那就直接枚举 mm

    如果我们记录杀的人的下标,右移

    因为坏人的编号不重要,因此如图

    便得到了下标转移公式 (为了避免取模到0,可以从0开始编号)

    p=0;
    for (int i=0;i<k;i++) p=(p+m-1)%(2*k-i)
    
    

    于是AC代码就有力:

    #include<iostream>
    #include<cstdio>
    
    using namespace std;
    
    long long k,m,p;
    bool flag;
    
    int main(){
    	scanf("%d",&k);
    	for (m=k+1;;m++){
    		p=0; flag=0;
    		for (int i=0;i<k;i++){
    			p=(p+m-1)%(2*k-i);
    			if (p<k) {
    				flag=1;
    				break;
    			}
    		}
    		if (!flag){
    			printf("%lld",m);
    			return 0;
    		}
    		
    	}
    	return 0;
    }
    
    
    • 1

    信息

    ID
    49
    时间
    1000ms
    内存
    256MiB
    难度
    4
    标签
    (无)
    递交数
    56
    已通过
    28
    上传者