Submission #1175543

#TimeUsernameProblemLanguageResultExecution timeMemory
1175543MuhammadSaramNaval battle (CEOI24_battle)C++20
76 / 100
2991 ms209360 KiB
#include <bits/stdc++.h> using namespace std; bool ty(char c) { return c=='N' or c=='S'; } int coll(int x,int y,char c,int x1,int y1,char c1) { if (c==c1) return -1; if (ty(c)==ty(c1)) { if (ty(c)) { if (c1=='N') swap(y,y1); if (x==x1 && y>y1) return (y-y1)/2; return -1; } else { if (c1=='E') swap(x,x1); if (y==y1 && x<x1) return (x1-x)/2; return -1; } } if (ty(c1)) swap(x,x1),swap(y,y1),swap(c,c1); if (c=='N') { if(c1=='E' && x1<x && x-y==x1-y1) return x-x1; else if(c1=='W' && x1>x && x+y==x1+y1) return x1-x; } else if(c=='S') { if(c1=='E' && x1<x && x+y==x1+y1) return x-x1; else if(c1=='W' && x<x1 && x-y==x1-y1) return x1-x; } return -1; } int main() { int n; cin>>n; if (n<=5000) { int x[n],y[n]; char c[n]; for (int i=0;i<n;i++) cin>>x[i]>>y[i]>>c[i]; map<int,vector<pair<int,int>>> edg; for (int i=0;i<n;i++) for (int j=i+1;j<n;j++) { int w=coll(x[i],y[i],c[i],x[j],y[j],c[j]); if (~w) edg[w].push_back({i,j}); } bool det[n]={}; for (auto [t,v]:edg) { set<int> se; for (auto [i,j]:v) if (!det[i] && !det[j]) se.insert(i),se.insert(j); for (int i:se) det[i]=1; } for (int i=0;i<n;i++) if (!det[i]) cout<<i+1<<endl; } else { map<int,vector<vector<int>>> se; int x,y; char c; for (int i=0;i<n;i++) { cin>>x>>y>>c; se[x+y].push_back({x,i+1,ty(c)}); } vector<int> ans; for (auto [w,v]:se) { sort(v.begin(),v.end()); stack<int> st; for (int i=0;i<v.size();i++) if (v[i][2]) { if (st.empty()) ans.push_back(v[i][1]); else st.pop(); } else st.push(v[i][1]); while (!st.empty()) ans.push_back(st.top()),st.pop(); } for (int i:ans) cout<<i<<endl; } 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...