사탕 전달
1971 단어 수론
Input 어린이 개수 n 아래 n 줄 ai
Output 은 모든 사람 이 균등 한 사탕 의 최소 대 가 를 받 도록 요구한다.
Sample Input 4 1 2 5 4
Sample Output 4
데이터 규모 30% n < = 1000 100% n < = 1000000
사탕 을 교환 하 는 방식 은 1 은 n, 2 는 1, 3 은 2, n 은 n - 1 이다.
ave 는 최종 적 으로 모든 사람 이 가지 기 를 바 라 는 사탕 수 입 니 다.
a [i] i 번 째 사람 이 가 진 사탕 수 를 위해 1 부터 표시 합 니 다.
b [i] 는 i 번 째 사람 이 i - 1 번 에 게 줄 사탕 수 를 나타 내 고 마이너스 로 허용 한다.
첫 번 째 어린이 가 n 번 째 어린이 에 게 사탕 을 준다 고 가정 하면
b[1]=k。
a [1] - b [1] + b [2] = ave (원래 - 보 낸 + 새로 얻 은 = 최종 기대) 에서 얻 은 것:
b[2]=b[1]-a[1]+ave;일반 표현 식 은 b [i] = b [i - 1] - a [i - 1] + ave 입 니 다.통항 공식 은 다음 과 같다.
b[i]=k- (구 화 (아래 표: 1) (위 표 i - 1) (표현 식: a [i]) + (i - 1) * ave;
c [i] = (구 화 (아래 표: 1) (위 표 i) (표현 식: a [i]) - i * ave;
b [i] = k - c [i - 1];
분명히 c [n] = 0 이 있 습 니 다.그러므로 b [1] = k = k + c [n];
총 대 가 는 다음 과 같 습 니 다. )
다음 과 같 습 니 다. (아래 표: 1) (위 표 n) (표현 식: | k - c [i] | );
수축 에 n 개의 점 이 있 는 것 으로 전환 하여 특정한 점 에서 다른 모든 점 의 선분 과 최소 치 를 구 할 수 있 습 니 다.
그러므로 c [] 배열 을 정렬 하여 중위 수 를 찾 으 면 됩 니 다. 짝수 가 있 으 면 중간 두 개 를 취하 면 어느 하나 라 도 됩 니 다.
//1045: [HAOI2008] -ac
//http://www.lydsy.com/JudgeOnline/problem.php?id=1045
#include
#include
using namespace std;
# define M 1000002
long long a[M],c[M];
long long n,ans,ave;
void f_init(){
ans=0;
}
void f_calc(){
c[1]=a[1]-ave;
for(int i=1;i<=n;i++)
c[i]=c[i-1]+a[i]-ave;
sort(c+1,c+n+1);
long long mid=c[n/2];
for(long long i=1;i<=n;i++)
ans+=abs(mid-c[i]);
cout<>n){
f_init();
long long tmp=0;
for(int i=1;i<=n;i++)
{cin>>a[i];tmp+=a[i];} // 1
ave=tmp/n;
f_calc();
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[HDU 5608] functionProblem Description There is a function f(x),which is defined on the natural numbers set N,satisfies the following eqaut...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.