#include<bits/stdc++.h>
using namespace std;
struct para
{
long long a,b;
};
void wypisz(int mask)
{
while(mask>=0)
{
cout << mask%2;
mask/=2;
if(mask==0)
break;
}
cout <<endl;
}
int main()
{
ios_base::sync_with_stdio(0);
int n;
cin >> n;
vector<para> vec(n);
for(int k=0;k<n;k++)
cin >> vec[k].a >> vec[k].b;
map<int,bool> mapa;
int ile = 0;
for(int k=0;k<(1 << n);k++)
{
// cout << "rozwazam ";
// wypisz(k);
int mask = 0;
for(int i=0;i<n;i++)
{
if(k & (1 << i))
{
long long min_l = vec[i].a-vec[i].b;
long long max_r = vec[i].a + vec[i].b;
mask = mask | (1<<i);
int l = i-1;
while(l >=0 && min_l <= vec[l].a)
{
mask = mask | (1<<l);
min_l = min(min_l,vec[l].a - vec[l].b);
max_r = max(max_r,vec[l].a + vec[l].b);
l--;
}
int r = i+1;
while(r < n && max_r>= vec[r].a)
{
mask = mask | (1<<r);
max_r = max(max_r,vec[r].a + vec[r].b);
min_l = min(min_l,vec[r].a - vec[r].b);
r++;
while(l >=0 && min_l <= vec[l].a)
{
mask = mask | (1<<l);
min_l = min(min_l,vec[l].a - vec[l].b);
max_r = max(max_r,vec[l].a+ vec[l].b);
l--;
}
}
}
}
if(!mapa[mask])
{
ile++;
// wypisz(mask);
}
mapa[mask]= true;
}
cout << ile<<endl;
}
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 64 65 66 67 68 69 70 71 72 73 | #include<bits/stdc++.h> using namespace std; struct para { long long a,b; }; void wypisz(int mask) { while(mask>=0) { cout << mask%2; mask/=2; if(mask==0) break; } cout <<endl; } int main() { ios_base::sync_with_stdio(0); int n; cin >> n; vector<para> vec(n); for(int k=0;k<n;k++) cin >> vec[k].a >> vec[k].b; map<int,bool> mapa; int ile = 0; for(int k=0;k<(1 << n);k++) { // cout << "rozwazam "; // wypisz(k); int mask = 0; for(int i=0;i<n;i++) { if(k & (1 << i)) { long long min_l = vec[i].a-vec[i].b; long long max_r = vec[i].a + vec[i].b; mask = mask | (1<<i); int l = i-1; while(l >=0 && min_l <= vec[l].a) { mask = mask | (1<<l); min_l = min(min_l,vec[l].a - vec[l].b); max_r = max(max_r,vec[l].a + vec[l].b); l--; } int r = i+1; while(r < n && max_r>= vec[r].a) { mask = mask | (1<<r); max_r = max(max_r,vec[r].a + vec[r].b); min_l = min(min_l,vec[r].a - vec[r].b); r++; while(l >=0 && min_l <= vec[l].a) { mask = mask | (1<<l); min_l = min(min_l,vec[l].a - vec[l].b); max_r = max(max_r,vec[l].a+ vec[l].b); l--; } } } } if(!mapa[mask]) { ile++; // wypisz(mask); } mapa[mask]= true; } cout << ile<<endl; } |
English