比赛 果蝇王邀请赛div2 评测结果 WEEEEEEEEE
题目名称 果蝇炸弹 最终得分 0
用户昵称 彭欣越 运行时间 1.865 s
代码语言 C++ 内存使用 14.02 MiB
提交时间 2026-08-27 12:59:40
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=300010,M=4000010,mod=1e9+7;
int c,n,q,mk[2010][2010];
ll a[N],R[N],l[N],r[N],ans;
vector<int>v;
int head[M],tot;
struct edge {
    int v,nxt;
}e[M*2];
void add (int u,int v) {
    e[++tot].v=v;
    e[tot].nxt=head[u];
    head[u]=tot;
}
void dfs (int idx,int t) {
    if (idx>n) return;
    for (int i=t;i<=n;i++) {
        int flag=0;
        for (int j=0;j<idx-1;j++) {
            if (mk[i][v[j]]) {
                flag=1;
                break;
            }
        }
        if (!flag) {
            ans++;
            v.push_back(i);
            dfs(idx+1,i+1);
            v.pop_back();
        }
    }
}
int main () {
    freopen("bombmine.in","r",stdin);
    freopen("bombmine.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    cin >> c;
    cin >> n;
    for (int i=1;i<=n;i++) {
        cin >> a[i] >> R[i];
        l[i]=r[i]=i;
    }
    for (int i=2;i<=n;i++) {
        while (l[i]>1&&a[i]-a[l[i]-1]<=R[i]) {
            R[i]=max(R[i],R[l[i]-1]-(a[i]-a[l[i]-1]));
            l[i]=l[l[i]-1];
        }
    }
    for (int i=n-1;i>=1;i--) {
        while (r[i]<n&&a[r[i]+1]-a[i]<=R[i]) {
            R[i]=max(R[i],R[r[i]+1]-a[r[i]+1]-a[i]);
            r[i]=r[r[i]+1];
        }
    }
    for (int i=1;i<=n;i++) {
        for (int j=l[i];j<=r[i];j++) {
            mk[i][j]=1;
            mk[j][i]=1;
            //cout << i <<' '<< j <<endl;
        }
    }
    dfs(1,1);
    cout << ans+1 <<endl;
    return 0; 
}