제출 #780220

#제출 시각아이디문제언어결과실행 시간메모리
780220vjudge1선물상자 (IOI15_boxes)C++17
10 / 100
1 ms340 KiB
#include "boxes.h" #include <stdio.h> #include <stdlib.h> #include <bits/stdc++.h> using namespace std; void f(){ freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); } long long calc(int k, int l, vector<array<long long, 2>> s, vector<array<long long, 2>> t){ long long ans = 0; reverse(s.begin(), s.end()); reverse(t.begin(), t.end()); long long p=0; for(int i=0; i<s.size(); i++){ long long f=min(p, s[i][1]); p-=f; s[i][1]-=f; ans+=(s[i][1]+k-1)/k*s[i][0]; p+=((s[i][1]+k-1)/k)*k; f=min(p, s[i][1]); p-=f; s[i][1]-=f; } p=0; for(int i=0; i<t.size(); i++){ long long f=min(p, t[i][1]); p-=f; t[i][1]-=f; ans+=(t[i][1]+k-1)/k*(l-t[i][0]); p+=((t[i][1]+k-1)/k)*k; f=min(p, t[i][1]); p-=f; t[i][1]-=f; } return ans*2; } long long int d(int n, int k, int l, vector<array<long long, 2>> a){ if(!a.size()) return 0; if(l%2==0){ int n=a.size(); vector<array<long long, 2>> s, t; for(int i=0; i<n; i++){ if(a[i][0]<=l/2) s.push_back(a[i]); else t.push_back(a[i]); } int sum=0; for(auto i: s){ sum+=i[1]; } reverse(t.begin(), t.end()); long long ans=1e18; ans=calc(k, l, s, t); if(sum%k){ long long f=sum%k; long long pf=k-f; for(int i = s.size()-1; i>=0; i--){ int pff=min(pf, s[i][1]); s[i][1]-=pff; pf-=pff; } while(s.size()&&s.back()[1]==0) s.pop_back(); for(int i = t.size()-1; i>=0; i--){ int pf=min(f, t[i][1]); t[i][1]-=pf; f-=pf; } while(t.size()&&t.back()[1]==0) t.pop_back(); ans=min(ans, calc(k, l, s, t)+l); } return ans; } else{ int n=a.size(); vector<array<long long, 2>> s, t; for(int i=0; i<n; i++){ if(a[i][0]<=l/2) s.push_back(a[i]); else t.push_back(a[i]); } int sum=0; for(auto i: s){ sum+=i[1]; } reverse(t.begin(), t.end()); long long ans=1e18; ans=calc(k, l, s, t); if(sum%k){ long long f=sum%k; long long pf=k-f; for(int i = s.size()-1; i>=0; i--){ int pff=min(pf, s[i][1]); s[i][1]-=pff; pf-=pff; } while(s.size()&&s.back()[1]==0) s.pop_back(); for(int i = t.size()-1; i>=0; i--){ int pf=min(f, t[i][1]); t[i][1]-=pf; f-=pf; } while(t.size()&&t.back()[1]==0) t.pop_back(); ans=min(ans, calc(k, l, s, t)+l); } s.clear(), t.clear(); for(int i=0; i<n; i++){ if(a[i][0]<l/2) s.push_back(a[i]); else t.push_back(a[i]); } sum=0; for(auto i: s){ sum+=i[1]; } reverse(t.begin(), t.end()); ans=min(ans, calc(k, l, s, t)); if(sum%k){ long long f=sum%k; long long pf=k-f; for(int i = s.size()-1; i>=0; i--){ int pff=min(pf, s[i][1]); s[i][1]-=pff; pf-=pff; } while(s.size()&&s.back()[1]==0) s.pop_back(); for(int i = t.size()-1; i>=0; i--){ int pf=min(f, t[i][1]); t[i][1]-=pf; f-=pf; } while(t.size()&&t.back()[1]==0) t.pop_back(); ans=min(ans, calc(k, l, s, t)+l); } return ans; } return 0; } long long delivery(int n, int k, int l, int p[]) { vector<int> a(n); for(int i=0; i<n; i++) a[i]=p[i]; sort(a.begin(), a.end()); int kk=1; vector<array<long long, 2>> b; for(int i=1; i<n; i++){ if(a[i]==a[i-1]) kk++; else{ if(a[i-1]!=0) b.push_back({a[i-1], kk}); kk=1; } } if(a[n-1]!=0) b.push_back({a[n-1], kk}); long long ans=d(n, k, l, b); reverse(b.begin(), b.end()); for(auto &i: b) i[0]=l-i[0]; // ans=min(ans, d(n, k, l, b)); return ans; return 0; } /* int main() { f(); int N, K, L, i; cin >> N >> K >> L; int *p = (int*)malloc(sizeof(int) * (unsigned int)N); for (i = 0; i < N; i++) { cin >> p[i]; } cout<<delivery(N, K, L, p); return 0; }*/

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

boxes.cpp: In function 'long long int calc(int, int, std::vector<std::array<long long int, 2> >, std::vector<std::array<long long int, 2> >)':
boxes.cpp:22:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::array<long long int, 2> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   22 |     for(int i=0; i<s.size(); i++){
      |                  ~^~~~~~~~~
boxes.cpp:35:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::array<long long int, 2> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |     for(int i=0; i<t.size(); i++){
      |                  ~^~~~~~~~~
boxes.cpp: In function 'long long int d(int, int, int, std::vector<std::array<long long int, 2> >)':
boxes.cpp:56:12: warning: declaration of 'int n' shadows a parameter [-Wshadow]
   56 |        int n=a.size();
      |            ^
boxes.cpp:52:21: note: shadowed declaration is here
   52 | long long int d(int n, int k, int l, vector<array<long long, 2>> a){
      |                 ~~~~^
boxes.cpp:56:20: warning: conversion from 'std::vector<std::array<long long int, 2> >::size_type' {aka 'long unsigned int'} to 'int' may change value [-Wconversion]
   56 |        int n=a.size();
      |              ~~~~~~^~
boxes.cpp:66:21: warning: conversion from 'std::array<long long int, 2>::value_type' {aka 'long long int'} to 'int' may change value [-Wconversion]
   66 |             sum+=i[1];
      |                     ^
boxes.cpp:78:33: warning: conversion from 'std::vector<std::array<long long int, 2> >::size_type' {aka 'long unsigned int'} to 'int' may change value [-Wconversion]
   78 |             for(int i = s.size()-1; i>=0; i--){
      |                         ~~~~~~~~^~
boxes.cpp:79:27: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   79 |                int pff=min(pf, s[i][1]);
      |                        ~~~^~~~~~~~~~~~~
boxes.cpp:86:33: warning: conversion from 'std::vector<std::array<long long int, 2> >::size_type' {aka 'long unsigned int'} to 'int' may change value [-Wconversion]
   86 |             for(int i = t.size()-1; i>=0; i--){
      |                         ~~~~~~~~^~
boxes.cpp:87:21: warning: declaration of 'pf' shadows a previous local [-Wshadow]
   87 |                 int pf=min(f, t[i][1]);
      |                     ^~
boxes.cpp:76:23: note: shadowed declaration is here
   76 |             long long pf=k-f;
      |                       ^~
boxes.cpp:87:27: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   87 |                 int pf=min(f, t[i][1]);
      |                        ~~~^~~~~~~~~~~~
boxes.cpp:101:13: warning: declaration of 'int n' shadows a parameter [-Wshadow]
  101 |         int n=a.size();
      |             ^
boxes.cpp:52:21: note: shadowed declaration is here
   52 | long long int d(int n, int k, int l, vector<array<long long, 2>> a){
      |                 ~~~~^
boxes.cpp:101:21: warning: conversion from 'std::vector<std::array<long long int, 2> >::size_type' {aka 'long unsigned int'} to 'int' may change value [-Wconversion]
  101 |         int n=a.size();
      |               ~~~~~~^~
boxes.cpp:110:21: warning: conversion from 'std::array<long long int, 2>::value_type' {aka 'long long int'} to 'int' may change value [-Wconversion]
  110 |             sum+=i[1];
      |                     ^
boxes.cpp:123:33: warning: conversion from 'std::vector<std::array<long long int, 2> >::size_type' {aka 'long unsigned int'} to 'int' may change value [-Wconversion]
  123 |             for(int i = s.size()-1; i>=0; i--){
      |                         ~~~~~~~~^~
boxes.cpp:124:27: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  124 |                int pff=min(pf, s[i][1]);
      |                        ~~~^~~~~~~~~~~~~
boxes.cpp:131:33: warning: conversion from 'std::vector<std::array<long long int, 2> >::size_type' {aka 'long unsigned int'} to 'int' may change value [-Wconversion]
  131 |             for(int i = t.size()-1; i>=0; i--){
      |                         ~~~~~~~~^~
boxes.cpp:132:21: warning: declaration of 'pf' shadows a previous local [-Wshadow]
  132 |                 int pf=min(f, t[i][1]);
      |                     ^~
boxes.cpp:121:23: note: shadowed declaration is here
  121 |             long long pf=k-f;
      |                       ^~
boxes.cpp:132:27: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  132 |                 int pf=min(f, t[i][1]);
      |                        ~~~^~~~~~~~~~~~
boxes.cpp:152:21: warning: conversion from 'std::array<long long int, 2>::value_type' {aka 'long long int'} to 'int' may change value [-Wconversion]
  152 |             sum+=i[1];
      |                     ^
boxes.cpp:164:33: warning: conversion from 'std::vector<std::array<long long int, 2> >::size_type' {aka 'long unsigned int'} to 'int' may change value [-Wconversion]
  164 |             for(int i = s.size()-1; i>=0; i--){
      |                         ~~~~~~~~^~
boxes.cpp:165:27: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  165 |                int pff=min(pf, s[i][1]);
      |                        ~~~^~~~~~~~~~~~~
boxes.cpp:172:33: warning: conversion from 'std::vector<std::array<long long int, 2> >::size_type' {aka 'long unsigned int'} to 'int' may change value [-Wconversion]
  172 |             for(int i = t.size()-1; i>=0; i--){
      |                         ~~~~~~~~^~
boxes.cpp:173:21: warning: declaration of 'pf' shadows a previous local [-Wshadow]
  173 |                 int pf=min(f, t[i][1]);
      |                     ^~
boxes.cpp:162:23: note: shadowed declaration is here
  162 |             long long pf=k-f;
      |                       ^~
boxes.cpp:173:27: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
  173 |                 int pf=min(f, t[i][1]);
      |                        ~~~^~~~~~~~~~~~
boxes.cpp:52:21: warning: unused parameter 'n' [-Wunused-parameter]
   52 | long long int d(int n, int k, int l, vector<array<long long, 2>> a){
      |                 ~~~~^
boxes.cpp: In function 'void f()':
boxes.cpp:9:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    9 |     freopen("in.txt", "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
boxes.cpp:10:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   10 |     freopen("out.txt", "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
#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...