#include<bits/stdc++.h>
using namespace std;
int n;
long long a[30],r[30];
bool t[10000005];
long long wyn;
int maska(int m)
{
int odp = 0;
for(int i = 1;i <= n; i++)
for(int j = 0;j < n; j++)
{
int pom = (1 << j);
if((m & pom) || (odp & pom))
{
int A = a[j + 1] - r[j + 1];
int B = a[j + 1] + r[j + 1];
for(int k = 0;k < n; k++)
if(a[k + 1] >= A && a[k + 1] <= B)
{
int pom2 = (1 << k);
odp |= pom2;
}
}
}
return odp;
}
int main()
{
cin>>n;
for(int i = 1;i <= n; i++)
{
cin>>a[i]>>r[i];
}
int x = (1 << n);
for(int i = 0;i < x; i++)
{
int p = maska(i);
if(!t[p])
{
wyn++;
//cout<<i<<'\n';
wyn %= 1000000007;
t[p] = 1;
}
}
cout<<wyn;
return 0;
}
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 | #include<bits/stdc++.h> using namespace std; int n; long long a[30],r[30]; bool t[10000005]; long long wyn; int maska(int m) { int odp = 0; for(int i = 1;i <= n; i++) for(int j = 0;j < n; j++) { int pom = (1 << j); if((m & pom) || (odp & pom)) { int A = a[j + 1] - r[j + 1]; int B = a[j + 1] + r[j + 1]; for(int k = 0;k < n; k++) if(a[k + 1] >= A && a[k + 1] <= B) { int pom2 = (1 << k); odp |= pom2; } } } return odp; } int main() { cin>>n; for(int i = 1;i <= n; i++) { cin>>a[i]>>r[i]; } int x = (1 << n); for(int i = 0;i < x; i++) { int p = maska(i); if(!t[p]) { wyn++; //cout<<i<<'\n'; wyn %= 1000000007; t[p] = 1; } } cout<<wyn; return 0; } |
English