P2234 [HNOI2002] 营业额统计

题目描述

Tiger 最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。

Tiger 拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证明公司此时的经营状况出现了问题。经济管理学上定义了一种最小波动值来衡量这种情况:当最小波动值越大时,就说明营业情况越不稳定。

而分析整个公司的从成立到现在营业情况是否稳定,只需要把每一天的最小波动值加起来就可以了。你的任务就是编写一个程序帮助 Tiger 来计算这一个值。

我们定义,一天的最小波动值 = min⁡{∣该天以前某一天的营业额−该天营业额∣}

特别地,第一天的最小波动值为第一天的营业额。

输入格式

第一行为正整数 𝑛n(𝑛≤32767) ,表示该公司从成立一直到现在的天数,接下来的 𝑛 行每行有一个整数 𝑎𝑖ai​(∣𝑎𝑖∣≤106) ,表示第 𝑖 天公司的营业额,可能存在负数。

输出格式

输出一个正整数,即每一天最小波动值的和,保证结果小于 231。

代码:

90分(未AC):

java 复制代码
package lanqiao;

import java.util.*;

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

        int count = a[1];

        for(int i = 2;i <= n;i ++)
        {
            int min = Integer.MAX_VALUE;
            for(int j = i - 1;j >= 1;j --)
            {
                int tmp = Math.abs(a[j] - a[i]);
                if(tmp < min)
                {
                    min = tmp;
                }
            }
//            System.out.println(min);
            count += min;
        }

        System.out.println(count);
    }
}

引入STL优化:

java 复制代码
package lanqiao;

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        TreeSet<Integer> set = new TreeSet<>();
        set.add(-10000000);
        set.add(10000000);
        long ans = 0;
        ans += sc.nextInt();
        set.add((int)ans);

        for(int i = 1;i < n;i ++)
        {
            int now = sc.nextInt();
            int higher = set.higher(now);
            if(higher != now)
            {
                int lower = set.lower(higher);
                ans += Math.min(Math.abs(higher-now),Math.abs(lower-now));
                set.add(now);
            }
        }

        System.out.println(ans);
    }
}
相关推荐
离陌在学C#2 分钟前
C# 重载与重写:深入理解面向对象编程的核心概念
java·c#
地平线开发者15 分钟前
征程6工具链模型X86推理方式说明
算法
洛阳泰山16 分钟前
AI 应用层被 Python 卷成红海,为什么我偏要用 Java 造一个 RAG + 工作流引擎?
java·人工智能·后端
地平线开发者19 分钟前
【征程6】校准量化中HistogramObserver解析
算法
二十雨辰25 分钟前
[Java]-Spring面试题
java·开发语言
老马历写记34 分钟前
Maven POM 依赖管理总结
java·maven·system·pom·optional
古法安卓39 分钟前
Android-车机 GNSS 定位数据接收问题排查
android·java·android studio
蔬菜_1 小时前
前端转全栈-day5(数组、list、set)
java·前端·数据结构·list
萧瑟余晖1 小时前
Java深入解析篇二十二之虚拟线程
java·开发语言
OuO-21 小时前
笔试强训 Day 34:ISBN 号码、kotori 和迷宫、矩阵最长递增路径
java·算法·矩阵