제출 #470128

#제출 시각아이디문제언어결과실행 시간메모리
470128Cross_Ratio선물상자 (IOI15_boxes)C++14
100 / 100
534 ms214704 KiB
#include <bits/stdc++.h>
using namespace std;
#include "boxes.h"
const long long int INF = 1e18;
long long int A[50000006];
long long int B[50000006];
long long int cnt1 = 1, cnt2 = 1;
long long int C[50000006];
long long int D[50000006];
long long N, K, L;
long long delivery(int N1, int K1, int L1, int* P) {
    int i, j;
    N = N1;
    K = K1;
    L = L1;
    for(i=0;i<N;i++) {
        if(P[i] <= L/2) {
            A[cnt1++] = P[i];
        }
        else B[cnt2++] = L - P[i];
    }
    reverse(B + 1, B + cnt2);
    for(i=0;i<cnt1;i++) {
        if(!i) C[i] = 0;
        else if(i < K) C[i] = 2 * A[i];
        else C[i] = C[i-K] + 2*A[i];
    }
    for(i=0;i<cnt2;i++) {
        if(!i) D[i] = 0;
        else if(i < K) D[i] = 2 * B[i];
        else D[i] = D[i-K] + 2*B[i];
    }
    //for(i=0;i<cnt1;i++) cout << A[i] <<' ' << C[i] << '\n';
    //for(i=0;i<cnt2;i++) cout << B[i] << ' ' << D[i] << '\n';
    long long int ans = INF;
    ans = C[cnt1-1] + D[cnt2-1];
    for(i=max(cnt1-1-K,0LL);i<cnt1;i++) {
        j = max(0LL, cnt2 - K - 1+ (cnt1 - 1 - i) );
        long long int c = cnt1 - i + cnt2 - j - 2;
        long long ans2 = C[i] + D[j] + (c - 1 + K) / K * L;
        assert(ans2 >= 0);
        ans = min(ans, ans2);
    }
    for(i=max(cnt1-1-2*K,0LL);i<cnt1;i++) {
        j = max(0LL, cnt2 - 2*K - 1+ (cnt1 - 1 - i) );
        long long int c = cnt1 - i + cnt2 - j - 2;
        long long ans2 = C[i] + D[j] + (c - 1 + K) / K * L;
        assert(ans2 >= 0);
        ans = min(ans, ans2);
    }
    return ans;
    for(i=max(cnt1-1-K,0LL);i<cnt1;i++) {
        for(j=max(cnt2-1-K,0LL);j<cnt2;j++) {
            long long int c = cnt1 - i + cnt2 - j - 2;
            long long ans2 = C[i] + D[j] + (c - 1 + K) / K * L;
            assert(ans2 >= 0);
            ans = min(ans, ans2);
        }
    }
    return ans;
}

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

boxes.cpp: In function 'long long int delivery(int, int, int, int*)':
boxes.cpp:37:14: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   37 |     for(i=max(cnt1-1-K,0LL);i<cnt1;i++) {
      |           ~~~^~~~~~~~~~~~~~
boxes.cpp:38:16: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   38 |         j = max(0LL, cnt2 - K - 1+ (cnt1 - 1 - i) );
      |             ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
boxes.cpp:44:14: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   44 |     for(i=max(cnt1-1-2*K,0LL);i<cnt1;i++) {
      |           ~~~^~~~~~~~~~~~~~~~
boxes.cpp:45:16: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   45 |         j = max(0LL, cnt2 - 2*K - 1+ (cnt1 - 1 - i) );
      |             ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
boxes.cpp:52:14: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   52 |     for(i=max(cnt1-1-K,0LL);i<cnt1;i++) {
      |           ~~~^~~~~~~~~~~~~~
boxes.cpp:53:18: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   53 |         for(j=max(cnt2-1-K,0LL);j<cnt2;j++) {
      |               ~~~^~~~~~~~~~~~~~
#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...