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