KazaQ’s Socks
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 0 Accepted Submission(s): 0
Problem Description
KazaQ wears socks everyday.
At the beginning, he has n denotes the answer of corresponding case.
At the beginning, he has n denotes the answer of corresponding case.
Sample Input
3 7 3 6 4 9
Sample Output
Case #1: 3 Case #2: 1 Case #3: 2
题目大意:
有编号为1~n的n双袜子,每天早上选编号最小的穿,穿完晚上扔到篮子里,如果现在篮子里有n-1双袜子,明天晚上洗完再次放在衣橱里。问:第k天穿的袜子编号多少?
思路:
找规律,把样例写写就出来了。
n=3, k=7
(1234) (123 124) (123 124) ……
1~n 为单独的一段,剩下的部分存在长度为2n-2的循环节,此循环节分两部分,第一部分 1~n-1 ,第二部分 1~n-2、n;
ac代码
#include<stdio.h>
#define ull unsigned long long
int main()
{
int n;
ull k;
int cas=0;
while(~scanf("%d%llu",&n,&k))
{
if(k<=n) printf("Case #%d: %d\n",++cas,k);
else
{
k-=n;//减去第一段
k%=(2*n-2);//判断k落在哪块
if(!k) printf("Case #%d: %d\n",++cas,n);
//循环的最后一个数,因为取模后为0,所以需要特殊处理
else if(k<=n-1) printf("Case #%d: %d\n",++cas,k);
else printf("Case #%d: %d\n",++cas,k-n+1);
}
}
return 0;
}