Submission #1138204

#TimeUsernameProblemLanguageResultExecution timeMemory
1138204Sir_Ahmed_ImranNaval battle (CEOI24_battle)C++20
36 / 100
2838 ms173936 KiB
// 01001100 01001111 01010100 01000001 \\ // \\ // ╦ ╔═╗╔╦╗╔═╗ \\ // ║ ║ ║ ║ ╠═╣ \\ // ╩═╝╚═╝ ╩ ╩ ╩ \\ // \\ // 01001100 01001111 01010100 01000001 \\ #include <bits/stdc++.h> using namespace std; #define N 1000001 #define nl '\n' #define ff first #define ss second #define add insert #define ll long long #define ld long double #define terminator main #define pll pair<ll,ll> #define append push_back #define pii pair<int,int> #define all(x) (x).begin(),(x).end() #define L0TA ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL) // N E S W int a[N]; int b[N]; int c[N]; map<int, vector<int>> t; map<int, set<int>> xy[4]; map<int, set<int>> yx[4]; map<int, set<int>> x[4][2]; map<int, set<int>> y[4][2]; int lst(set<int> & s, int v){ auto it = s.upper_bound(v); if(it == s.begin()) return -1; return *(--it); } int nxt(set<int> & s, int v){ auto it = s.upper_bound(v); if(it == s.end()) return -1; return *it; } int crash(int p, int q, int r){ int m, ans; ans = 1e9 + 1; if(r == 0){ m = lst(x[2][q & 1][p], q); if(m >= 0) ans = min(ans, (q - m) / 2); m = lst(xy[3][p + q], q); if(m >= 0) ans = min(ans, (q - m)); m = lst(yx[1][p - q], p); if(m >= 0) ans = min(ans, (p - m)); } if(r == 1){ m = nxt(y[3][p & 1][q], p); if(m >= 0) ans = min(ans, (m - p) / 2); m = lst(xy[2][p + q], q); if(m >= 0) ans = min(ans, (q - m)); m = nxt(yx[0][p - q], p); if(m >= 0) ans = min(ans, (m - p)); } if(r == 2){ m = nxt(x[0][q & 1][p], q); if(m >= 0) ans = min(ans, (m - q) / 2); m = nxt(xy[1][p + q], q); if(m >= 0) ans = min(ans, (m - q)); m = nxt(yx[3][p - q], p); if(m >= 0) ans = min(ans, (m - p)); } if(r == 3){ m = lst(x[1][p & 1][q], p); if(m >= 0) ans = min(ans, (p - m) / 2); m = nxt(xy[0][p + q], q); if(m >= 0) ans = min(ans, (m - q)); m = lst(yx[2][p - q], p); if(m >= 0) ans = min(ans, (p - m)); } return ans; } void solve(){ char d; int n, m, p, q, r; cin >> n; for (int i = 1; i <= n; i++){ cin >> p >> q >> d; a[i] = p, b[i] = q; if(d == 'N') c[i] = 0; if(d == 'E') c[i] = 1; if(d == 'S') c[i] = 2; if(d == 'W') c[i] = 3; xy[c[i]][p + q].add(q); yx[c[i]][p - q].add(p); x[c[i]][q & 1][p].add(q); y[c[i]][p & 1][q].add(p); } for(int i = 1; i <= n; i++) t[crash(a[i], b[i], c[i])].append(i); vector<int> v; while(!t.empty()){ m = (*t.begin()).ff; if(m > 1e9) break; for(auto & i : t[m]){ r = crash(a[i], b[i], c[i]); if(r == m) v.append(i); else t[r].append(i); } for(auto & i : v){ p = a[i], q = b[i]; xy[c[i]][p + q].erase(q); yx[c[i]][p - q].erase(p); x[c[i]][q & 1][p].erase(q); y[c[i]][p & 1][q].erase(p); } t.erase(m); v.clear(); } for(auto & i : t[1e9 + 1]) cout << i << nl; } int terminator(){ L0TA; solve(); 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...
#Verdict Execution timeMemoryGrader output
Fetching results...