这道题要我们获取小红的最大能获取的原石数量,我们可以用数组存取每堆石头的数量,然后使用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);
}
}

京公网安备 11010502036488号