Submission #1296847

#TimeUsernameProblemLanguageResultExecution timeMemory
1296847malmoNaval battle (CEOI24_battle)C++20
46 / 100
3129 ms792068 KiB
#include <bits/stdc++.h> using namespace std; using pii=pair<int, int>; using pipii=pair<int, pii>; pipii makePipii(int v1, int v2, int v3){ pipii ret; ret.first=v1; ret.second.first=v2; ret.second.second=v3; return ret; } pair<bool, int> trovaScontro(char dir1, pii pos1, char dir2, pii pos2){ const pair<bool, int> noScontro={false, -1}; if(dir1==dir2) return noScontro; if(dir1=='E'){ if(dir2=='W'){ if(pos1.second==pos2.second && pos1.first<pos2.first) return {true, (pos2.first-pos1.first)/2}; else return noScontro; }else if(dir2=='N'){ pii intersez={pos2.first, pos1.second}; int time1=intersez.first-pos1.first; int time2=pos2.second-intersez.second; if(time1==time2 && time1>0) return {true, time1}; else return noScontro; }else if(dir2=='S'){ pii intersez={pos2.first, pos1.second}; int time1=intersez.first-pos1.first; int time2=intersez.second-pos2.second; if(time1==time2 && time1>0) return {true, time1}; else return noScontro; } }else if(dir1=='W'){ if(dir2=='E'){ if(pos1.second==pos2.second && pos2.first<pos1.first) return {true, (pos1.first-pos2.first)/2}; else return noScontro; }else if(dir2=='N'){ pii intersez={pos2.first, pos1.second}; int time1=pos1.first-intersez.first; int time2=pos2.second-intersez.second; if(time1==time2 && time1>0) return {true, time1}; else return noScontro; }else if(dir2=='S'){ pii intersez={pos2.first, pos1.second}; int time1=pos1.first-intersez.first; int time2=intersez.second-pos2.second; if(time1==time2 && time1>0) return {true, time1}; else return noScontro; } }else if(dir1=='N'){ if(dir2=='S'){ if(pos1.first==pos2.first && pos2.second<pos1.second) return {true, (pos1.second-pos2.second)/2}; else return noScontro; }else if(dir2=='E'){ pii intersez={pos1.first, pos2.second}; int time1=pos1.second-intersez.second; int time2=intersez.first-pos2.first; if(time1==time2 && time1>0) return {true, time1}; else return noScontro; }else if(dir2=='W'){ pii intersez={pos1.first, pos2.second}; int time1=pos1.second-intersez.second; int time2=pos2.first-intersez.first; if(time1==time2 && time1>0) return {true, time1}; else return noScontro; } }else if(dir1=='S'){ if(dir2=='N'){ if(pos1.first==pos2.first && pos1.second<pos2.second) return {true, (pos2.second-pos1.second)/2}; else return noScontro; }else if(dir2=='E'){ pii intersez={pos1.first, pos2.second}; int time1=intersez.second-pos1.second; int time2=intersez.first-pos2.first; if(time1==time2 && time1>0) return {true, time1}; else return noScontro; }else if(dir2=='W'){ pii intersez={pos1.first, pos2.second}; int time1=intersez.second-pos1.second; int time2=pos2.first-intersez.first; if(time1==time2 && time1>0) return {true, time1}; else return noScontro; } } } vector<int> affonda(int N, vector<int> X, vector<int> Y, vector<char> D){ vector<pipii> scontri; for(int i=0; i<N; i++){ char direzioneAtt=D[i]; pii posAtt={X[i], Y[i]}; for(int j=i+1; j<N; j++){ char direzione2=D[j]; pii pos2={X[j], Y[j]}; pair<bool, int> result=trovaScontro(direzioneAtt, posAtt, direzione2, pos2); if(result.first){ scontri.push_back(makePipii(result.second, i, j)); } } } sort(scontri.begin(), scontri.end()); vector<bool> isAlive(N, true); int currTime=0; set<int> toKill; for(int i=0; i<scontri.size(); i++){ int n1=scontri[i].second.first, n2=scontri[i].second.second; if(scontri[i].first!=currTime){ currTime=scontri[i].first; for(int nave : toKill) isAlive[nave]=false; toKill.erase(toKill.begin(), toKill.end()); } if(isAlive[n1] && isAlive[n2]){ toKill.insert(n1); toKill.insert(n2); } } for(int nave : toKill) isAlive[nave]=false; vector<int> ans; for(int i=0; i<N; i++){ if(isAlive[i]) ans.push_back(i+1); } return ans; } int main(){ int N; cin >> N; vector<int> X(N), Y(N); vector<char> D(N); for (int i = 0; i < N; i++) cin >> X[i] >> Y[i] >> D[i]; vector<int> ans = affonda(N, X, Y, D); sort(begin(ans), end(ans)); for (auto x: ans) cout << x << '\n'; }

Compilation message (stderr)

Main.cpp: In function 'std::pair<bool, int> trovaScontro(char, pii, char, pii)':
Main.cpp:88:1: warning: control reaches end of non-void function [-Wreturn-type]
   88 | }
      | ^
#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...