#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; } |