#include<bits/stdc++.h>
using namespace std;
#define rep(a, b) for(int a = 0; a < (b); ++a)
pair<long long, long long>T[31];
int odw[31], mp[40000000];
int main() {
ios_base::sync_with_stdio(0); cin.tie(0);
int n, k=1, ans=0;
cin >> n;
rep(i, n) {
cin >> T[i].first >> T[i].second;
k*=2;
}
rep(i, k) {
int p=i;
queue<int>q;
rep(j, n) {
if(p%2==1) {
odw[j]=1;
q.push(j);
} else odw[j]=0;
p/=2;
}
while(!q.empty()) {
int j=q.front(), l=j; q.pop();
while(l>=0 && T[l].first>=T[j].first-T[j].second) {
if(!odw[l]) {
odw[l]=1;
q.push(l);
}
--l;
}
l=j;
while(l<n && T[l].first<=T[j].first+T[j].second) {
if(!odw[l]) {
odw[l]=1;
q.push(l);
}
++l;
}
}
int a=0, z=1;
rep(i, n) {
a+=z*odw[i];
z*=2;
}
if(!mp[a]) ++ans;
++mp[a];
}
cout << ans;
}
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 | #include<bits/stdc++.h> using namespace std; #define rep(a, b) for(int a = 0; a < (b); ++a) pair<long long, long long>T[31]; int odw[31], mp[40000000]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, k=1, ans=0; cin >> n; rep(i, n) { cin >> T[i].first >> T[i].second; k*=2; } rep(i, k) { int p=i; queue<int>q; rep(j, n) { if(p%2==1) { odw[j]=1; q.push(j); } else odw[j]=0; p/=2; } while(!q.empty()) { int j=q.front(), l=j; q.pop(); while(l>=0 && T[l].first>=T[j].first-T[j].second) { if(!odw[l]) { odw[l]=1; q.push(l); } --l; } l=j; while(l<n && T[l].first<=T[j].first+T[j].second) { if(!odw[l]) { odw[l]=1; q.push(l); } ++l; } } int a=0, z=1; rep(i, n) { a+=z*odw[i]; z*=2; } if(!mp[a]) ++ans; ++mp[a]; } cout << ans; } |
English