Submission #1134449

#TimeUsernameProblemLanguageResultExecution timeMemory
1134449AiperiiiNaval battle (CEOI24_battle)C++20
76 / 100
1231 ms1114112 KiB
#include <bits/stdc++.h> #define int long long #define pb push_back #define ff first #define ss second #define all(x) x.begin(),x.end() using namespace std; const int N=2e5+5; vector <int> ind[4]; signed main(){ ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0); int n; cin>>n; vector <int> x(n),y(n),ok(n,1); vector <char> d(n); for(int i=0;i<n;i++){ cin>>x[i]>>y[i]>>d[i]; if(d[i]=='N'){ ind[0].pb(i); } else if(d[i]=='S'){ ind[1].pb(i); } else if(d[i]=='E'){ ind[2].pb(i); } else{ ind[3].pb(i); } } if(ind[0].size()==0 && ind[3].size()==0){ map <int, vector <pair <pair <int,int>,int > > > mp; for(auto i : ind[1]){ mp[x[i]+y[i]].pb({{x[i],y[i]},i}); } for(auto i : ind[2]){ mp[x[i]+y[i]].pb({{x[i],y[i]},i}); } for(auto x : mp){ sort(all(mp[x.ff])); } for(auto x : mp){ vector <int> pr; for(auto i : x.ss){ if(d[i.ss]=='E')pr.pb(i.ss); else{ if(!pr.empty()){ ok[pr.back()]=0; ok[i.ss]=0; pr.pop_back(); } } //cout<<i.ff.ff<<" "<<i.ff.ss<<" "<<i.ss<<"\n"; } } for(int i=0;i<n;i++){ if(ok[i])cout<<i+1<<"\n"; } return 0; } vector <pair <int,pair <int,int> > > v; for(auto i : ind[0]){ for(auto j : ind[2]){ if(x[i]-x[j]==y[i]-y[j]){ if(x[i]-x[j]>0)v.pb({x[i]-x[j],{i,j}}); } } for(auto j : ind[3]){ if(x[j]-x[i]==y[i]-y[j]){ if(x[j]-x[i]>0)v.pb({x[j]-x[i],{i,j}}); } } } for(auto i : ind[1]){ for(auto j : ind[2]){ if(x[i]-x[j]==y[j]-y[i]){ if(x[i]-x[j]>0)v.pb({x[i]-x[j],{i,j}}); } } for(auto j : ind[3]){ if(x[j]-x[i]==y[j]-y[i]){ if(x[j]-x[i]>0)v.pb({x[j]-x[i],{i,j}}); } } } for(auto i : ind[0]){ for(auto j : ind[1]){ if(abs(x[i]-x[j])==0){ if((y[i]-y[j])>0) v.pb({(y[i]-y[j])/2,{i,j}}); } } } for(auto i : ind[2]){ for(auto j : ind[3]){ if(abs(y[i]-y[j])==0){ if(x[j]-x[i]>0) v.pb({(x[j]-x[i])/2,{i,j}}); } } } sort(all(v)); vector <int> pr; int val=0; for(auto x : v){ // cout<<x.ff<<" "<<x.ss.ff<<" "<<x.ss.ss<<"\n"; if(val!=x.ff){ val=x.ff; for(auto i : pr){ ok[i]=0; } pr.clear(); } if(ok[x.ss.ff] && ok[x.ss.ss]){ pr.pb(x.ss.ff); pr.pb(x.ss.ss); } } for(auto i : pr){ ok[i]=0; } int ans=0; for(int i=0;i<n;i++){ if(ok[i])cout<<i+1<<"\n"; } } /* */
#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...