WA 一个点,求条
#include<bits/stdc++.h>
using namespace std;
#define int long long
map<long long,int> mp;
int n,m,a,b,l[20005],r[20005];
int cheak(int l,int r)
{
int len=r-l;
int aa=len/a;
if((aa*a)+(b-a)*aa<len||a>len) return 0;
else return 1;
}
void zy(int i)
{
int ll=r[i-1]+1,rr=r[i-1]+21;
int lll=l[i]-21,rrr=l[i]-1;
for(int i=ll;i<=rr;i++)
{
for(int j=max(lll,0ll);j<=rrr;j++)
{
if(j<=i) continue;
if(mp[i]) mp[j]|=cheak(i,j);
}
}
}
signed main()
{
cin>>n>>m>>a>>b;
for(int i=1;i<=m;i++)
{
cin>>l[i]>>r[i];
if(r[i]-l[i]+1>b)
{
cout<<"No";
return 0;
}
}
mp[1]=1;
for(int i=1;i<=m;i++)
{
zy(i);
for(int j=r[i]+1;j<=r[i]+21;j++)
{
for(int k=max(l[i]-21,0ll);k<=l[i]-1;k++)
{
if(j-k>=a&&j-k<=b)
{
mp[j]|=mp[k];
}
}
}
}
l[m+1]=n+1;
zy(m+1);
if(mp[n]) cout<<"Yes";
else cout<<"No";
}
码风有点乱...(逃)