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);
    }
}
相关推荐
wearegogog1235 小时前
基于 MATLAB 的卡尔曼滤波器实现,用于消除噪声并估算信号
前端·算法·matlab
molaifeng5 小时前
Go 语言如何实现高性能网络 I/O:Netpoller 模型揭秘
开发语言·网络·golang
韩师学子--小倪5 小时前
fastjson与gson的toString差异
java·json
一只小小汤圆5 小时前
几何算法库
算法
Drawing stars5 小时前
JAVA后端 前端 大模型应用 学习路线
java·前端·学习
崇山峻岭之间5 小时前
Matlab学习记录33
开发语言·学习·matlab
Evand J5 小时前
【2026课题推荐】DOA定位——MUSIC算法进行多传感器协同目标定位。附MATLAB例程运行结果
开发语言·算法·matlab
nbsaas-boot5 小时前
SQL Server 存储过程开发规范(公司内部模板)
java·服务器·数据库
行百里er5 小时前
用 ThreadLocal + Deque 打造一个“线程专属的调用栈” —— Spring Insight 的上下文管理术
java·后端·架构
jllllyuz5 小时前
基于MATLAB的二维波场模拟程序(含PML边界条件)
开发语言·matlab