이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <iostream>
#include <vector>
using namespace std;
long long sq(long long a)
{
return a*a;
}
int main()
{
int n, k;
cin >> n >> k;
long long a[n+1];
a[0] = 0;
for(int i = 1; i <= n; i++)
{
cin >> a[i];
a[i] += a[i-1];
}
int right[k+2]; //rightmost element belonging to the i'th part from the left.
right[0] = 0;
for(int j = 1; j <= k; j++) right[j] = j;
right[k+1] = n;
bool flag = 1;
while(flag)
{
flag = 0;
for(int j = k; j >= 1; j--)
{
while(right[j]+1 < right[j+1]
&& a[ right[j+1] ] - a[ right[j]+1 ] > a[ right[j] ] - a[ right[j-1] ])
{
right[j]++;
flag = 1;
}
}
}
long long res = sq(a[n]);
for(int j = 1; j <= k+1; j++) res -= sq(a[ right[j] ] - a[ right[j-1] ]);
res /= 2;
cout << res << '\n';
for(int i = 1; i <= k; i++) cout << right[i] << ' ';
cout << '\n';
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |