제출 #287249

#제출 시각아이디문제언어결과실행 시간메모리
287249Saboon선물상자 (IOI15_boxes)C++17
35 / 100
1 ms384 KiB
#include "boxes.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 1e7 + 10; const ll inf = 1e18; int n, k, L, a, b, A[maxn], B[maxn]; ll dp[maxn], pd[maxn], DP[maxn], opt[maxn]; void calc(int l, int r, int lo, int hi){ if (l >= r) return; int m = (l+r) >> 1; DP[m] = inf; for (ll i = lo; i < hi; i++){ int cnt = n-m-i; int j = max(0ll, i - (k-(cnt%k))%k); cnt = (cnt+k-1)/k; ll x = 1LL*cnt*L + dp[m] + pd[j]; if (make_pair(x,i) < make_pair(DP[m],opt[m])) DP[m] = x, opt[m] = i; cnt = n-m-i; if (i + cnt%k <= b){ j = i+(cnt%k); cnt -= cnt%k; cnt = cnt/k; x = 1LL*cnt*L + dp[m] + pd[j]; if (make_pair(x,i) < make_pair(DP[m],opt[m])) DP[m] = x, opt[m] = i; } } calc(l, m, lo, opt[m]+1); calc(m+1, r, opt[m], hi); } ll delivery(int N, int K, int LL, int p[]){ n = N, k = K, L = LL; for (int i = 0; i < n; i++){ if (p[i] <= L/2) A[++a] = p[i]; else B[++b] = L-p[i]; } sort(A+1,A+a+1); sort(B+1,B+b+1); for (int i = 1; i <= a; i++){ if (i <= k) dp[i] = 2LL*A[i]; else dp[i] = dp[i-k] + 2LL*A[i]; } for (int i = 1; i <= b; i++){ if (i <= k) pd[i] = 2LL*B[i]; else pd[i] = pd[i-k] + 2LL*B[i]; } calc(0, a+1, 0, b+1); return *min_element(DP, DP+a+1); }

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

boxes.cpp: In function 'void calc(int, int, int, int)':
boxes.cpp:16:16: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
   16 |   int cnt = n-m-i;
      |             ~~~^~
boxes.cpp:17:14: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   17 |   int j = max(0ll, i - (k-(cnt%k))%k);
      |           ~~~^~~~~~~~~~~~~~~~~~~~~~~~
boxes.cpp:23:12: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
   23 |   cnt = n-m-i;
      |         ~~~^~
boxes.cpp:25:9: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
   25 |    j = i+(cnt%k);
      |        ~^~~~~~~~
boxes.cpp:33:23: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
   33 |  calc(l, m, lo, opt[m]+1);
      |                 ~~~~~~^~
boxes.cpp:34:20: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
   34 |  calc(m+1, r, opt[m], hi);
      |               ~~~~~^
#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...