KazaQ's Socks

来源:互联网 发布:虚拟机centos安装教程 编辑:程序博客网 时间:2024/06/05 09:38

题目链接http://acm.hdu.edu.cn/search.php?action=listproblem

KazaQ's Socks

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 149    Accepted Submission(s): 109


Problem Description
KazaQ wears socks everyday.

At the beginning, he has n pairs of socks numbered from 1 to n in his closets. 

Every morning, he puts on a pair of socks which has the smallest number in the closets. 

Every evening, he puts this pair of socks in the basket. If there are n1 pairs of socks in the basket now, lazy KazaQ has to wash them. These socks will be put in the closets again in tomorrow evening.

KazaQ would like to know which pair of socks he should wear on the k-th day.
 

Input
The input consists of multiple test cases. (about 2000)

For each case, there is a line contains two numbers n,k (2n109,1k1018).
 

Output
For each test case, output "Case #xy" in one line (without quotes), where x indicates the case number starting from 1 and y denotes the answer of corresponding case.
 

Sample Input
3 73 64 9
 

Sample Output
Case #1: 3Case #2: 1Case #3: 2
 

Source
2017 Multi-University Training Contest - Team 1
 

Recommend
liuyiding   |   We have carefully selected several similar problems for you:  6044 6043 6042 6041 6040 


题目大意:

每行输入两个整数n k,n表示共有n双袜子(袜子排序号1-n),一个人要从小到大的顺序穿袜子,一旦只剩脚上穿的一双袜子的话,这个人就开始洗袜子。洗完后还是按照序号有小到大的顺序穿袜子。问第k天该人穿的袜子序号为多少,并输出。

解题思路:

这是数学上的找规律问题,自己找一组数据写写,规律自然就出来了。需要注意的是,k的取值较大,需要用long long int .

代码:

#include<iostream>using namespace std;int main(){    long long int s,t,x=1;    while(cin>>s>>t)    {        cout<<"Case #"<<x<<": ";        if(t<=s)            cout<<t<<endl;        else        {            if((t-s)%(s-1)==0)            {                if(((t-s)/(s-1))%2==0)                    cout<<s<<endl;                else                    cout<<s-1<<endl;            }            else                cout<<(t-s)%(s-1)<<endl;        }        x++;    }    return 0;}