제출 #1137497

#제출 시각아이디문제언어결과실행 시간메모리
1137497Muhammad_AneeqNaval battle (CEOI24_battle)C++20
46 / 100
3089 ms544088 KiB
/* بسم الله الرحمن الرحيم Author: (:Muhammad Aneeq:) */ #include <iostream> #include <set> #include <vector> #include <algorithm> #include <map> #warning check the output using namespace std; int const N=2e5+10; int x[N],y[N]; char c[N]; set<pair<int,int>>vals[N]={}; bool ans[N]={}; void check(int i,int j) { if (c[i]==c[j]) return; if (c[i]=='N') { if (c[j]=='S'&&x[i]==x[j]&&y[j]<y[i]&&(y[i]-y[j])%2==0) { int cur=abs(y[i]-y[j])/2; vals[i].insert({cur,j}); vals[j].insert({cur,i}); } if (c[j]=='E'&&x[i]>x[j]&&y[i]>y[j]&&x[i]-x[j]==y[i]-y[j]) { int cur=x[i]-x[j]; vals[i].insert({cur,j}); vals[j].insert({cur,i}); } if (c[j]=='W'&&x[j]>x[i]&&y[i]>y[j]&&x[j]-x[i]==y[i]-y[j]) { int cur=x[j]-x[i]; vals[i].insert({cur,j}); vals[j].insert({cur,i}); } } if (c[i]=='S') { if (c[j]=='N'&&x[i]==x[j]&&y[j]>y[i]&&(y[j]-y[i])%2==0) { int cur=abs(y[i]-y[j])/2; vals[i].insert({cur,j}); vals[j].insert({cur,i}); } if (c[j]=='E'&&x[i]>x[j]&&y[i]<y[j]&&x[i]-x[j]==y[j]-y[i]) { int cur=x[i]-x[j]; vals[i].insert({cur,j}); vals[j].insert({cur,i}); } if (c[j]=='W'&&x[j]>x[i]&&y[i]<y[j]&&x[j]-x[i]==y[j]-y[i]) { int cur=x[j]-x[i]; vals[i].insert({cur,j}); vals[j].insert({cur,i}); } } if (c[i]=='E') { if (c[j]=='S'&&x[i]<x[j]&&y[i]>y[j]&&x[j]-x[i]==y[i]-y[j]) { int cur=x[j]-x[i]; vals[i].insert({cur,j}); vals[j].insert({cur,i}); } if (c[j]=='N'&&x[j]>x[i]&&y[j]>y[i]&&x[j]-x[i]==y[j]-y[i]) { int cur=x[j]-x[i]; vals[i].insert({cur,j}); vals[j].insert({cur,i}); } if (c[j]=='W'&&x[j]>x[i]&&y[i]==y[j]&&(x[j]-x[i])%2==0) { int cur=(x[j]-x[i])/2; vals[i].insert({cur,j}); vals[j].insert({cur,i}); } } if (c[i]=='W') { if (c[j]=='S'&&x[i]>x[j]&&y[i]>y[j]&&x[i]-x[j]==y[i]-y[j]) { int cur=x[i]-x[j]; vals[i].insert({cur,j}); vals[j].insert({cur,i}); } if (c[j]=='N'&&x[j]<x[i]&&y[j]>y[i]&&x[i]-x[j]==y[j]-y[i]) { int cur=x[i]-x[j]; vals[i].insert({cur,j}); vals[j].insert({cur,i}); } if (c[j]=='E'&&x[j]<x[i]&&y[i]==y[j]&&(x[i]-x[j])%2==0) { int cur=(x[i]-x[j])/2; vals[i].insert({cur,j}); vals[j].insert({cur,i}); } } } void subt6(int n) { map<int,vector<pair<int,int>>>e[2]; map<int,set<pair<int,int>>>w[2]; for (int i=0;i<n;i++) { if (c[i]=='W') w[x[i]%2][y[i]].insert({x[i],i}); else e[x[i]%2][y[i]].push_back({x[i],i}); } for (auto& [i,k]:e[0]) sort(rbegin(k),rend(k)); for (auto& [i,k]:e[1]) sort(rbegin(k),rend(k)); for (auto [i,k]:e[0]) { for (auto [j,ind]:k) { auto z=w[0][i].lower_bound({j,-1}); if (z==w[0][i].end()) continue; ans[ind]=ans[(*z).second]=1; w[0][i].erase(z); } } for (auto [i,k]:e[1]) { for (auto [j,ind]:k) { auto z=w[1][i].lower_bound({j,-1}); if (z==w[1][i].end()) continue; ans[ind]=ans[(*z).second]=1; w[1][i].erase(z); } } for (int i=0;i<n;i++) { if (ans[i]==0) { cout<<i+1<<endl; } } } inline void solve() { int n; cin>>n; bool s6=1; for (int i=0;i<n;i++) { cin>>x[i]>>y[i]>>c[i]; if (c[i]=='N'||c[i]=='S') s6=0; } if (s6) { subt6(n); return; } for (int i=0;i<n;i++) { for (int j=i+1;j<n;j++) { check(i,j); } } while (1) { int mn=1e9+10; vector<int>inds; for (int i=0;i<n;i++) { if (vals[i].size()&&(*begin(vals[i])).first<mn) { inds={}; mn=(*begin(vals[i])).first; inds.push_back(i); } else if (mn==(*begin(vals[i])).first) { inds.push_back(i); } } if (inds.size()==0) break; for (auto i:inds) { ans[i]=1; for (auto [j,k]:vals[i]) vals[k].erase({j,i}); vals[i]={}; } } for (int i=0;i<n;i++) { if (ans[i]==0) { cout<<i+1<<endl; } } } int main() { ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); int t=1; for (int i=1;i<=t;i++) { solve(); } }

컴파일 시 표준 에러 (stderr) 메시지

Main.cpp:12:2: warning: #warning check the output [-Wcpp]
   12 | #warning check the output
      |  ^~~~~~~
#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...