Submission #67904

# Submission time Handle Problem Language Result Execution time Memory
67904 2018-08-15T12:57:50 Z theknife2001 Boxes with souvenirs (IOI15_boxes) C++17
10 / 100
3 ms 376 KB
#include "boxes.h"
//#include "grader.cpp"
#include <bits/stdc++.h>
#define mid (l+r)/2


using namespace std;
const int N=1e7+55;
long long tree[N*4][2];
long long dp[N][2];
int n;

void build(int l , int r , int node)
{

    if(l==r)
    {
        tree[node][0]=1e9+55;
        tree[node][1]=1e9+55;
        return ;
    }
    build(l,mid,node*2);
    build(mid+1,r,node*2+1);
    tree[node][0]=1e9+55;
    tree[node][1]=1e9+55;
}

void update(int l , int r , int node, int ind , int val , int q)
{
    if(l==r&&l==ind)
    {
        tree[node][q]=val;
        return ;
    }
    if(ind<=mid)
        update(l,mid,node*2,ind,val,q);
    else
        update(mid+1,r,node*2+1,ind,val,q);
    tree[node][q]=min(tree[node*2][q],tree[node*2+1][q]);
}

long long query(int l , int r , int node , int x , int y , int q)
{
    if(l>y||r<x)
        return 1e9+55;
    if(x<=l&&r<=y)
        return tree[node][q];
    return min(query(l,mid,node*2,x,y,q),query(mid+1,r,node*2+1,x,y,q));
}


long long delivery(int N, int k, int L, int p[])
{
    n=N;
    build(0,n-1,1);
    int j=0;
    for(;j<n;j++)
        if(p[j])
            break;
    if(j==n)
        return 0;
    int x=k;
    j=0;
    for(int i=0;i<n;i++)
    {
        while(p[i]==0)
        {
            i++;
            j++;
        }
        if(i-j>=x)
        {
            dp[i][0]=query(0,n-1,1,i-x,i,0)+p[i]+min(p[i],L-p[i]);
//            cout<<i<<' '<<dp[i][0]<<endl;
        }
        else
        {
            dp[i][0]=p[i]+min(p[i],L-p[i]);
//            cout<<i<<' '<<dp[i][0]<<endl;
        }
        update(0,n-1,1,i,dp[i][0],0);
    }
    for(int i=n-1;i>=0;i--)
    {
        if(p[i]==0)
            break;
        if(i+x<n)
        {
            dp[i][1]=query(0,n-1,1,i,i+x,1)+(L-p[i])+min(p[i],L-p[i]);

        }
        else
        {
            dp[i][1]=L-p[i]+min(p[i],L-p[i]);
        }
        update(0,n-1,1,i,dp[i][1],1);
    }
    int i=0;
    while(p[i]==0)
        i++;
//    cout<<i<<endl;
    long long ans=dp[i][1];
//    cerr<<ans<<endl;
    for(;i<n;i++)
    {
        ans=min(dp[i][0]+(i+1<n?dp[i+1][1]:0),ans);
//        cerr<<i<<' '<<dp[i][0]+(i+1<n?dp[i+1][1]:0)<<endl;
    }
    return ans;
}
/*
10 5 100
1 5 20 35 41 42 55 56 57 58
*/

Compilation message

boxes.cpp: In function 'long long int delivery(int, int, int, int*)':
boxes.cpp:52:48: warning: declaration of 'N' shadows a global declaration [-Wshadow]
 long long delivery(int N, int k, int L, int p[])
                                                ^
boxes.cpp:8:11: note: shadowed declaration is here
 const int N=1e7+55;
           ^
boxes.cpp:81:33: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
         update(0,n-1,1,i,dp[i][0],0);
                          ~~~~~~~^
boxes.cpp:96:33: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
         update(0,n-1,1,i,dp[i][1],1);
                          ~~~~~~~^
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB Output is correct
2 Incorrect 2 ms 376 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
6 Correct 3 ms 376 KB Output is correct
7 Correct 2 ms 376 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 348 KB Output is correct
2 Correct 3 ms 376 KB Output is correct
3 Correct 2 ms 256 KB Output is correct
4 Incorrect 2 ms 256 KB Output isn't correct
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB Output is correct
2 Incorrect 2 ms 376 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB Output is correct
2 Incorrect 2 ms 376 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB Output is correct
2 Incorrect 2 ms 376 KB Output isn't correct
3 Halted 0 ms 0 KB -