제출 #1026359

#제출 시각아이디문제언어결과실행 시간메모리
102635912345678Naval battle (CEOI24_battle)C++17
6 / 100
2 ms604 KiB
#include <bits/stdc++.h>

using namespace std;

const int nx=5e3+5;

int n, x[nx], y[nx], dn[nx];
char dr[nx];
map<int, map<pair<int, int>, set<int>>> mp;

tuple<int, int, int> crash(int i, int j)
{
    if (dr[i]==dr[j]) return {0, 0, 0};
    if ((dr[i]=='N'&&dr[j]=='S')||(dr[i]=='S'&&dr[j]=='N')) 
    {
        if (x[i]==x[j]&&(abs(y[i]-y[j])%2)==0) return {abs(y[i]-y[j])/2, x[i], min(y[i], y[j])+abs(y[i]-y[j])/2};
        else return {0, 0, 0};
    }
    if ((dr[i]=='W'&&dr[j]=='E')||(dr[i]=='E'&&dr[j]=='W')) 
    {
        if (y[i]==y[j]&&(abs(x[i]-x[j])%2)==0) return {abs(x[i]-x[j])/2, min(x[i], x[j])+abs(x[i]-x[j])/2, y[i]};
        else return {0, 0, 0};
    }
    if (dr[i]=='N')
    {
        if (dr[j]=='W'&&y[i]>y[j]&&y[i]-y[j]==x[j]-x[i]) return {y[i]-y[j], x[i], y[j]};
        if (dr[j]=='E'&&y[i]>y[j]&&y[i]-y[j]==x[i]-x[j]) return {y[i]-y[j], x[i], y[j]};
    }
    if (dr[i]=='S')
    {
        if (dr[j]=='W'&&y[i]<y[j]&&y[j]-y[i]==x[j]-x[i]) return {y[j]-y[i], x[i], y[j]};
        if (dr[j]=='E'&&y[i]<y[j]&&y[j]-y[i]==x[i]-x[j]) return {y[j]-y[i], x[i], y[j]};
    }
    if (dr[j]=='N')
    {
        if (dr[i]=='W'&&y[j]>y[i]&&y[j]-y[i]==x[i]-x[j]) return {y[j]-y[i], x[j], y[i]};
        if (dr[i]=='E'&&y[j]>y[i]&&y[j]-y[i]==x[j]-x[i]) return {y[j]-y[i], x[j], y[i]};
    }
    if (dr[j]=='S')
    {
        if (dr[i]=='W'&&y[j]<y[i]&&y[i]-y[j]==x[i]-x[j]) return {y[i]-y[j], x[j], y[i]};
        if (dr[i]=='E'&&y[j]<y[i]&&y[i]-y[j]==x[j]-x[i]) return {y[i]-y[j], x[j], y[i]};
    }
    return {0, 0, 0};
}

int main()
{
    cin.tie(NULL)->sync_with_stdio(false);
    cin>>n;
    for (int i=1; i<=n; i++) cin>>x[i]>>y[i]>>dr[i];
    for (int i=1; i<=n; i++) 
    {
        for (int j=i+1; j<=n; j++)
        {
            auto [x, y, z]=crash(i, j);
            //cout<<"debug "<<i<<' '<<j<<' '<<x<<' '<<y<<' '<<z<<'\n';
            if (x==0) continue;
            mp[x][{y, z}].insert(i);
            mp[x][{y, z}].insert(j);
        }
    }
    for (auto [t, x]:mp)
    {
        for (auto [c, s]:x)
        {
            int cnt=0;
            for (auto p:s) if (!dn[p]) cnt++;
            if (cnt>1) for (auto p:s) dn[p]=1;
        }
    }
    for (int i=1; i<=n; i++) if (!dn[i]) cout<<i<<'\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...