Submission #356475

# Submission time Handle Problem Language Result Execution time Memory
356475 2021-01-23T12:10:40 Z urd05 Boxes with souvenirs (IOI15_boxes) C++14
Compilation error
0 ms 0 KB
#include "boxes.h"
#include <bits/stdc++.h>
using namespace std;

long long osum[10000001];
long long tsum[10000001];

long long delivery(int n,int k,long long l,int p[]) {
    long long ret=1LL*((n-1)/k+1)*l;
    vector<int> one;
    vector<int> two;
    one.push_back(0);
    two.push_back(0);
    for(int i=0;i<n;i++) {
        if (p[i]==0) {
            continue;
        }
        if (p[i]<=l/2) {
            one.push_back(p[i]);
        }
        else {
            two.push_back(l-p[i]);
        }
    }
    n=one.size()+two.size();
    int aind=0;
    int bind=0;
    for(int i=1;i<one.size();i++) {
        if (i>=k) {
            osum[i]=osum[i-k]+one[i];
        }
        else {
            osum[i]=one[i];
        }
    }
    for(int i=1;i<two.size();i++) {
        if (i>=k) {
            tsum[i]=tsum[i-k]+two[i];
        }
        else {
            tsum[i]=two[i];
        }
    }
    int pos=-1;
    long long mini=1e18;
    for(int i=0;i<=n%k;i++) {
        if (i<one.size()&&n%k-i<two.size()&&osum[i]+tsum[n%k-i]<mini) {
            mini=osum[i]+tsum[n%k-i];
            pos=i;
        }
    }
    aind=i;
    bind=n%k-i;
    ret=min(ret,mini+(n/k)*l);
    for(int cnt=n/k-1;cnt>=0;cnt--) {
        long long mini=1e18;
        int pos=-1;
        for(int i=0;i<=k;i++) {
            if (aind+i<one.size()&&bind+k-i<two.size()&&osum[aind+i]+tsum[bind+k-i]<mini) {
                mini=osum[aind+i]+tsum[bind+k-i];
                pos=i;
            }
        }
        aind+=pos;
        bind+=k-pos;
        ret=min(ret,mini+cnt*l);
    }
    return ret;
}

Compilation message

boxes.cpp: In function 'long long int delivery(int, int, long long int, int*)':
boxes.cpp:22:28: warning: conversion from 'long long int' to 'std::vector<int>::value_type' {aka 'int'} may change value [-Wconversion]
   22 |             two.push_back(l-p[i]);
      |                           ~^~~~~
boxes.cpp:25:17: warning: conversion from 'std::vector<int>::size_type' {aka 'long unsigned int'} to 'int' may change value [-Wconversion]
   25 |     n=one.size()+two.size();
      |       ~~~~~~~~~~^~~~~~~~~~~
boxes.cpp:28:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   28 |     for(int i=1;i<one.size();i++) {
      |                 ~^~~~~~~~~~~
boxes.cpp:36:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   36 |     for(int i=1;i<two.size();i++) {
      |                 ~^~~~~~~~~~~
boxes.cpp:47:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   47 |         if (i<one.size()&&n%k-i<two.size()&&osum[i]+tsum[n%k-i]<mini) {
      |             ~^~~~~~~~~~~
boxes.cpp:47:32: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   47 |         if (i<one.size()&&n%k-i<two.size()&&osum[i]+tsum[n%k-i]<mini) {
      |                           ~~~~~^~~~~~~~~~~
boxes.cpp:52:10: error: 'i' was not declared in this scope
   52 |     aind=i;
      |          ^
boxes.cpp:56:19: warning: declaration of 'mini' shadows a previous local [-Wshadow]
   56 |         long long mini=1e18;
      |                   ^~~~
boxes.cpp:45:15: note: shadowed declaration is here
   45 |     long long mini=1e18;
      |               ^~~~
boxes.cpp:57:13: warning: declaration of 'pos' shadows a previous local [-Wshadow]
   57 |         int pos=-1;
      |             ^~~
boxes.cpp:44:9: note: shadowed declaration is here
   44 |     int pos=-1;
      |         ^~~
boxes.cpp:58:17: warning: declaration of 'i' shadows a previous local [-Wshadow]
   58 |         for(int i=0;i<=k;i++) {
      |                 ^
boxes.cpp:52:10: note: shadowed declaration is here
   52 |     aind=i;
      |          ^
boxes.cpp:59:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |             if (aind+i<one.size()&&bind+k-i<two.size()&&osum[aind+i]+tsum[bind+k-i]<mini) {
      |                 ~~~~~~^~~~~~~~~~~
boxes.cpp:59:44: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |             if (aind+i<one.size()&&bind+k-i<two.size()&&osum[aind+i]+tsum[bind+k-i]<mini) {
      |                                    ~~~~~~~~^~~~~~~~~~~