Submission #1037416

#TimeUsernameProblemLanguageResultExecution timeMemory
1037416mindiyakBoxes with souvenirs (IOI15_boxes)C++14
100 / 100
394 ms293972 KiB
#include "boxes.h" #pragma GCC optimize("O1,O2,O3,Ofast,unroll-loops") #include <bits/stdc++.h> #include <string> #include <iostream> #include <cmath> #include <numeric> #include <limits> using namespace std; typedef long long ll; typedef unsigned long long ull; typedef long double ld; typedef pair<int, int> pi; typedef pair<int, int> pl; typedef pair<ld, ld> pd; typedef vector<int> vi; typedef vector<bool> vb; typedef vector<vector<int>> vvi; typedef vector<ld> vd; typedef vector<ll> vl; typedef vector<pi> vpi; typedef vector<pl> vpl; #define FOR(i, a, b) for (int i = a; i < (b); i++) #define F0R(i, a) for (int i = 0; i < (a); i++) #define FORd(i, a, b) for (int i = (b)-1; i >= a; i--) #define F0Rd(i, a) for (int i = (a)-1; i >= 0; i--) #define trav(a, x) for (auto &a : x) #define uid(a, b) uniform_int_distribution<int>(a, b)(rng) #define len(x) (int)(x).size() #define mp make_pair #define pb push_back #define F first #define nl endl #define S second #define lb lower_bound #define ub upper_bound #define aint(x) x.begin(), x.end() #define raint(x) x.rbegin(), x.rend() #define ins insert const int MOD = 1000000007; int L; vl arr(1e7+10,0); vl arr_sum(1e7+10,0); ll dis(ll a,ll b){ return min(abs(b-a),L-abs(b-a)); } ll dis2(ll a,ll b){ // return min(abs(b-a),dis(0,a)+dis(0,b)); return abs(b-a); } long long delivery(int N, int K, int m, int p[]) { L = m; FOR(i,0,N){ arr[i] = dis(p[i],0); } FOR(i,1,N) arr_sum[i] = dis(p[i],p[i-1]) + arr_sum[i-1]; ll ans = LLONG_MAX; FOR(j,0,K+1){ ll temp = 0; int last = 0; if(j != 0){ // cout << "A " << arr[0] << " " << arr[j-1] << " " << dis2(p[0],p[j-1]) << endl; temp += arr[0] + arr[j-1]; if(j != 1){ temp += arr_sum[j-1] - arr_sum[0]; } // FOR(l,0,j-1) // temp += dis(p[l],p[l+1]); } for(int i=j;i<N;i+=K){ if(i+K-1 > N-1)break; last = i+K; // cout << "B " << arr[i] << " " << arr[i+K-1] << " " << dis2(p[i],p[i+K-1]) << endl; temp += arr[i] + arr[i+K-1] + arr_sum[i+K-1] - arr_sum[i]; // FOR(l,i,i+K-1) // temp += dis(p[l],p[l+1]); } if(last <= N-1){ // cout << "C " << arr[N-1] << " " << arr[last] << " " << dis2(p[last],p[N-1]) << endl; temp += arr[N-1] + arr[last] + arr_sum[N-1] - arr_sum[last]; // FOR(l,last,N-1) // temp += dis(p[l],p[l+1]); } // cout << j << " " << temp << endl; ans = min(ans,temp); } return ans; }
#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...