扩大
缩小
jQuery火箭图标返回顶部代码 - 站长素材

国庆集训

题目链接:

https://nuoyanli.com/contest/19/problem/C

题面:

在这里插入图片描述

题意:

两个学姐是轮流来参加国庆集训答疑的(因为在我印象中17学姐和18学姐并没有同一天出现过在508 ),只有当一个学姐放假时另一个学姐来答疑到她放假为止,其中规定第一天是学姐0来给大家答疑,并且她正好刚放完假,学姐1新生集训第m天后放假。

思路

题意可能很难读懂(预计的水题导致没人出 背锅),但是:
可以将时间看作一个区间寻找规律:

  • [1,n][1,n]:学姐0
  • [n+1,m+n][n+1,m+n]:学姐1
  • [m+n+1,2n+1][m+n+1,2n+1]:学姐0
  • [2n+2,m+2n+1][2n+2,m+2n+1]:学姐1
  • [m+2n+2,3n+2][m+2n+2,3n+2]:学姐0
  • [3n+3,m+3n+2][3n+3,m+3n+2]:学姐1

    不难发现,除了第一次长度为m+nm+n以外其余区间的长度均为n+1n+1

故分两种情况:

  1. tm+nt\leq m+n时,[1,n][1,n]为学姐0,[n+1,m+n][n+1,m+n]为学姐1。
  2. t>m+nt>m+n时,对每一个周期n+1n+1内,前nm+1n-m+1天是学姐0,后mm天是第学姐1。

参考代码:

#include<stdio.h>
int main()
{
    int T,n,m,q,t;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d%d",&n,&m,&q);
        while(q--)
        {
            scanf("%d",&t);
            if(t>n+m)
            {
                t=t-(n+m);
                if(t%(n+1)!=0)t=t%(n+1);
                else t=n+1;
                printf("%d\n",t>n-m+1);
            }
            else printf("%d\n",t>n);
        }
    }
    return 0;
}
posted @ 2019-10-08 17:59  nuoyanli  阅读(134)  评论(0)    收藏  举报