比赛 果蝇王邀请赛div2 评测结果 ATTTTTTTTT
题目名称 果蝇炸弹 最终得分 10
用户昵称 rzzakioi 运行时间 10.265 s
代码语言 C++ 内存使用 203.74 MiB
提交时间 2026-08-27 11:21:43
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
int c,n,ans;
struct node{
    int x,r;
}a[300005];
vector<int>v[300005];
set<int>st;
bool vis[300005];
map<set<int>,bool>mp;
void dfs(int k){
    if(k==n+1){
        st.clear();
        for(int i=1;i<=n;i++){
            if(vis[i]){
                for(auto x:v[i]){
                    st.insert(x);
                }
            }
        }
        if(!mp[st])ans++;
        mp[st]=1;
    }
    else{
        for(int i=0;i<=1;i++){
            vis[k]=i;
            dfs(k+1);
            vis[k]=0;
        }
    }
}
signed main(){
    freopen("bombmine.in","r",stdin);
    freopen("bombmine.out","w",stdout);
    scanf("%lld%lld",&c,&n);
    for(int i=1;i<=n;i++){
        scanf("%lld%lld",&a[i].x,&a[i].r);
    }
    for(int i=1;i<=n;i++){
        int lt=a[i].x,rt=a[i].x,l=a[i].x,r=a[i].x;
        do{
            lt=l;rt=r;
            for(int j=1;j<=n;j++){
                if(lt<=a[j].x&&a[j].x<=rt){
                    l=min(l,a[j].x-a[j].r);
                    r=max(r,a[j].x+a[j].r);
                }
            }
        }while(lt!=l||rt!=r);
        for(int j=1;j<=n;j++){
            if(a[j].x>=lt&&a[j].x<=rt)v[i].push_back(j);
        }
    }
    dfs(1);
    printf("%lld",ans);
    return 0;
}