Codeforces - 1105A. Salem and Sticks 简单模拟

发布于 2024-09-24 10:42:00 字数 1660 浏览 26 评论 0

题目

给你一个数组 arr ,要你找到一个 t ,然后将数组所有的元素都变成和 t 只相差 1 的元素,问你哪个这样的 t 可以使得变换的代价最小, a 变化到 b 需要的代价是 |a - b|

解析

思路:

  • 遍历数组得到数组中的最大值 mx 和最小值 mn ,然后枚举所有的 tmn ~ mx
  • 然后对于每一个 t 计算需要的代价即可,注意 arr[i] == t 的情况,代价就是 0 ,不是 |a - b| - 1 (-1);
import java.io.*;
import java.util.*;

public class Main {

    public static void main(String[] args){
        Scanner in = new Scanner(new BufferedInputStream(System.in));
        PrintStream out = System.out;
        int n = in.nextInt();
        int[] arr = new int[n];
        int mx = 0, mn = 101;
        for(int i = 0; i < n; i++){
            arr[i] = in.nextInt();
            mx = Math.max(mx, arr[i]);
            mn = Math.min(mn, arr[i]);
        }
        int rT = 0, sm = Integer.MAX_VALUE;
        for(int t = mn; t <= mx; t++){ 
            int sum = 0;
            for(int i = 0; i < n; i++){ 
                int tmp = Math.abs(arr[i] - t);
                if(tmp > 0){ 
                    sum += (tmp-1);
                }else { 
                    sum += tmp;// tmp = 0
                }
            }
            if(sum < sm){
                sm = sum;
                rT = t;
            }
        }
        out.println(rT + " " + sm);
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

柠檬

暂无简介

0 文章
0 评论
734 人气
更多

推荐作者

我们的影子

文章 0 评论 0

素年丶

文章 0 评论 0

南笙

文章 0 评论 0

18215568913

文章 0 评论 0

qq_xk7Ean

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文