AtCoder Beginner Contest 338 --- D - Island Tour -- 题解

D - Island Tour

题目大意

思路解析:

        

可以发现 1->2->4 整体减1变为5->1->3,

        其中2->4的距离等于1->3的距离

        其中1->2的距离不等于5->1的距离,则只有当[xj - i] <= 0后的xj - > xj+1 和 xj -> xj-1的距离才会发生改变。所有我们枚举当前需要整体减去i,然后看哪些点会小于等于0,又因为我们可以每次记录上一次i-1的答案,所以我们只需要统计哪些点减i会等于0引起的距离变化。

        如果我们通过记录哪些点等于i,可以减少统计答案时,遍历哪些点等于i的过程。

代码实现:        

import java.io.*;
import java.math.BigInteger;
import java.util.*;public class Main {public static void main(String[] args) throws IOException {int n = input.nextInt();int m = input.nextInt();Vector<Integer>[] arr = new Vector[200001];for (int i = 0; i < 200001; i++) {arr[i] = new Vector<Integer>();}int[] x = new int[m];long ans = 0;for (int i = 0; i < m; i++) {x[i] = input.nextInt();if (i != 0)ans += Math.abs(x[i] - x[i - 1]);arr[x[i]].add(i);}long res = ans;for (int i = 1; i <= n - 1; i++) {for (int t = 0; t < arr[i].size(); t++) {int j = arr[i].get(t);if (j >= 1){int k = (x[j - 1] - i + n) % n;ans += Math.abs(n - k) - k;}if (j < m - 1){int k = (x[j + 1] - i + n) % n;ans += Math.abs(n - k) - k;}}res = Math.min(ans, res);}out.println(res);out.flush();out.close();br.close();}static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));static Input input = new Input(System.in);static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));static class Input {public BufferedReader reader;public StringTokenizer tokenizer;public Input(InputStream stream) {reader = new BufferedReader(new InputStreamReader(stream), 32768);tokenizer = null;}public String next() {while (tokenizer == null || !tokenizer.hasMoreTokens()) {try {tokenizer = new StringTokenizer(reader.readLine());} catch (IOException e) {throw new RuntimeException(e);}}return tokenizer.nextToken();}public String nextLine() {String str = null;try {str = reader.readLine();} catch (IOException e) {// TODO 自动生成的 catch 块e.printStackTrace();}return str;}public int nextInt() {return Integer.parseInt(next());}public long nextLong() {return Long.parseLong(next());}public Double nextDouble() {return Double.parseDouble(next());}public BigInteger nextBigInteger() {return new BigInteger(next());}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/440167.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电子液晶屏幕生产厂污废水处理需要哪些工艺设备

随着电子液晶屏幕行业的不断发展&#xff0c;污废水处理成为了一个重要的环保问题。为了达到合规性排放要求&#xff0c;并保护环境&#xff0c;厂家需要采取一系列工艺设备来处理污废水。 首先&#xff0c;常见的一种处理工艺是物理与化学处理。物理处理包括预处理与固液分离&…

基于go mod模式创建项目最佳实践

希望能带给你成功的喜悦&#xff01; 除go get、vendor这两种方式外&#xff0c;Go版本在1.11之后推出了go module模式来管理依赖&#xff0c;使用go mod时下载的依赖文件在$GOPATH/pkg/mod/下。本文以两种办法介绍如何创建go mod项目。 目录 goland开启玩法 本地手动创建项目…

Java二维码图片识别

前言 后端识别二维码图片 代码 引入依赖 <dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.2.1</version></dependency><dependency><groupId>com.google.zxing<…

C语言指针进阶之四-函数指针的使用之回调函数及库函数qsort函数详解(详解)

目录 1.回调函数 1.1引入 1.2回调函数的使用&#xff0c;加减乘除计算器改造 2.回调函数的应用-qsort函数 实例1&#xff1a;整型数组排序 实例2&#xff1a;结构体排序 ①按照整型数据来排序&#xff0c;这里是按照年龄来排序 ②按照名字来排序&#xff0c;也就是比较…

Java 面试题之 IO(一)

字节流 文章目录 字节流InputStream&#xff08;字节输入流&#xff09;OutputStream&#xff08;字节输出流&#xff09; 文章来自Java Guide 用于学习如有侵权&#xff0c;立即删除 InputStream&#xff08;字节输入流&#xff09; InputStream用于从源头&#xff08;通常是…

【Mac系统PyCharm连接至Linux服务器,实现本地与服务器的实时交互】

Mac系统PyCharm连接至Linux服务器&#xff0c;实现本地与服务器的实时交互 0、目录 1、动机2、说明3、PyCharm 连接Linux服务器操作过程 3.1 连接服务器3.2 验证连接服务器是否成功3.3 查看Linux服务器文件构成3.4 本地与Linux服务器上传内容3.5 从PyCharm的terminal进入到刚…

华为OD-华为机试精讲500篇系列文章目录介绍(持续补充ing)

目录 背景介绍 什么是华为OD&#xff1f; OD现状 OD趋势 华为OD机考刷题攻略 1、刷题资料&#xff1a;投递岗位通过筛选后提供 2、注意事项&#xff1a; 真题代码目录 背景介绍 经济下行的这几年&#xff0c;每个人都感同身受&#xff0c;如何让自己在芸芸众生中脱颖而…

无心剑中译莎士比亚《可否将你比夏天》

莎士比亚十四行诗第18首 Sonnet 18 可否将你比夏天 Shall I compare thee to a summer’s day? Thou art more lovely and more temperate: Rough winds do shake the darling buds of May, And summer’s lease hath all too short a date: Sometime too hot the eye of he…

2024美赛算法预测-1一个强大算法模型,随机森林!!

大家好&#xff0c;今儿咱们来说说关于随机森林的一些核心点~ 首先&#xff0c;随机森林是一种集成学习方法&#xff0c;通过组合多个决策树来进行预测。每个决策树都是在不同的数据子集上训练的&#xff0c;同时引入了随机性&#xff0c;使得每棵树都有差异。 最终的预测结果…

transformer架构的理解

一、transformer 架构 如上图所示&#xff0c;transformer&#xff08;形状像变压器&#xff1f;或者翻译成变形金刚&#xff0c;由不同模块拼装而成&#xff09;的架构左边是n个结构体相同的编码器&#xff08;例如&#xff0c;原论文是6个编码器的串联&#xff09;&#xff0…

动网格-网格重构之铺层(三)

铺层 本文章详细介绍FLUENT动态网格体网格再生方法铺层法。 铺层基本特点&#xff1a; (1)铺层过程中包含了网格的生成和销毁。当区域扩大时&#xff0c;生成网格;缩小时&#xff0c;销毁网格。 (2)适用网格种类:四边形、六面体、三棱柱(网格的分布要服从一定的规则)。 (3)铺…

使用cmake配置opencv c++项目

1、cmake简介 cmake是什么 CMake是一个开源、跨平台的编译&#xff08;Build&#xff09;工具&#xff0c;是用来构建、测试和打包软件的。它能够用简单的语句来描述所有平台的编译过程。它能够输出各种各样的makefile或者project文件&#xff0c;能测试编译器所支持的C特性,类…