제출 #1137484

#제출 시각아이디문제언어결과실행 시간메모리
1137484Muhammad_AneeqNaval battle (CEOI24_battle)C++20
46 / 100
3055 ms577300 KiB
/*
بسم الله الرحمن الرحيم
Author:
                          (:Muhammad Aneeq:)
*/

#include <iostream>
#include <set>
#include <vector>
#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});
        }
    }
}
inline void solve()
{
    int n;
    cin>>n;
    for (int i=0;i<n;i++)
        cin>>x[i]>>y[i]>>c[i];
    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:10:2: warning: #warning check the output [-Wcpp]
   10 | #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...