这道题是一个小枚举。
首先,处理裁判在两次发送消息之间遛狗的情况。
注意到裁判在两次发送消息之间可能可以遛多次狗,因此可以写出以下代码:
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 代码
#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;
}
浙公网安备 33010602011771号