50,535
社区成员
发帖
与我相关
我的任务
分享
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Candy {
static long sum = 0;//糖果总数
static long num = 0;//计算上升或下降序列长度
static boolean shang = true;//记录上一个序列是上升序列还是下降序列,平行序列也视为上升
static int befor = 0;//记录前一个rating值
static long height = 0;//记录前一个序列最后一个值的大小
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n = cin.nextInt(); //孩子数量
int rating;
if (n > 0) {
rating = cin.nextInt(); //获取第一个孩子的rating值
befor = rating;
num++;
sum += num;
n--;
}
while (n-- > 0) {
rating = cin.nextInt();
if (rating == befor) {
change();
num = 1;
sum += num;
height = 1;
shang = true;
} else {
if (shang) { //前一个是上升序列或平行序列
if (rating > befor) {
num++;
sum += num;
} else { //表示上升序列结束,下一个下降序列开始
height = num;
num = 1;
sum += num;
shang = false;
}
} else { //前一个是下降序列
if (rating < befor) {
num++;
sum += num;
} else { //表示下降序列结束,下一个上升序列开始
change();
num = 2;
sum += num;
shang = true;
}
}
}
befor = rating;
}
change();
System.out.println(sum);
cin.close();
}
/**
* @Title change
* @Description 如果当前序列为下降序列,且前面还有序列,
* 且当前序列的最大值大于大于前一个序列的最大值,
* 则修改前一个序列的最大值
*/
private static void change() {
if (!shang && height>0 && num >= height) {
sum = sum - height + num + 1;
}
}
}