Submission #417560

#TimeUsernameProblemLanguageResultExecution timeMemory
417560humbertoyustaIOI Fever (JOI21_fever)C++14
6 / 100
4 ms4940 KiB
/** Created by: Humberto Yusta Codeforces User: humbertoyusta Country: Cuba */ #include<bits/stdc++.h> using namespace std; /// Pragmas #pragma GCC optimize("Ofast","unroll-loops","omit-frame-pointer","inline","03") // Optimization flags //#pragma GCC option("arch=native","tune=native","no-zero=upper") // Enable AVX //#pragma GCC target("avx2") // Enable AVX //#pragma comment(linker, "/STACK:1024000000,1024000000") // Increase stack limit //#pragma GCC target("sse,sse2,sse,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") // I don't know what it is /// Macros: #define int long long #define f first #define s second #define db(x) cerr << #x << ": " << (x) << '\n'; #define pb push_back #define lb lower_bound #define up upper_bound #define all(x) x.begin() , x.end() #define rall(x) x.rbegin() , x.rend() #define enl '\n' typedef pair<int,int> ii; typedef long double ld; typedef unsigned long long ull; /// Constraints: const int maxn = 200010; const int mod = 1000000007; const int mod2 = 998244353; const ld eps = 1e-9; const int inf = ((1ll<<31ll)-1ll); const int INF = 1ll * mod * mod; const ld pi = acos(-1); /// Prime Numbers: // 2, 173, 179, 181, 197, 311, 331, 737, 1009, 2011, 2027, 3079, 4001, 10037, 10079, 20011, 20089; // 100003, 100019, 100043, 200003, 200017, 1000003, 1000033, 1000037, 1000081; // 2000003, 2000029, 2000039, 1000000007, 1000000021, 2000000099; /// Functions: #define lg2(x) 31 - __builtin_clz(x) #define lgx(x,b) ( log(x) / log(b) ) /// Red-Black Tree Template --------------------------------- //#include <ext/pb_ds/assoc_container.hpp> //#include <ext/pb_ds/tree_policy.hpp> //using namespace __gnu_pbds; //typedef tree < long long , null_type , less<long long> , rb_tree_tag , tree_order_statistics_node_update > ordered_set; /// Quick Pow------------------------------------------------ int qpow(int b,int e){ if( !e ) return 1; if( e & 1 ) return qpow(b,e-1) * b % mod; int pwur = qpow(b,e>>1); return pwur * pwur % mod; } int modinv(int x){ return qpow(x,mod-2); } bool isprime(int x){ for(int i=2; i*i<=x; i++) if( x % i == 0 ) return false; return true; } /// My Code ------------------------------------------------- int n, res; map<int,set<ii>> mp, imp; vector<pair<int,ii>> g[maxn]; priority_queue<pair<ii,ii>> q; void bfs(){ while( !q.empty() ){ ii nod = q.top().f; int dir = q.top().s.f; int lwbound = q.top().s.s; q.pop(); if( dir == 3 || dir == 1 ){ while( !mp[nod.f+nod.s].empty() ){ ii nwn = *prev(mp[nod.f+nod.s].end()); //db(nwn.f - nod.f) if( nwn.f - nod.f < lwbound ) break; q.push({nwn,{dir%4+1,nwn.f - nod.f}});//db("4")db(nwn.f)db(nwn.s) mp[nwn.f+nwn.s].erase(nwn); imp[nwn.f-nwn.s].erase(nwn); } } if( dir == 4 || dir == 2 ){ while( !imp[nod.f-nod.s].empty() ){ ii nwn = *imp[nod.f-nod.s].begin(); //db(nod.f - nwn.f) if( nod.f - nwn.f < lwbound ) break; q.push({nwn,{dir%4+1,nod.f - nwn.f}});//db("3")db(nwn.f)db(nwn.s) mp[nwn.f+nwn.s].erase(nwn); imp[nwn.f-nwn.s].erase(nwn); } } if( dir == 3 || dir == 1 ){ while( !mp[nod.f+nod.s].empty() ){ ii nwn = *mp[nod.f+nod.s].begin(); //db(nod.f - nwn.f) if( nod.f - nwn.f < lwbound ) break; q.push({nwn,{dir%4+1,nod.f - nwn.f}});//db("2")db(nwn.f)db(nwn.s) mp[nwn.f+nwn.s].erase(nwn); imp[nwn.f-nwn.s].erase(nwn); } } if( dir == 4 || dir == 2 ){ while( !imp[nod.f-nod.s].empty() ){ ii nwn = *prev(imp[nod.f-nod.s].end()); //db(nwn.f - nod.f) if( nwn.f - nod.f < lwbound ) break; q.push({nwn,{dir%4+1,nwn.f - nod.f}});//db("1")db(nwn.f)db(nwn.s) mp[nwn.f+nwn.s].erase(nwn); imp[nwn.f-nwn.s].erase(nwn); } } res ++; } } int solve(vector<ii> &vx,int init_dir){ mp.clear(); imp.clear(); int cnt = 0; for(auto i : vx){ int u = i.f; int v = i.s; cnt ++; mp[u+v].insert({u,v}); imp[u-v].insert({u,v}); } res = 0; mp[vx[0].f+vx[0].s].erase({vx[0].f,vx[0].s}); imp[vx[0].f-vx[0].s].erase({vx[0].f,vx[0].s}); while( !q.empty() ) q.pop(); q.push({ { vx[0].f , vx[0].s } , { init_dir , 0 } }); bfs(); //db(res) return res; } int32_t main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.setf(ios::fixed); cout.precision(10); srand(time(NULL)); //freopen("sample-01-in.txt","r",stdin); //freopen("a.in","w",stdout); cin >> n; vector<ii> vx; for(int i=1; i<=n; i++){ int u, v; cin >> u >> v; vx.pb({u,v}); } int ans = 0; for(int i=1; i<=4; i++){ ans = max( ans , solve( vx , i ) ); } cout << ans << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...