洛谷原题

这道题是一个小枚举。

首先,处理裁判在两次发送消息之间遛狗的情况。

注意到裁判在两次发送消息之间可能可以遛多次狗,因此可以写出以下代码:

for(int i=2; i<=n; i++){
    if(a[i]-a[i-1]>=120){//可以遛狗
        cnt+=((a[i]-a[i-1])/120);
    }
}

还不止这些情况。

裁判可能在一天发出第一条消息之前遛一次甚至多次狗,此时也要计算:

if(a[1]>=120) cnt+=(a[1]/120);

然后裁判也可以在一天发完最后一条消息后遛一次甚至多次狗,计算方法如下:

if(1440-a[n]>=120) cnt+=((1440-a[n])/120);

综上,把这些部分拼起来,就可以 AC 了。

AC 记录

AC 代码

#include<bits/stdc++.h>
using namespace std;
int a[105];
int main(){
    int q;
    scanf("%d",&q);
    while(q--){
        memset(a,0,sizeof(a));
        int n;
        scanf("%d",&n);
        for(int i=1; i<=n; i++){
            scanf("%d",&a[i]);
        }
        int cnt=0;
        for(int i=2; i<=n; i++){
            if(a[i]-a[i-1]>=120){//可以遛狗
                cnt+=((a[i]-a[i-1])/120);
            }
        }
        if(a[1]>=120) cnt+=(a[1]/120);
        if(1440-a[n]>=120) cnt+=((1440-a[n])/120);
        if(cnt>=2) printf("YES\n");
        else printf("NO\n");
    }
    return 0;
}
posted on 2026-06-29 21:49  lz5332t  阅读(3)  评论(0)    收藏  举报