#include<bits/stdc++.h>
#define ff first
#define ss second
#define mp make_pair
#define pb push_back
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pp;
unordered_set <int> S;
vector<pp> v;
vector<int> graph[30];
int n,bn;
void dfs(int p)
{
bn|=(1<<p);
for(auto I : graph[p]) if(!((bn>>I)&1)) dfs(I);
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;++i)
{
ll a,b;
scanf("%lld%lld",&a,&b);
v.pb(mp(a,b));
}
sort(v.begin(),v.end());
// for(auto I : v) printf("%lld %lld\n",I.ff,I.ss);
// printf("\n");
for(int i=0;i<n;++i)
{
for(int j=i+1;(j<n) && (v[i].ff+v[i].ss>=v[j].ff);++j)
{
graph[i].pb(j);
}
for(int j=i-1;(j>=0) && (v[i].ff-v[i].ss<=v[j].ff);--j)
{
graph[i].pb(j);
}
}
/*
for(int i=0;i<n;++i)
{
for(auto I : graph[i])
{
printf("%d ",I);
}
printf("\n");
}
*/
for(int mask=0;mask<(1<<n);++mask)
{
int k=mask;
bn=0;
for(int i=0;i<n;++i)
{
if(k&1) if(!((bn>>i)&1)) dfs(i);
k>>=1;
}
S.insert(bn);
}
printf("%d\n",S.size());
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #include<bits/stdc++.h> #define ff first #define ss second #define mp make_pair #define pb push_back using namespace std; typedef long long ll; typedef pair<ll,ll> pp; unordered_set <int> S; vector<pp> v; vector<int> graph[30]; int n,bn; void dfs(int p) { bn|=(1<<p); for(auto I : graph[p]) if(!((bn>>I)&1)) dfs(I); } int main() { scanf("%d",&n); for(int i=0;i<n;++i) { ll a,b; scanf("%lld%lld",&a,&b); v.pb(mp(a,b)); } sort(v.begin(),v.end()); // for(auto I : v) printf("%lld %lld\n",I.ff,I.ss); // printf("\n"); for(int i=0;i<n;++i) { for(int j=i+1;(j<n) && (v[i].ff+v[i].ss>=v[j].ff);++j) { graph[i].pb(j); } for(int j=i-1;(j>=0) && (v[i].ff-v[i].ss<=v[j].ff);--j) { graph[i].pb(j); } } /* for(int i=0;i<n;++i) { for(auto I : graph[i]) { printf("%d ",I); } printf("\n"); } */ for(int mask=0;mask<(1<<n);++mask) { int k=mask; bn=0; for(int i=0;i<n;++i) { if(k&1) if(!((bn>>i)&1)) dfs(i); k>>=1; } S.insert(bn); } printf("%d\n",S.size()); } |
English