Submission #1068644

#TimeUsernameProblemLanguageResultExecution timeMemory
1068644vjudge1Naval battle (CEOI24_battle)C++17
76 / 100
402 ms35232 KiB
#include<bits/stdc++.h>
using namespace std;
 long long int check(long long int x1, long long int y1, char c1, long long int x2,
long long int y2,char c2){
    if((c1 == 'N' or c1 == 'S') and (c2 == 'E' or c2 == 'W')){
        swap(x1,x2);
        swap(y1,y2);
        swap(c1,c2);
    }
    if(c1 == c2){
        return -1;
    }
    if(c1 == 'E'){
        if(c2 == 'W'){
            if(y1 != y2){
                return -1;
            }else{
                long long int res = (x2 - x1)/2;
                if(res > 0){
                return res;
                }else{
                    return -1;
                }
            }
        }
        if(c2 == 'N'){
            long long int a = x2 - x1;
            long long int b = y2 - y1;
            if(a == b and a > 0){
                return a;
            }else{
                return -1;
            }
        }

        if(c2 == 'S'){

            long long int a = x2 - x1;
            long long int b = y1 - y2;
            if(a == b and a > 0){
                return a;
            }else{
                return -1;
            }
        }
    }
    if(c1 == 'W'){
        if(c2 == 'E'){
            if(y1 != y2){
                return -1;
            }else{
                long long int res = (x1 - x2)/2;
                if(res > 0){
                return res;
                }else{
                    return -1;
                }
            }
        }
        if(c2 == 'N'){
            long long int a = x1 - x2;
            long long int b = y2 - y1;
            if(a == b and a > 0){
                return a;
            }else{
                return -1;
            }
        }
        if(c2 == 'S'){
            long long int a = x1 - x2;
            long long int b = y1 - y2;
            if(a == b and a > 0){
                return a;
            }else{
                return -1;
            }
        }
    }
    if(c1 == 'N'){
        if(x1 != x2){
            return -1;
        }
        long long int res = (y1 - y2) / 2;
        if(res > 0){
            return res;
        }
    }
    if(c1 == 'S'){
        if(x1 != x2){
            return -1;
        }
        long long int res = (y2 - y1) / 2;
        if(res > 0){
            return res;
        }
    }
    return -1;
}
int main(){
    int n;
    cin >> n;
    if(n > 5000){
    long long int x[n],y[n];
    char c[n];
    int pos[n];
    vector<tuple<int,int,int>>v;
    for(int i = 0; i < n; i++){
        cin >> x[i] >> y[i] >> c[i];
        v.push_back({x[i]+y[i], x[i], i});
        pos[i] = 0;
    }
    sort(v.begin(),v.end());
    int br = 0;
    for(int i = 0; i < v.size(); i++){
        long long int a = get<0>(v[i]);
        int index = get<2>(v[i]);
        if(i == 0){
            if(c[index] == 'E'){
                br++;
            }
        }else{
            long long int b = get<0>(v[i - 1]);
            if(a != b){
                br = 0;
            }
            if(c[index] == 'E'){
                br++;
            }else{
                if(br > 0){
                    pos[index] = 1;
                    br--;
                }
            }
        }
    }
    br = 0;
    int ro = v.size();
     for(int i = ro - 1; i >= 0; i--){
        long long int a = get<0>(v[i]);
        int index = get<2>(v[i]);
        if(i == (ro - 1)){
            if(c[index] == 'S'){
                br++;
            }
        }else{
            long long int b = get<0>(v[i + 1]);
            if(a != b){
                br = 0;
            }
            if(c[index] == 'S'){
                br++;
            }else{
                if(br > 0){
                    pos[index] = 1;
                   
                    br--;
                }
            }
        }
    }
    for(int i = 0; i < n; i++){
        if(pos[i] == 0){
            cout << i + 1 <<endl;
        }
    }
    }else{
       

    long long int x[n],y[n];
    long long int disa[n];
    char c[n];
   // cout << check(2,4,'E',4,2,'S');
    long long int INF = 1e18;
    for(int i = 0; i < n; i++){
        cin >> x[i] >> y[i] >> c[i];
        disa[i] = 1e18;
    }

    vector<pair<long long int,pair<int,int> > > v;
    for(int i = 0; i < n; i++){
        for(int j = i + 1; j < n; j++){
            long long int res =check(x[i],y[i],c[i],x[j],y[j],c[j]);
            //cout << res << endl;
            if(res != -1){
                v.push_back({res,{i,j}});
            }
        }
    }
    sort(v.begin(), v.end());
    for(int i = 0; i < v.size(); i++){
        pair<int,int> x = v[i].second;
        int x1 = x.first;
        int x2 = x.second;
        if(disa[x1] >= v[i].first and disa[x2] >= v[i].first){
            disa[x1] = v[i].first;
            disa[x2] = v[i].first;
        }
    }
    for(int i = 0; i < n; i++){
        if(disa[i] == INF){
            cout << i + 1 << endl;
        }
    }


}
    
    
    
}

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:114:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::tuple<int, int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  114 |     for(int i = 0; i < v.size(); i++){
      |                    ~~^~~~~~~~~~
Main.cpp:190:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, std::pair<int, int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  190 |     for(int i = 0; i < v.size(); i++){
      |                    ~~^~~~~~~~~~
#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...