WA on #6, #7, RE on #34, #35
然而 RE 似乎是最后一句输出导致的,但把最后那句输出放进循环里判断 i 是否为 n 就不会 RE 了,但是 WA 了。求调,求解释以上玄学问题。
#include <iostream>
#include <algorithm>
#include <string.h>
#include <iomanip>
#include <bitset>
#include <math.h>
#include <string>
#include <vector>
#include <queue>
#include <set>
#include <map>
#define fst first
#define scd second
#define db double
#define ll long long
#define mp make_pair
#define pb push_back
#define eb emplace_back
#define vi vector <int>
#define pii pair <int, int>
#define sz(x) ((int)x.size())
#define ms(f, x) memset(f, x, sizeof(f))
#define L(i, j, k) for (int i=(j); i<=(k); ++i)
#define R(i, j, k) for (int i=(j); i>=(k); --i)
#define ACN(i, H_u) for (int i=H_u; i; i=E[i].nxt)
using namespace std;
template <typename INT> void rd(INT &res) {
res=0; bool f=false; char ch=getchar();
while (ch<'0'||ch>'9') f|=ch=='-', ch=getchar();
while (ch>='0'&&ch<='9') res=(res<<1)+(res<<3)+(ch^48), ch=getchar();
res=(f?-res:res);
}
template <typename INT, typename...Args>
void rd(INT &x, Args &...y) { rd(x), rd(y...); }
//dfs
const int maxn=2e4, maxm=2e7;
const int N=maxn+10, M=maxm+10;
int n, m, av, bv; bool flag[M], dp[M];
//wmr
struct node { ll l, r; } a[N];
//incra
//lottle
signed main() {
// ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
rd(n, m, av, bv);
if (av==bv) {
while (m--) {
ll l, r; rd(l, r);
--l, --r;
if (r/av>l/av||l%av==0||r%av==0) { puts("No"); return 0; }
}
puts("Yes");
return 0;
}
ll de=0;
L(i, 1, m) {
rd(a[i].l, a[i].r);
if (a[i].r-a[i].l+1>=bv) { puts("No"); return 0; }
if (a[i].l-de-a[i-1].r>bv*bv) de+=a[i].l-de-a[i-1].r-bv*bv;
a[i].l-=de, a[i].r-=de;
L(j, a[i].l, a[i].r) flag[j]=true;
}
n-=de;
if (n-a[m].r>bv*bv) n=a[m].r+bv*bv;
dp[1]=true;
L(i, 1, n)
if (dp[i])
L(j, av, bv)
if (!flag[i+j])
dp[i+j]=true;
puts(dp[n]?"Yes":"No");
return 0;
}
/*
input
24 2 3 5
7 8
17 20
output
Yes
*/