Submission #392071

#TimeUsernameProblemLanguageResultExecution timeMemory
392071loctildoreIdeal city (IOI12_city)C++14
0 / 100
17 ms3020 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define f first #define s second #define x first #define y second #define elif else if #define endl '\n' #define all(x) begin(x), end(x) #define MOD 1000000000 template <typename T> ostream& operator << (ostream& os, const vector<T>& a) { os << '['; bool E = false; for(const T& x : a) { if(E) os << ' '; os << x; E = true; } return os << ']'; } int n,*x,*y; ll total; unordered_map<ll,int> mp; int done[100069][2]; ll convert(pair<int,int> p){ return ((ll)p.f<<31)+p.s; } int dfs(int node,int orientation){ if (done[node][orientation]) return 0; done[node][orientation]=true; int temp,cnt=0; if (orientation) { if (mp.find(convert({x[node]+1,y[node]}))!=mp.end()) { cnt+=dfs(mp[convert({x[node]+1,y[node]})],orientation); } if (mp.find(convert({x[node]-1,y[node]}))!=mp.end()) { cnt+=dfs(mp[convert({x[node]-1,y[node]})],orientation); } if (mp.find(convert({x[node],y[node]+1}))!=mp.end()) { temp=dfs(mp[convert({x[node],y[node]+1})],orientation); total+=(ll)temp*(n-temp); cnt+=temp; } if (mp.find(convert({x[node],y[node]-1}))!=mp.end()) { temp=dfs(mp[convert({x[node],y[node]-1})],orientation); total+=(ll)temp*(n-temp); cnt+=temp; } } else{ if (mp.find(convert({x[node],y[node]+1}))!=mp.end()) { cnt+=dfs(mp[convert({x[node],y[node]+1})],orientation); } if (mp.find(convert({x[node],y[node]-1}))!=mp.end()) { cnt+=dfs(mp[convert({x[node],y[node]-1})],orientation); } if (mp.find(convert({x[node]+1,y[node]}))!=mp.end()) { temp=dfs(mp[convert({x[node]+1,y[node]})],orientation); total+=(ll)temp*(n-temp); cnt+=temp; } if (mp.find(convert({x[node]-1,y[node]}))!=mp.end()) { temp=dfs(mp[convert({x[node]-1,y[node]})],orientation); total+=(ll)temp*(n-temp); cnt+=temp; } } return cnt+1; } int DistanceSum(int N, int *X, int *Y) { n=N;x=X;y=Y; for (int i = 0; i < n; i++) { mp[((ll)x[i]<<31)+y[i]]=i; } dfs(0,0);dfs(0,1); return total%MOD; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...