(数学)HDU 6043 KazaQ's Socks

来源:互联网 发布:strcontains php 编辑:程序博客网 时间:2024/06/05 14:15

HDU-2017 多校训练赛1-1011-KazaQ’s Socks

题目网址: HDU 6043 KazaQ’s Socks

题意分析:

题意

  • KazaQ 有 n对袜子, 每天他会选择序号最小的袜子来穿
  • 当他穿过 n-1对袜子时, 他会将 穿的袜子拿去洗
  • 问当第k天的时候 他穿哪对袜子

思路

  • 当4对袜子时, 穿的袜子序列 如下, 1 2 3 4 1 2 3 1 2 4 1 2 3 1 2 4 ….

  • 根据上述序列, 找出规律

    • 可知当 k 小于等于n时, 可知第k天穿第k对袜子
    • 当k大于等于n时,序列的周期为T = (n-1)*2
    • 而循环的序列由 n 1 2 3 … n-1 1 2 3 … n-2 组成
    • 所以当k%=T, 若k == 0, 则结果为 n
    • 若k<= n-1 结果为 k
    • 其余情况,结果为 k-(n-1)

代码:

#include <iostream>#include <cstring>using namespace std;int main(int argc, char const *argv[]){    long long n, k;    int cnt = 1;    while (~scanf("%I64d %I64d", &n, &k))    {        printf("Case #%d: ", cnt++);        long long T = (n-1) * 2;        if(k <= n)        {            printf("%I64d\n", k);        }        else        {            k -= n;            k %= T;            if(k == 0) printf("%I64d\n", n);            else if(k <= n-1)            {                printf("%I64d\n", k);            }            else            {                k -= n-1;                printf("%I64d\n", k);            }        }    }    return 0;}
原创粉丝点击