Submission details
Task:Candies
Sender:quasisphere
Submission time:2015-09-09 18:31:36 +0300
Language:C++
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.06 sdetails
#2ACCEPTED0.05 sdetails
#3ACCEPTED0.05 sdetails
#4ACCEPTED0.05 sdetails
#5ACCEPTED0.05 sdetails
#6ACCEPTED0.05 sdetails
#7ACCEPTED0.04 sdetails
#8ACCEPTED0.06 sdetails
#9ACCEPTED0.05 sdetails
#10ACCEPTED0.06 sdetails
#11ACCEPTED0.07 sdetails
#12ACCEPTED0.09 sdetails
#13ACCEPTED0.08 sdetails
#14ACCEPTED0.08 sdetails
#15ACCEPTED0.08 sdetails
#16ACCEPTED0.09 sdetails
#17ACCEPTED0.08 sdetails
#18ACCEPTED0.09 sdetails
#19ACCEPTED0.09 sdetails
#20ACCEPTED0.08 sdetails
#21ACCEPTED0.05 sdetails

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