打表处理(否则Case 1超时)

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

对m进行枚举,每次枚举进行一次判断

因为好人坏人均为k个,那么只要让下一个死亡的人的位置p保证在1~剩余坏人数量之间即可,不满足则直接break枚举下一个m

实际上对于m,因为m必须是 [2kC+1,2kC+k] C∈N+ 之间的数,所以还能再优化,但下面的代码已经能够在78ms左右过题,故可以忽略

 1 /*
 2 Written By. StelaYuri
 3 */
 4 #include<stdio.h>
 5 int main(){
 6     int s[14],k,m,p,d;
 7     for(k=1;k<14;k++){
 8         m=k;
 9         while(1){
10             for(d=p=0;d<k;d++){
11                 p=(p+m-1)%(2*k-d);
12                 if(p<k)
13                     break;
14             }
15             if(d==k)
16                 break;
17             m++;
18         }
19         s[k]=m;
20     }
21     while(scanf("%d",&k)!=EOF)
22         printf("%d\n",s[k]);
23     return 0;
24 }
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄