제출 #1140187

#제출 시각아이디문제언어결과실행 시간메모리
1140187andrei_hqSwimming competition (LMIO18_plaukimo_varzybos)C++20
0 / 100
0 ms324 KiB
#include <stdio.h>
#include <algorithm>

#define MAXN 1000000
#define MAXVAL 1000000

using namespace std;

int times[MAXN], groups[MAXN];
int n, a, b;

bool check(int val){
    int cnt=0, prim_elem, i=0, j=0, flag=1, ultim_poz;
    while(i<n&&flag==1){
        if(cnt==0){
            cnt++;
            prim_elem=times[i];
        }
        else{
            if(times[i]-prim_elem<=val){
                cnt++;
                if(cnt==a){
                    groups[j++]=a;
                    cnt=0;
                }
            }
            else{
                if(j==0){
                    flag=0;
                }
                else{
                    while(times[i]-times[i-cnt]>val){
                        groups[j-1]++;
                        cnt--;
                    }
                    prim_elem=times[i-cnt];
                    cnt++;
                }
            }
        }
        i++;
    }
    if(flag==1){
        if(cnt>0){
            groups[j-1]+=cnt;
        }
        j--;
        cnt=0;
        while(j>0&&flag==1){
            ultim_poz=n-1-cnt;
            cnt++;
            while(times[ultim_poz]-times[n-1-cnt]<=val&&groups[j]>0&&ultim_poz-(n-1-cnt)+1<=b){
                groups[j]--;
                cnt++;
            }
            if(ultim_poz-(n-1-cnt)<a){
                flag=0;
            }
            groups[j-1]+=groups[j];
            j--;
        }
        if(flag==1&&(groups[0]>b||times[n-1-cnt]-times[0]>val)){
            flag=0;
        }
    }
    return flag;
}

int cautbin(){
    int st=-1, dr=MAXVAL;
    while(dr-st>1){
        int mij=(st+dr)/2;
        if(check(mij)){
            dr=mij;
        }
        else{
            st=mij;
        }
    }
    return dr;
}

int main()
{
    int i;
    scanf("%d%d%d", &n, &a, &b);
    for(i=0;i<n;i++){
        scanf("%d", &times[i]);
    }
    sort(times, times+n);
    printf("%d", cautbin());
    return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

plaukimo_varzybos.cpp: In function 'int main()':
plaukimo_varzybos.cpp:86:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   86 |     scanf("%d%d%d", &n, &a, &b);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~~~~
plaukimo_varzybos.cpp:88:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   88 |         scanf("%d", &times[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...