Submission #1246452

#TimeUsernameProblemLanguageResultExecution timeMemory
1246452alexaaaNile (IOI24_nile)C++20
0 / 100
30 ms5040 KiB
#include<iostream>
#include<vector>
#include<algorithm>
#include<numeric>
#include "nile.h"

using namespace std;


std::vector<long long> calculate_costs(
std::vector<int> W, std::vector<int> A,
std::vector<int> B, std::vector<int> E){
    vector<long long> answer;
    vector<int> extra_cost;
    vector<int> s_w;
    vector<int> s_A;
    vector<int> s_B;
    vector<int> ec_i(W.size());
    bool one_d_c = false;
    iota(ec_i.begin(),ec_i.end(),0);
    
    for(int i = 0; i < W.size(); i++){
        extra_cost.push_back(A[i]-B[i]);
        if(A[i]-B[i] == 1){
            one_d_c = true;
        }
        else{
            one_d_c = false;
        }
        s_w.push_back(W[i]);
        s_A.push_back(A[i]);
        s_B.push_back(B[i]);

    }
    sort(s_w.begin(),s_w.end());
    sort(s_A.begin(),s_A.end(),[&](int i,int j){
        if(W[i] == W[j]){
            return i < j;
        }
        else{
            return W[i] < W[j];
        }
    });
    sort(s_B.begin(),s_B.end(),[&](int i,int j){
        if(W[i] == W[j]){
            return i < j;
        }
        else{
            return W[i] < W[j];
        }
    });
    sort(ec_i.begin(),ec_i.end(),[&](int i, int j){
        if(extra_cost[i] == extra_cost[j]){
            return i<j;
        }
        else{
            return extra_cost[i] < extra_cost[j];
        }
    });
    for(int i = 0; i < E.size(); i++){
        int D = E[i];
        long long cost = 0;
        if(one_d_c){
            vector<int> alone;
            for(int p = 0; p < W.size(); p++){
                if(abs(s_w[p] - s_w[p+1])<= D){
                    cost+=B[p];

                }
                else{
                    alone.push_back(p);
                }
            }
            for(int h = 0; h < alone.size(); h++){
                cost += A[alone[h]];

            }
            answer.push_back(cost);


        }
        else{
            if(W.size()%2 == 0){
                for(int j = 0;j < W.size(); j++){
                    cost+=B[j];
                }
                answer.push_back(cost);
            }
            else{
                int skip;
                if(W[0] == 1 && W[1] == 1){
                    skip = ec_i[0];
                    for(int m = 0; m < W.size(); m++){
                        if(m == skip){
                            continue;
                        }
                        cost += B[m];
                    }
                    cost += A[skip];
                    answer.push_back(cost);

                }
                else if(D>= 2){
                    skip = ec_i[0];
                    for(int k = 0; k < W.size(); k++){
                        if(k == skip){
                            continue;
                        }
                        cost += B[k];
                    }
                    cost += A[skip];
                    answer.push_back(cost);
                    

                }
                
                else{
                    for(int e = 0; e < W.size();e++){
                        if(ec_i[e]%2 == 0){
                            skip = ec_i[e];
                            break;
                        }
                    }
                    
                    
                    for(int l = 0; l < W.size(); l++){
                        if(l == skip){
                            continue;
                        }
                        cost += B[l];
                    }
                    cost += A[skip];
                    answer.push_back(cost);

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