Submission #240900

#TimeUsernameProblemLanguageResultExecution timeMemory
240900tleontest1Boxes with souvenirs (IOI15_boxes)C++14
35 / 100
6 ms384 KiB
#include "boxes.h" #pragma GCC optimize ("O3") #pragma GCC target ("sse4") #pragma GCC optimize ("unroll-loops") #pragma GCC target ("avx2") #include <bits/stdc++.h> using namespace std; typedef long long lo; typedef pair< lo,lo > PII; #define fi first #define se second #define mp make_pair #define endl "\n" #define pb push_back #define fio() ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL) #define FOR for(int i=1;i<=n;i++) #define mid ((start+end)/2) #define ort ((bas+son)/2) const lo inf = 1000000000000000000; const lo KOK = 100000; const lo LOG = 30; const lo li = 500005; const lo mod = 1000000007; int m,b[li],flag,t; lo cev; string s; multiset<lo> st,st1; long long delivery(int n, int k, int l, int a[]) { for(int i=0;i<n;i++){ cev+=min(l-a[i],a[i])*2; } if(k==1)return cev; cev=0; for(int i=0;i<n;i++){ if(a[i]<(l+1)/2)st.insert(a[i]); else st1.insert(a[i]); } lo mn=inf; lo katt=0; auto ite=st.end(); if(ite!=st.begin()){ ite--; while(1){ katt+=*ite*2; //~ cout<<*ite<<endl; if(ite==st.begin())break; ite--; int say=0; while(say<k-1){if(ite==st.begin())break;say++;ite--;} if(ite==st.begin())break; } ite--; } //~ cout<<katt<<endl; ite=st1.begin(); while(1){ if(ite==st1.end())break; katt+=(l-*ite)*2; //~ cout<<*ite<<endl; ite++; if(ite==st1.end())break; int say=0; while(say<k-1){say++;ite++;if(ite==st1.end())break;} if(ite==st1.end())break; } //~ cout<<katt<<endl; mn=min(mn,katt); //~ cout<<st1.size()<<endl; while((int)st.size()>=k){ lo say=0; while(say<k-1){say++;st.erase(st.begin());} cev+=2**st.begin(); st.erase(st.begin()); } while((int)st1.size()>=k){ lo say=0; cev+=2*(l-*st1.begin()); st1.erase(st1.begin()); while(say<k-1){say++;st1.erase(st1.begin());} } //~ cout<<cev<<endl; auto it=st.end(); if(it!=st.begin()){ it--; lo at=*it*2; it=st1.begin(); if(it!=st1.end()){ //~ it--; at+=(l-*it)*2; } //~ cout<<at<<endl; mn=min(mn,cev+at); } it=st1.begin(); if(it!=st1.end()){ //~ it--; int at=(l-*it)*2; it=st.end(); if(it!=st.begin()){ it--; at+=*it*2; } //~ cout<<at<<endl; mn=min(mn,cev+at); } //~ cout<<mn<<endl; //~ cout<<st1.size()<<endl; //~ if(st.size() || st1.size()){ mn=min(mn,cev+(((lo)st.size()+(lo)st1.size()+k-1)/k*l)); //~ cout<<mn<<endl; lo tut=0; for(auto it1=st.begin();it1!=st.end();it1++){ tut++; lo tut1=0; auto it2=st1.end(); if(it2==st1.begin())break; it2--; for(;;it2--){ tut1++; mn=min(mn,cev+*it1*2+(l-*it2)*2+(((lo)st.size()-tut+(lo)st1.size()-tut1+k-1)/k*l)); //~ cout<<mn<<endl; if(it2==st1.begin())break; } } //~ } return mn; }

Compilation message (stderr)

boxes.cpp: In function 'long long int delivery(int, int, int, int*)':
boxes.cpp:108:17: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
   int at=(l-*it)*2;
          ~~~~~~~^~
boxes.cpp:112:12: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
    at+=*it*2;
            ^
#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...