Submission #1213478

#TimeUsernameProblemLanguageResultExecution timeMemory
1213478spetrNaval battle (CEOI24_battle)C++20
6 / 100
1111 ms1114112 KiB
#include <bits/stdc++.h>

using namespace std;

#define ll long long
const ll mmod = 998244353;  
#define vl vector<long long>
#define vll vector<vector<long long>>

ll pow(ll x, ll n, ll mod){
    if (n == 0){
        return 1;
    }
ll half = pow(x, n / 2, mod);
ll half_square = (half * half) % mod;

if (n % 2 == 0) {
    return half_square;
} else {
    return (half_square * x) % mod;
}
}   


ll inversion_x(ll x, ll m){
    ll vysledek = pow(x,m-2);
    return vysledek;
}


int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    ll N;
    cin >> N;

    vll e,w,n,s;

    vector<bool> ans;
    for (ll i = 0; i < N; i++){
        ll x,y;
        char z;

        cin >> x >> y >> z;
        if (z == 'W'){
            w.push_back({x,y,i});
        }
        if (z == 'E'){
            e.push_back({x,y,i});
        }
        if (z == 'S'){
            s.push_back({x,y,i});
        }
        if (z == 'N'){
            n.push_back({x,y,i});
        }

        ans.push_back(true);
    }

    vll kolize;
    for (ll i = 0; i < n.size(); i++){  
        for (ll j = 0; j < w.size(); j++){
            if (n[i][0] - w[j][0] == w[j][1] - n[i][1] &&  w[j][1] - n[i][1] < 0){
                kolize.push_back({abs(n[i][0] - w[j][0]), w[j][2], n[i][2]});
            }
        }
        for (ll j = 0; j < e.size(); j++){
            if (e[j][0] - n[i][0] ==  e[j][1] - n[i][1] &&  e[j][1] - n[i][1] < 0){
                kolize.push_back({abs(e[j][0] - n[i][0]), e[j][2], n[i][2]});
            }
        }
    }

    for (ll i = 0; i < s.size(); i++){  
        for (ll j = 0; j < w.size(); j++){
            if (s[i][0] - w[j][0] == s[i][1] - w[j][1] &&  s[i][1] - w[j][1] < 0){
                kolize.push_back({abs(s[i][0] - w[j][0]), w[j][2], s[i][2]});
            }
        }
        for (ll j = 0; j < e.size(); j++){
            if ((e[j][0] - s[i][0]) == (s[i][1] - e[j][1]) &&  s[i][1] - e[j][1] < 0){
                kolize.push_back({abs(e[j][0] - s[i][0]), e[j][2], s[i][2]});
            }
        }
    }


    for (ll i = 0; i < n.size(); i++){
        for (ll j = 0; j < s.size(); j++){
            if (n[i][0] == s[j][0] && n[i][1] > s[j][1]){
                kolize.push_back({abs(n[i][1] - s[j][1])/2, n[i][2], s[j][2]});
            }
        }
    }


    for (ll i = 0; i < e.size(); i++){
        for (ll j = 0; j < w.size(); j++){
            if (e[i][1] == w[j][1] && w[j][1] > e[i][1]){
                kolize.push_back({abs(w[j][1] - e[i][1])/2, e[i][2], w[j][2]});
            }
        }
    }

    sort(kolize.begin(), kolize.end());

    set<ll> mnozina;
    ll cas;
    for (ll i = 0; i < kolize.size(); i+=0){
        cas = kolize[i][0];
        while (i < kolize.size() && kolize[i][0] == cas){
            if (ans[kolize[i][1]] == true && ans[kolize[i][2]] == true){
                mnozina.insert(kolize[i][1]);
                mnozina.insert(kolize[i][2]);
            }
            i++;
        }

        for (ll prvek : mnozina){
            ans[prvek] = false;
        }
        mnozina.clear();
    }

    for (ll i = 0; i<N; i++){
        if (ans[i] == true){
            cout << i+1 << "\n";
        }
    }


    return 0;
}
#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...