| 比赛 |
果蝇王邀请赛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;
}