Submission #470125

#TimeUsernameProblemLanguageResultExecution timeMemory
470125Cross_RatioBoxes with souvenirs (IOI15_boxes)C++14
20 / 100
1 ms332 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; int pt1 = cnt1 - 1; int pt2 = cnt2 - 1; for(int ct = 0; ct < cnt1 + cnt2; ct++) { long long int c = cnt1 - pt1 + cnt2 - pt2 - 2; long long ans2 = C[pt1] + D[pt2] + (c - 1 + K) / K * L; assert(ans2 >= 0); ans = min(ans, ans2); if(pt1 == 0 ||(pt2 != 0 && C[pt1] - C[pt1-1] < D[pt2]-D[pt2-1])) pt2--; else pt1--; } /*for(i=0;i<cnt1;i++) { for(j=0;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; }

Compilation message (stderr)

boxes.cpp: In function 'long long int delivery(int, int, int, int*)':
boxes.cpp:36:20: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   36 |     int pt1 = cnt1 - 1;
      |               ~~~~~^~~
boxes.cpp:37:20: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   37 |     int pt2 = cnt2 - 1;
      |               ~~~~~^~~
boxes.cpp:12:12: warning: unused variable 'j' [-Wunused-variable]
   12 |     int i, 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...