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);
    }
}
相关推荐
都叫我大帅哥43 分钟前
深入浅出 Resilience4j:Java 微服务的“免疫系统”实战指南
java·spring cloud
Cao_Shixin攻城狮3 小时前
Flutter运行Android项目时显示java版本不兼容(Unsupported class file major version 65)的处理
android·java·flutter
古月-一个C++方向的小白5 小时前
C++11之lambda表达式与包装器
开发语言·c++
沐知全栈开发5 小时前
Eclipse 生成 jar 包
开发语言
Dcs5 小时前
还在用 Arrays.hashCode?Java 自己也能写出更快的版本!
java
杭州杭州杭州6 小时前
Python笔记
开发语言·笔记·python
tanyongxi667 小时前
C++ AVL树实现详解:平衡二叉搜索树的原理与代码实现
开发语言·c++
Wendy14417 小时前
【线性回归(最小二乘法MSE)】——机器学习
算法·机器学习·线性回归
拾光拾趣录7 小时前
括号生成算法
前端·算法
fouryears_234177 小时前
Spring,Spring Boot 和 Spring MVC 的关系以及区别
java·spring boot·spring·mvc