高铁上调了四个小时就剩这个了,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;
}