首页 > 其他分享 >【题解】CF1852C Ina of the Mountain

【题解】CF1852C Ina of the Mountain

时间:2023-09-05 20:22:07浏览次数:38  
标签:Mountain int 题解 ll pop ans Ina

我们先从题目的一部分入手。

如果说,我们没有当一个数为 \(0\) 时,让这个数变成 \(k\) 的性质,我们如何求答案呢?

很简单,在图上就是:

绿色线段的长度加起来即为答案(本图中是 \(6\))

我们考虑很显然地,将一个数从 \(0\) 变为 \(k\) 即为将一个数一开始加上 \(k\)

我们如果要让第 \(i\) 列格子前面的数的代价减小,那么一定会在 \(i\) 前面找一个 \(j\) 让 \([j,i-1]\) 的区间内的所有数都加上 \(k\),而代价为 \(a_j+k - a_{j-1}\) 我们只需要将所有的 \(a_j+k-a_{j-1}\) 放进优先队列里面,每次取最小的,和现在的\(a_i-a_{i-1}\) 取 \(\min\) 即可。

code:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int NN = 2e5 + 8;
int n,k;
ll a[NN];
void solve(){
	scanf("%d%d",&n,&k);
	for(int i = 1; i <= n; ++i) scanf("%lld",&a[i]),a[i] %= k;
	a[n+1] = 0;
	priority_queue<ll, vector<ll>, greater<ll> > q;
	while(!q.empty()) q.pop();
	ll ans = 0;
	for(int i = 1; i <= n + 1; ++i){
		if(a[i - 1] == a[i]) continue;
		if(a[i - 1] > a[i]) q.push(a[i] + k - a[i - 1]);
		else{
			q.push(a[i] - a[i - 1]);
			ans += q.top();
			q.pop();
		}
	}
	printf("%lld\n",ans);
}
int T;
int main(){
	scanf("%d",&T);
	while(T--) solve();
}

标签:Mountain,int,题解,ll,pop,ans,Ina
From: https://www.cnblogs.com/rickylin/p/17680719.html

相关文章

  • Java语言与其环境:常见问题解答
    Java语言与其环境:常见问题解答在本博客文章中,将深入探讨Java编程语言的特点和环境,解释一些常见的关于Java的疑问。Java语言的特点是什么?Java是一种高级编程语言,它具有以下几个主要的特点:简单:Java的语法与C和C++非常相似,但它消除了这两种语言中的许多复杂和很少使用的特性,如......
  • terminal 显示带颜色的字符
    参考https://blog.csdn.net/u014470361/article/details/81512330终端显示字体背景和字体颜色等使用用法可输入以下指令查看其使用方法manconsole_codes在命令行下能产生五颜六色的字体和图案,只需要加上一些颜色代码,例如:printf(“\033[0;30;41mcolor!!!\033[0m......
  • BUUCTF [极客大挑战 2019]FinalSQL
    通过尝试发现注入点在search.php。传递?id=1^1报ERROR!!!;传递?id=1^0报NO!Notthis!Clickothers~~~布尔盲注importrequestsimporttimeurl="http://eab3a4cf-d57d-4236-a9f9-1383446ba4e1.node4.buuoj.cn:81/search.php?"result=''temp={"id":......
  • 【题解】ABC318
    AtCoder-ABC318AFullMoon暴力枚举判断。提交记录:Submission-AtCoderAtCoder-ABC318BOverlappingSheets暴力枚举判断。提交记录:Submission-AtCoderAtCoder-ABC318CBlueSpring使用通票一定是用在最大的\(kd\)天,排序后枚举\(k\)即可。提交记录:Submission-AtC......
  • CF1854 题解
    CF1854题解A首先考虑只有非负的情况,次数完全可以接受\(19\)次,所以直接用\(19\)次做一次前缀和就可以保证单调不降了。现在有了负数,考虑将负数变成正数,选出正数当中的最大值,然后用\(a_i+a_i\toa_i\)这样自增的方式让它的绝对值大于负数最大值,因为绝对值小于等于\(20......
  • Vue 3 之 Element Plus 之 Pagination 的 坑
    版本信息:vue.js3.3.4ElementPlus2.3.12浏览器ChromeVersion116-- 坑描述试验ElementPlus之分页时,出现了异常——之前开发的弹窗打不开了。 Pagination分页:https://element-plus.org/zh-CN/component/pagination.html 在页面加里了一些弹窗(对话框):<el-......
  • 【题解】NOIP2022
    怎么看T3也不是那么难,可是为啥赛时就是被卡死了[难过]不补\(B\)题了,ad-hoc。A.种花题目描述:小C决定在他的花园里种出\(\texttt{CCF}\)字样的图案,因此他想知道\(\textttC\)和\(\textttF\)两个字母各自有多少种种花的方案;不幸的是,花园中有一些土坑,这些位置无法种......
  • AT318 A-G 题解
    A枚举\(1\simn\)的每个数,判断是否有\(i-M\equiv0\pmodP\)即可。赛时代码B暴力覆盖即可,注意\(x,y\)均是左开右闭。赛时代码C贪心的想,如果要替换\(i\)项,那必然是替换最大的\(i\)项,因此只需要对\(f\)排序,预处理后缀和后再扫一遍取替换前\(i\)项的最小值即可......
  • 湖北省选模拟 2023 部分题解
    质量不错。为什么湖北会有这么hard的省选啊/fn。D1T1\(\color{Gold}\bigstar\)第一题就不会是我没想到的。考虑一下简单情况,一条链咋做,每次操作相当于把一个空隙的大小减小\(2\),因此可以进行一个dp。具体咋dp,先咕。然后考虑只有一个环咋做,如果是偶环,那么肯定是一直操......
  • 【 LeetCode题解 】203. 移除链表元素
    【LeetCode题解】203.移除链表元素题目链接:https://leetcode.cn/problems/remove-linked-list-elements/博客主页链接:DuckBro博客主页关注博主,后期持续更新系列文章***感谢观看,希望对你有所帮助***目录【LeetCode题解】203.移除链表元素......