k.第k人
阿新 • • 發佈:2018-12-15
k: 第k人
Time Limit: 1 Sec Memory Limit: 128 MBDescription
TT在跟朋友一起做遊戲,
遊戲規則:n個小朋友(從1開始編號)手拉手,從第一個小朋友開始報數,喊出k的小朋友從圈中出去,然後下個小朋友從1開始報數。
當圈中只剩下一個小朋友的時候結束。TT想知道誰會勝出。
Input
T(T組,T<=10)
T行,每行兩個個數字n,k代表當前有n個小朋友(n<=1000)k如上述(k<=1e5)
Output
對每組輸出勝出者的編號
Sample Input
1 5 2
Sample Output
3
HINT
第一個出去的是2號:1 3 4 5
第二個出去的是4號,1 3 5
第三個出去的是1號,3 5
第四個出去的是5號,3
3勝出
直接O(n^2)暴力即可,注意k比較大每次對剩餘人數取餘。
1 #include<cstdio> 2 #include<cstring> 3 using namespaceView Codestd; 4 bool bo[1005]; 5 int main(){ 6 int T,n,k; 7 scanf("%d",&T); 8 while(T--){ 9 memset(bo,0,sizeof bo); 10 scanf("%d%d",&n,&k); 11 k--; 12 int now=1; 13 for(int i=n;i>1;i--){ 14 int t=k%i,cnt=0; 15 while(cnt<t){16 now=now%n+1; 17 if(!bo[now])cnt++; 18 } 19 bo[now]=1; 20 while(bo[now])now=now%n+1;//找到下一個起點 21 } 22 printf("%d\n",now); 23 } 24 return 0; 25 }