您的位置:首页 > 其它

HDU 6043 KazaQ's Socks(水~)

2017-07-30 10:53 330 查看
Description

n双袜子,编号1~n,每天穿编号最小的袜子,穿完后扔到脏衣篮里,当脏衣篮里袜子数量为n-1时就会全部洗掉,第二天晚上就洗好了,问第k天穿的袜子编号

Input

多组用例,每组用例输入两个整数n,k,以文件尾结束输入(2<=n<=1e9,1<=k<=1e18)

Output

对于每组用例,输出第k天穿的袜子编号

Sample Input

3 7

3 6

4 9

Sample Output

Case #1: 3

Case #2: 1

Case #3: 2

Solution

前n天编号为1~n,然后1~n-1被洗了,第n双袜子还在脏衣篮里,所以之后n-1天编号为1~n-1,然后1~n-2和n被洗了,第n-1双袜子还在脏衣篮里,所以之后n-1天编号为1~n-2,n,然后又是1~n-1被洗了,第n双袜子还在脏衣篮里,依次类推得编号依次为1,…,n,1,….,n-1,1,…,n-2,n,1,….,n-1,1,….,n-2,n,……

Code

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<ctime>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
#define maxn 1111
int main()
{
int res=1,n;
ll k;
while(~scanf("%d%I64d",&n,&k))
{
printf("Case #%d: ",res++);
if(k<=n)printf("%d\n",k);
else
{
k-=n;
int s=(k/(n-1))%2,t=(k-1)%(n-1)+1;
if(s)printf("%d\n",t);
else printf("%d\n",t==n-1?n:t);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: