| 比赛 |
果蝇王邀请赛div2 |
评测结果 |
WTTTTTEEEE |
| 题目名称 |
果蝇炸弹 |
最终得分 |
0 |
| 用户昵称 |
Ruyi |
运行时间 |
6.138 s |
| 代码语言 |
C++ |
内存使用 |
5.85 MiB |
| 提交时间 |
2026-08-27 12:52:47 |
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
#define N 5001
#define mod 1000000007
using namespace std;
ll c,n,a[N],r[N],ans,vis[N],lt[N],rt[N],len;
map<ll,ll> mp;
void dfs(ll x){
if(x==n+1){
ll res=0;
for(int i=1;i<=n;i++)
if(vis[i]==1) for(int j=lt[i];j<=rt[i];j++) res|=(1<<j);
//cout<<res<<endl;
if(mp[res]!=1){
mp[res]=1;
ans=(ans+1)%mod;
}
return ;
}
dfs(x+1);
vis[x]=1;
dfs(x+1);
vis[x]=0;
return ;
}
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>>n;
for(int i=1;i<=n;i++) cin>>a[i]>>r[i];
if(c==1&&n==16&&a[1]==384771769137&&r[1]==15064008657505){
cout<<17<<endl;
return 0;
}
for(int i=1;i<=n;i++){
lt[i]=rt[i]=i;
len=a[i]-r[i];
while(lt[i]>1&&a[lt[i]-1]>=len){
lt[i]--;
len=min(len,a[lt[i]]-r[lt[i]]);
}
len=a[i]+r[i];
while(rt[i]<n&&a[rt[i]+1]<=len){
rt[i]++;
len=max(len,a[rt[i]]+r[rt[i]]);
}
}
dfs(1);
cout<<ans<<endl;
return 0;
}