CSES - UKIEPC 2016 - Results
Submission details
Task:Gondolas
Sender:Game of Nolife
Submission time:2016-11-12 13:41:46 +0200
Language:C++
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.05 sdetails
#2ACCEPTED0.06 sdetails
#3ACCEPTED0.07 sdetails
#4ACCEPTED0.06 sdetails
#5ACCEPTED0.06 sdetails
#6ACCEPTED0.06 sdetails
#7ACCEPTED0.29 sdetails
#8ACCEPTED0.30 sdetails
#9ACCEPTED0.22 sdetails
#10ACCEPTED0.29 sdetails
#11ACCEPTED0.20 sdetails
#12ACCEPTED0.06 sdetails
#13ACCEPTED0.07 sdetails
#14ACCEPTED0.09 sdetails
#15ACCEPTED0.15 sdetails
#16ACCEPTED0.10 sdetails
#17ACCEPTED0.06 sdetails
#18ACCEPTED0.08 sdetails
#19ACCEPTED0.06 sdetails
#20ACCEPTED0.10 sdetails
#21ACCEPTED0.10 sdetails
#22ACCEPTED0.32 sdetails
#23ACCEPTED0.06 sdetails
#24ACCEPTED0.42 sdetails
#25ACCEPTED0.39 sdetails
#26ACCEPTED0.16 sdetails
#27ACCEPTED0.50 sdetails
#28ACCEPTED0.23 sdetails
#29ACCEPTED0.41 sdetails
#30ACCEPTED0.41 sdetails
#31ACCEPTED0.53 sdetails
#32ACCEPTED0.52 sdetails
#33ACCEPTED0.06 sdetails
#34ACCEPTED0.44 sdetails
#35ACCEPTED0.42 sdetails
#36ACCEPTED0.41 sdetails
#37ACCEPTED0.43 sdetails
#38ACCEPTED0.52 sdetails
#39ACCEPTED0.52 sdetails
#40ACCEPTED0.06 sdetails
#41ACCEPTED0.06 sdetails
#42ACCEPTED0.06 sdetails
#43ACCEPTED0.05 sdetails
#44ACCEPTED0.06 sdetails

Code

#include <bits/stdc++.h>
#define F first
#define S second
#define X real()
#define Y imag()
using namespace std;
typedef long long ll;
typedef long double ld;

int dp[444][444];
int f[444][444];
int n,t,g;

pair<int, vector<int> > solve(vector<int> xs){
	for (int i=0;i<=n+1;i++){
		for (int ii=0;ii<=g+1;ii++){
			dp[i][ii]=1e8;
		}
	}
	dp[0][0]=0;
	for (int i=0;i<n;i++){
		for (int ii=0;ii<g;ii++){
			int c=0;
			int su=0;
			for (int j=i;j<n;j++){
				c++;
				su+=xs[j];
				if (dp[i][ii]+xs[j]*c-su<dp[j+1][ii+1]){
					dp[j+1][ii+1]=dp[i][ii]+xs[j]*c-su;
					f[j+1][ii+1]=i;
				}
			}
		}
	}
	assert(dp[n][g]<1e8);
	int v=dp[n][g];
	vector<int> vv;
	int ti=n;
	for (int a=g;a>0;a--){
		vv.push_back(xs[ti-1]);
		ti=f[ti][a];
	}
	return {v, vv};
}

int solve2(vector<int> xs, int offs){
	vector<int> ys;
	for (int x:xs){
		ys.push_back((x-offs+8*t)%(2*t));
	}
	sort(ys.begin(), ys.end());
	auto v=solve(ys);
	return v.F;
}

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cin>>n>>t>>g;
	g=min(g, n);
	vector<int> xs;
	for (int i=0;i<n;i++){
		int x;
		cin>>x;
		xs.push_back(x%(2*t));
	}
	sort(xs.begin(), xs.end());
	auto aa=solve(xs);
	int v=aa.F;
	sort(aa.S.begin(), aa.S.end());
	int mi=1e9;
	int mii=0;
	for (int i=0;i<(int)aa.S.size();i++){
		if (i+1==(int)aa.S.size()){
			if (aa.S[0]+t*2-aa.S[i]<mi){
				mi=aa.S[0]+t*2-aa.S[i];
				mii=i;
			}
		}
		else if (aa.S[i+1]-aa.S[i]<mi){
			mi=aa.S[i+1]-aa.S[i];
			mii=i;
		}
	}
	if (mii+1==(int)aa.S.size()){
		for (int j=aa.S.back();j<2*t;j++){
			v=min(v, solve2(xs, j));
			v=min(v, solve2(xs, -j));
		}
		for (int j=0;j<=aa.S[0];j++){
			v=min(v, solve2(xs, j));
			v=min(v, solve2(xs, -j));
		}
	}
	else{
		for (int j=aa.S[mii];j<=aa.S[mii+1];j++){
			v=min(v, solve2(xs, j));
			v=min(v, solve2(xs, -j));
		}
	}
	cout<<v<<endl;
}

Test details

Test 1

Verdict: ACCEPTED

input
32 39 4
681306
435214
1554
470233
...

correct output
183

user output
183

Test 2

Verdict: ACCEPTED

input
94 205 25
154150
167683
411531
64924
...

correct output
328

user output
328

Test 3

Verdict: ACCEPTED

input
63 329 33
791965
121438
487872
197074
...

correct output
133

user output
133

Test 4

Verdict: ACCEPTED

input
70 253 28
853321
662592
538431
311761
...

correct output
203

user output
203

Test 5

Verdict: ACCEPTED

input
75 146 58
71431
174034
198572
717231
...

correct output
6

user output
6

Test 6

Verdict: ACCEPTED

input
50 210 38
508372
208598
621692
276794
...

correct output
11

user output
11

Test 7

Verdict: ACCEPTED

input
400 261 30
122770
252639
652115
865847
...

correct output
2438

user output
2438

Test 8

Verdict: ACCEPTED

input
400 309 128
415910
619728
298494
977650
...

correct output
333

user output
333

Test 9

Verdict: ACCEPTED

input
400 356 162
104184
601951
422624
370531
...

correct output
265

user output
265

Test 10

Verdict: ACCEPTED

input
400 312 215
359148
808684
945274
604226
...

correct output
76

user output
76

Test 11

Verdict: ACCEPTED

input
325 713 168
826229
196639
317967
8558
...

correct output
294

user output
294

Test 12

Verdict: ACCEPTED

input
42 2 42
683073
532140
174856
51368
...

correct output
0

user output
0

Test 13

Verdict: ACCEPTED

input
203 516 366
125553
642375
63137
608569
...

correct output
0

user output
0

Test 14

Verdict: ACCEPTED

input
199 234 251
281253
491509
139389
436824
...

correct output
0

user output
0

Test 15

Verdict: ACCEPTED

input
315 442 326
750778
381993
661296
156508
...

correct output
0

user output
0

Test 16

Verdict: ACCEPTED

input
328 150 7
43275
248257
847043
99790
...

correct output
5990

user output
5990

Test 17

Verdict: ACCEPTED

input
109 139 17
756544
653138
951489
311818
...

correct output
519

user output
519

Test 18

Verdict: ACCEPTED

input
134 553 27
147387
129153
719770
427935
...

correct output
1291

user output
1291

Test 19

Verdict: ACCEPTED

input
145 241 2
676743
605609
180247
181812
...

correct output
16132

user output
16132

Test 20

Verdict: ACCEPTED

input
199 345 1
860055
518304
632757
227941
...

correct output
63718

user output
63718

Test 21

Verdict: ACCEPTED

input
237 305 50
322166
709644
908880
898007
...

correct output
732

user output
732

Test 22

Verdict: ACCEPTED

input
400 448 110
759554
617824
923199
28933
...

correct output
682

user output
682

Test 23

Verdict: ACCEPTED

input
20 43 22
227704
798839
578770
318490
...

correct output
0

user output
0

Test 24

Verdict: ACCEPTED

input
400 571 70
450921
468211
132387
47354
...

correct output
1770

user output
1770

Test 25

Verdict: ACCEPTED

input
400 511 70
858453
872050
610960
953293
...

correct output
1591

user output
1591

Test 26

Verdict: ACCEPTED

input
400 168 70
4459
674845
367823
294137
...

correct output
490

user output
490

Test 27

Verdict: ACCEPTED

input
400 680 70
30654
191088
801200
207158
...

correct output
2102

user output
2102

Test 28

Verdict: ACCEPTED

input
400 248 9
470894
893438
325348
641558
...

correct output
9158

user output
9158

Test 29

Verdict: ACCEPTED

input
400 382 9
199594
909749
628471
402271
...

correct output
14426

user output
14426

Test 30

Verdict: ACCEPTED

input
400 428 9
482354
949600
607474
999204
...

correct output
16028

user output
16028

Test 31

Verdict: ACCEPTED

input
400 720 29
188913
504810
623401
693477
...

correct output
6872

user output
6872

Test 32

Verdict: ACCEPTED

input
400 720 29
665160
117237
952099
664974
...

correct output
6875

user output
6875

Test 33

Verdict: ACCEPTED

input
17 15 34
930291
502763
967298
799893
...

correct output
0

user output
0

Test 34

Verdict: ACCEPTED

input
400 720 255
248532
531967
568554
368539
...

correct output
207

user output
207

Test 35

Verdict: ACCEPTED

input
400 720 383
587057
127300
561898
335689
...

correct output
17

user output
17

Test 36

Verdict: ACCEPTED

input
400 720 127
587057
127300
561898
335689
...

correct output
1007

user output
1007

Test 37

Verdict: ACCEPTED

input
400 720 399
554238
475586
539758
602129
...

correct output
1

user output
1

Test 38

Verdict: ACCEPTED

input
400 720 67
498986
209095
87086
627358
...

correct output
2576

user output
2576

Test 39

Verdict: ACCEPTED

input
400 720 25
52948
388352
380718
137663
...

correct output
9211

user output
9211

Test 40

Verdict: ACCEPTED

input
13 34 8
663490
977749
760140
95431
...

correct output
5

user output
5

Test 41

Verdict: ACCEPTED

input
12 20 3
193357
939494
993606
22131
...

correct output
37

user output
37

Test 42

Verdict: ACCEPTED

input
58 281 30
980435
768397
647975
798884
...

correct output
99

user output
99

Test 43

Verdict: ACCEPTED

input
96 72 69
567259
416559
401648
673446
...

correct output
0

user output
0

Test 44

Verdict: ACCEPTED

input
96 249 90
666268
812077
949656
878404
...

correct output
0

user output
0