糖果传递 推公式 贪心

原题地址
在这里插入图片描述
在这里插入图片描述

大佬题解

import java.util.Arrays;
import java.util.Scanner;

public class Main
{
    
    
	static int N = (int) 1e6 + 10;
	static int[] a = new int[N];
	static int[] c = new int[N];

	public static void main(String[] args)
	{
    
    
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		long sum = 0;
		for (int i = 1; i <= n; i++)
		{
    
    
			a[i] = sc.nextInt();
			sum += a[i];
		}

		long ave = sum / n;

		for (int i = 2; i <= n; i++)
			c[i] = (int) (c[i - 1] + a[i] - ave);

		Arrays.sort(c, 1, n + 1);

		long res = 0;
		int mid = c[n / 2 + 1];
		for (int i = 1; i <= n; i++)
			res += Math.abs(c[i] - mid);
		System.out.println(res);
	}
}

猜你喜欢

转载自blog.csdn.net/lt6666678/article/details/129895981