求 ABC388F testcase63&67 错因
  • 板块学术版
  • 楼主chenxi2009
  • 当前回复1
  • 已保存回复1
  • 发布时间2025/1/15 19:56
  • 上次更新2025/1/16 08:04:35
查看原帖
求 ABC388F testcase63&67 错因
1020063
chenxi2009楼主2025/1/15 19:56

高铁上调了四个小时就剩这个了,WA,运行时间均为 1ms,有没有人 WA 在这里调好了请教一下这是什么问题?

思路

码:

#include<bits/stdc++.h>
using namespace std;
int m,a,b,eit,it;
long long n,l[50000],r[50000],st,ed,len;
bool g[20000000],c[20000000],w;
int main(){
	scanf("%lld%d%d%d",&n,&m,&a,&b);
	for(int i = 1;i <= m;i ++){
		scanf("%lld%lld",&l[i],&r[i]);
		if(r[i] - l[i] > 30) return printf("No"),0;
	}
	if(a == b){
		for(int i = 1;i <= m;i ++) if((r[i] - 1) / a * a >= (l[i] - 1)) return printf("No"),0;
		if((n - 1) % a == 0) printf("Yes");
		else printf("No");
		return 0;
	}
	it = 1;
	while(it <= m){
		eit = it;
		for(int i = it + 1;i <= m;i ++){
			if(l[i] - r[i - 1] < 460) eit = i;
			else break;
		}
		st = max(1ll,l[it] - 460),ed = min(n,r[eit] + 460);
		len = ed - st + 1;
		for(int i = 1;i <= len;i ++) c[i] = true,g[i] = false;
		for(int i = it;i <= eit;i ++) for(int j = l[i] - st + 1;j <= r[i] - st + 1;j ++) c[j] = false;
		g[1] = true;
		if(st > 1) for(int i = 2;i <= l[it] - st;i ++) g[i] = true;
		for(int i = 2;i <= len;i ++) if(c[i]) for(int j = max(1,i - b);j <= i - a;j ++) g[i] |= g[j];
		w = false;
		for(int i = r[eit] - st + 1;i <= len;i ++) w |= g[i];
		if(!w) return printf("No"),0;
		it = eit + 1;
	}
	if(n - r[m] >= 460 || g[len]) printf("Yes");
	else printf("No");
	return 0;
}
2025/1/15 19:56
加载中...