AT_abc347_c [ABC347C] Ideal Holidays 题解

原题链接

由于 \(d\) 是固定的,考虑移动序列 \(d\),判断是否能恰好嵌入到假期里面。

所以把 \(d_1\) 放在假期的第一天,那么我们现在可以向右移动 \(A-1\) 天。

一周可以表示为 a a b b b b a a。(a 表示假期,b 表示工作日)

接下来分类讨论输出 Yes 的情况:

  • 全部在前面的 a

  • 部分在前面的 a,部分在后面的 a

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=2e5+100;
int n,a,b,d[N];
bool flag;
int main()
{
	scanf("%d%d%d",&n,&a,&b);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&d[i]);
		d[i]%=a+b;
		if(!d[i]) d[i]=a+b;
	}
	sort(d+1,d+n+1);
	if(d[n]-d[1]+1<=a) flag=true;
	for(int i=2;i<=n;i++)
	{
		if(d[i]-d[i-1]>b&&d[i-1]<=a) flag=true;
	}
	flag?printf("Yes"):printf("No");
	return 0;
} 
posted @ 2024-08-12 11:02  MinimumSpanningTree  阅读(12)  评论(0)    收藏  举报