| Task: | Candies |
| Sender: | quasisphere |
| Submission time: | 2015-09-09 18:31:36 +0300 |
| Language: | C++ |
| Status: | READY |
| Result: | ACCEPTED |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.06 s | details |
| #2 | ACCEPTED | 0.05 s | details |
| #3 | ACCEPTED | 0.05 s | details |
| #4 | ACCEPTED | 0.05 s | details |
| #5 | ACCEPTED | 0.05 s | details |
| #6 | ACCEPTED | 0.05 s | details |
| #7 | ACCEPTED | 0.04 s | details |
| #8 | ACCEPTED | 0.06 s | details |
| #9 | ACCEPTED | 0.05 s | details |
| #10 | ACCEPTED | 0.06 s | details |
| #11 | ACCEPTED | 0.07 s | details |
| #12 | ACCEPTED | 0.09 s | details |
| #13 | ACCEPTED | 0.08 s | details |
| #14 | ACCEPTED | 0.08 s | details |
| #15 | ACCEPTED | 0.08 s | details |
| #16 | ACCEPTED | 0.09 s | details |
| #17 | ACCEPTED | 0.08 s | details |
| #18 | ACCEPTED | 0.09 s | details |
| #19 | ACCEPTED | 0.09 s | details |
| #20 | ACCEPTED | 0.08 s | details |
| #21 | ACCEPTED | 0.05 s | details |
Code
#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<algorithm>
#include<cmath>
#include<utility>
using namespace std;
int64_t n;
int64_t opp(int64_t k) {
return (k+n/2)%n;
}
int main(void) {
cin >> n;
vector<int64_t> a(n);
int64_t total=0;
for(int64_t i=0;i<n;i++) {
cin >> a[i];
total+=a[i];
}
if(total%2) {
cout << "QAQ" << endl;
return 0;
}
vector<int64_t> f(n);
int64_t foo=0;
for(int64_t i=0;i<n/2;i++) {
f[i]=a[i]+foo;
foo+=a[i];
}
foo=0;
for(int64_t i=n-2;i>=n/2;i--) {
f[i]=-a[i+1]-foo;
foo+=a[i+1];
}
for(int64_t i=n/2;i<n;i++) {
f[i]+=total/2;
}
const int64_t INF=1000000000000000;
int64_t m=INF;
for(int64_t i=0;i<n;i++) {
m=min(m,f[i]);
}
for(int64_t i=0;i<n;i++) {
f[i]-=m;
}
/*for(int64_t i=0;i<n;i++) {
cout << "f[" << i << "] = " << f[i] << endl;
}
cout << "AD" << endl;*/
for(int64_t i=0;i<n/2;i++) {
int64_t tmp=min(f[i],f[i+n/2]);
f[i]-=tmp;
f[i+n/2]-=tmp;
}
int64_t bar=0;
for(int64_t i=0;i<n;i++) {
bar+=f[i];
}
cout << bar << endl;
/*for(int64_t i=0;i<n;i++) {
cout << "f[" << i << "] = " << f[i] << endl;
}*/
/*const int64_t INF=1000000000000000;
int64_t rleft=-INF;
int64_t rright=INF;
while(rleft != rright) {
if(rright - rleft <= 2) break;
int64_t r=(rright+rleft)/2;
int64_t res1=0,res2=0;
for(int64_t i=0;i<n;i++) {
res1+=abs(f[i]+r);
res2+=abs(f[i]+r+1);
}
cout << rleft << "," << rright << endl;
if(res1 < res2) {
rright=r;
} else {
rleft=r;
}
}
int64_t res1=0,res2=0,res3=0,res4=0;
for(int64_t i=0;i<n;i++) {
res1+=abs(f[i]+rleft);
res2+=abs(f[i]+rleft+1);
res3+=abs(f[i]+rleft+2);
res4+=abs(f[i]+rleft+3);
}
cout << min(res1,min(res2,min(res3,res4))) << endl;*/
return 0;
}
Test details
Test 1
Verdict: ACCEPTED
| input |
|---|
| 8
4 5 1 7 0 0 3 4 |
| correct output |
|---|
| 12 |
| user output |
|---|
| 12 |
Test 2
Verdict: ACCEPTED
| input |
|---|
| 6
1 2 3 1 1 1 |
| correct output |
|---|
| QAQ |
| user output |
|---|
| QAQ |
Test 3
Verdict: ACCEPTED
| input |
|---|
| 8
0 5 0 9 5 1 5 3 |
| correct output |
|---|
| 12 |
| user output |
|---|
| 12 |
Test 4
Verdict: ACCEPTED
| input |
|---|
| 2
1 9 |
| correct output |
|---|
| 4 |
| user output |
|---|
| 4 |
Test 5
Verdict: ACCEPTED
| input |
|---|
| 10
1 3 10 3 6 9 4 10 1 5 |
| correct output |
|---|
| 24 |
| user output |
|---|
| 24 |
Test 6
Verdict: ACCEPTED
| input |
|---|
| 4
7 9 3 4 |
| correct output |
|---|
| QAQ |
| user output |
|---|
| QAQ |
Test 7
Verdict: ACCEPTED
| input |
|---|
| 12
0 2 6 10 8 6 3 2 8 3 6 7 |
| correct output |
|---|
| QAQ |
| user output |
|---|
| QAQ |
Test 8
Verdict: ACCEPTED
| input |
|---|
| 60742
4710 1910 1659 9225 7381 3865 ... |
| correct output |
|---|
| 6017952277 |
| user output |
|---|
| 6017952277 |
Test 9
Verdict: ACCEPTED
| input |
|---|
| 11584
5282 4860 4143 2150 2812 601 3... |
| correct output |
|---|
| 965732716 |
| user output |
|---|
| 965732716 |
Test 10
Verdict: ACCEPTED
| input |
|---|
| 60404
2628 7729 9173 3502 2111 1040 ... |
| correct output |
|---|
| 10665547149 |
| user output |
|---|
| 10665547149 |
Test 11
Verdict: ACCEPTED
| input |
|---|
| 93500
643743466 254334505 56338701 6... |
| correct output |
|---|
| 2332675821421250 |
| user output |
|---|
| 2332675821421250 |
Test 12
Verdict: ACCEPTED
| input |
|---|
| 88320
980662112 130626205 836179288 ... |
| correct output |
|---|
| 852335249751381 |
| user output |
|---|
| 852335249751381 |
Test 13
Verdict: ACCEPTED
| input |
|---|
| 86084
661623466 605516853 815285452 ... |
| correct output |
|---|
| 1780767548661907 |
| user output |
|---|
| 1780767548661907 |
Test 14
Verdict: ACCEPTED
| input |
|---|
| 100000
683931982 877847097 963735593 ... |
| correct output |
|---|
| 2439312588016943 |
| user output |
|---|
| 2439312588016943 |
Test 15
Verdict: ACCEPTED
| input |
|---|
| 100000
607939901 388494871 946955020 ... |
| correct output |
|---|
| 2078642477260774 |
| user output |
|---|
| 2078642477260774 |
Test 16
Verdict: ACCEPTED
| input |
|---|
| 100000
129999770 281887896 212654534 ... |
| correct output |
|---|
| 1634491104792725 |
| user output |
|---|
| 1634491104792725 |
Test 17
Verdict: ACCEPTED
| input |
|---|
| 100000
984587506 859617842 965313525 ... |
| correct output |
|---|
| 908083215653911 |
| user output |
|---|
| 908083215653911 |
Test 18
Verdict: ACCEPTED
| input |
|---|
| 100000
262098859 130542442 982092757 ... |
| correct output |
|---|
| 2404890264763254 |
| user output |
|---|
| 2404890264763254 |
Test 19
Verdict: ACCEPTED
| input |
|---|
| 94478
586981276 778806053 845074693 ... |
| correct output |
|---|
| QAQ |
| user output |
|---|
| QAQ |
Test 20
Verdict: ACCEPTED
| input |
|---|
| 82474
989366273 218860004 500508088 ... |
| correct output |
|---|
| QAQ |
| user output |
|---|
| QAQ |
Test 21
Verdict: ACCEPTED
| input |
|---|
| 8
1 1 7 2 1 1 7 2 |
| correct output |
|---|
| 0 |
| user output |
|---|
| 0 |
