这道题要我们获取小红的最大能获取的原石数量,我们可以用数组存取每堆石头的数量,然后使用Arrays.sort()进行升序排序。

我们从数组尾部开始开始累加,这里我们定义一个变量hui用来表示小紫的回合进行数(初始值为0),小红累加是先基于原石堆的石子数量减去小紫回合数才进行累加的。

注:当基于原石堆的石子数量减去小紫回合数的结果小于等于0时使用break跳出循环

import java.util.*;

import java.io.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        long ans = 0;
        int a[] = new int[n];
        StringTokenizer st = new StringTokenizer(br.readLine());
        for(int i = 0;i<n;i++){
            a[i] = Integer.parseInt(st.nextToken());
        }
        Arrays.sort(a);
        int hui = 0;
        for(int i = a.length-1;i>=0;i--){
            int curr = a[i] - hui;
            hui++;
            if(curr>0){
                ans+=(long) curr;
            }else{
                break;
            }
        }
        System.out.println(ans);
    }
}