제출 #1333734

#제출 시각아이디문제언어결과실행 시간메모리
1333734yc11IMO (EGOI25_imo)C++20
0 / 100
1 ms344 KiB
#include<bits/stdc++.h>
#define int long long
using namespace std;


signed main(){
    int n,m,q;
    cin>>n>>m>>q;
    int sum1 = 0;
    int sum2 = 0;
    bool hi = true;
    vector<int> n1;
    vector<int> n2;
    n1.resize(m);
    n2.resize(m);
    for (int i = 0;i<m;i++){
        cin>>n1[i];
        sum1+=n1[i];
    }
    for (int i = 0;i<m;i++){
        cin>>n2[i];
        sum2+=n2[i];
    }
    if (sum1<sum2) {hi = false;swap(n1,n2);swap(sum1,sum2);}
    sort(n1.begin(),n1.end());
    sort(n2.begin(),n2.end());
    vector<int> m1;
    vector<int> m2;
    m1.resize(m);
    int sum3 = sum1;
    for (int i = 0;i<m;i++){
        m1[i] = sum1-n1[i];
        sum1 = sum1-n1[i];
    }
    m2.resize(m);
    for (int i = 0;i<m;i++){
        if (i==0) m2[0] = sum2-n2[m-i-1]+q;
        else m2[i] = m2[i-1]-n2[m-i-1]+q;

     

    }
    int ans = 0;


    for (int i = 0;i<m;i++){
        int a;
        if (hi)  a = upper_bound(m2.begin(),m2.end(),m1[i])-m2.begin();
        else a = lower_bound(m2.begin(),m2.end(),m1[i])-m2.begin();
  
        if (!(a==0 and m1[i]==0))ans = max(ans,i+1+a);
    }
    if (hi) {
        int a =upper_bound(m2.begin(),m2.end(),sum3)-m2.begin();
         ans = max(ans,a);}
    else {
        int a = lower_bound(m2.begin(),m2.end(),sum3)-m2.begin();
    if (a!=0 and m2[a--]>sum3)ans = max(ans,a);
    }
    cout<<2*m-ans;

    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...