제출 #1347323

#제출 시각아이디문제언어결과실행 시간메모리
1347323sdkjflkjsldkfj나일강 (IOI24_nile)C++20
0 / 100
13 ms2608 KiB
#include<bits/stdc++.h>
using namespace std;

typedef long long int ll;

vector<ll> calculate_costs(vector<int>w,vector<int>a,vector<int>b,vector<int>e){
    //subtask 2
    /*
    sum = sum of b[i] over all indexes
    case 1: 2|n -> return sum
    case 2:
        find the minimum a[i]-b[i], denote as mn
        case 2.1: if mn=0 or mn=n-1, return sum + a[mn]- b[mn]
        case 2.2: if mn!=0 and mn!=n-1:
            case 2.2.1: e[i]!=1 for the current i:
                return sum + a[mn] - b[mn]
            case 2.2.2:  e[i]=1 for the current i:
                mn = 0 if a[0]-b[0]<=a[n-1]-b[n-1]
                mn = n-1 otherwise
                return answer for case 2.1 with  the  new mn
    */
    ll sum=0;
    int n=w.size();
    int q=e.size();
    for(int i=0;i<n;i++) sum+=b[i];
    if(n%2==0){
        vector<ll> ans(q,sum);
        return ans;
    }
    int mn=0;
    for(int i=0;i<n;i++) if(a[mn]-b[mn]>a[i]-b[i]) mn=i;
    if(mn==0||mn==n-1){
        sum-=b[mn];
        sum+=a[mn];
        vector<ll>ans(q,sum);
        return ans;
    }
    vector<ll>ans(q);
    for(int i=0;i<q;i++){
        if(e[i]!=1) ans[i]=sum+a[mn]-b[mn];
        else{
            int mn_2;
            if(a[0]-b[0]<=a[n-1]-b[n-1]) mn_2=0;
            else mn_2=n-1;
            ans[i]=sum+a[mn_2]-b[mn_2];
        }
    }
    return ans;
}
#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...