首页 > 其他分享 >CF1922C的题解

CF1922C的题解

时间:2024-03-27 12:33:57浏览次数:20  
标签:CF1922C 第二种 int 题解 ltor 100010 代价

(一)

从 \(i\) 到 \(j\) 有两种走法,一种是用 \(a_j-a_i\) 的代价,一种是用 \(1\) 的代价,前提是 \(j\) 是 \(i\) 最近的。

显然如果符合条件选第二种。

先考虑从左向右走。(和从右向左相同)

考虑走到了节点 \(i\),如果 \(a_{i+1}-a_{i}>a_{i}-a_{i-1}\),那么花费 \(1\) 的代价向右走,否则花费 \(a_{i+1}-a_{i}\) 的代价向右走。

用类似于前缀和的方法统计,由于每一步用哪种与前面无关(肯定能选第二种就第二种),那么只用从左到右,从右到左都扫一遍即可。

\(ltor_{i}\) 表示从 \(1\) 走到 \(i\) 最少代价。

从 \(l\) 到 \(r\) 最少代价即为 \(ltor_{r}-ltor_{l}\)。

(二)

AC 代码。

#include<bits/stdc++.h>
#define int long long
using namespace std;
int t,n,l,r,q,a[100010],ltor[100010],rtol[100010];
signed main(){
	scanf("%lld",&t);
	while(t--){
		scanf("%lld",&n);
		for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
		for(int i=2;i<=n;i++){
			if(a[i]-a[i-1]<=a[i-1]-a[i-2]||i==2)ltor[i]=ltor[i-1]+1;
			else ltor[i]=ltor[i-1]+a[i]-a[i-1];
		}
		for(int i=n-1;i>=1;i--){
			if(a[i+1]-a[i]<=a[i+2]-a[i+1]||i==n-1)rtol[i]=rtol[i+1]+1;
			else rtol[i]=rtol[i+1]+a[i+1]-a[i];
		}
		scanf("%lld",&q);
		while(q--){
			scanf("%lld%lld",&l,&r);
			if(l<r)printf("%lld\n",ltor[r]-ltor[l]);
			else printf("%lld\n",rtol[r]-rtol[l]);
		}
	}
	return 0;
}
```

标签:CF1922C,第二种,int,题解,ltor,100010,代价
From: https://www.cnblogs.com/Jh763878/p/18098713

相关文章

  • AT_arc169_a的题解
    (一)由于每次把子节点的权值加到父节点中,深度越深影响越大。将\(1\)号节点视作父节点,不难发现,同一深度的节点对其贡献度相等,都为\(1\timesnow\val\)。因为\(10^{100}\)极大,所以统计每层权值和,从深往浅扫。(二)AC代码。#include<bits/stdc++.h>#defineintlonglongus......
  • CF1922B的题解
    (一)因为\(2^{n}+2^{n}=2^{n+1}\)。设取的三个数为\(2^i\),\(2^j\),\(2^k\),\(i\lej\lek\)。因为\(2^i+2^j>2^k\),所以\(j=k\)。(反证法易证)此时\(i\)任意取。注意不要重复取。将答案分为两类计算,\(i=j=k\)和\(i<j=k\)。(二)AC代码。#include<bits/stdc++.h>#define......
  • 20240327每日一题题解
    20240327每日一题题解Problem一些整数可能拥有以下的性质:性质1:是偶数;性质2:大于\(4\)且不大于\(12\)。小A喜欢这两个性质同时成立的整数;Uim喜欢这至少符合其中一种性质的整数;小B喜欢刚好有符合其中一个性质的整数;正妹喜欢不符合这两个性质的整数。现在给出一个......
  • 第三届信大超越杯团体赛题解
    第三届信大超越杯团体赛题解A红红找蓝蓝​​​​题解:宽搜bfs,定义状态{x,y,d,Dir}表示:到(x,y)点拐了d次弯,上一次的方向为Dir与最短路不同的是,我们从一个点出发要把一个方向上的所有点加入队列,因为这个方向上所有点的拐弯数都只是+1,为了维护先搜到的点拐弯数越少,就要把一个方向......
  • 【蓝桥杯选拔赛真题48】C++九进制回文数 第十四届蓝桥杯青少年创意编程大赛 算法思维
    目录C++九进制回文数一、题目要求1、编程实现2、输入输出二、算法分析三、程序编写四、程序说明五、运行结果六、考点分析七、推荐资料C++九进制回文数第十四届蓝桥杯青少年创意编程大赛C++选拔赛真题一、题目要求1、编程实现提示信息:回文数:反向排列与原......
  • [题解]P5858 Golden Sword
    P5858「SWTR-3」GoldenSword第一道自己想出递推公式并且成功\(AC\)的\(dp\)绿题。题意简述有\(n\)种原料,每个原料有一个耐久度\(a[i]\),必须按照\(1,2,…,n\)的顺序放入炼金锅。但是炼金锅的容量是有限的,只有\(w\),所以在每次放入原料之前,都可以选择取出\(0\sims\)个原料再放......
  • 启动应用程序出现dmrc.dll找不到问题解决
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个dmrc.dll文件(挑选合适的版本文件)把它放入......
  • 启动应用程序出现dmusic.dll找不到问题解决
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个dmusic.dll文件(挑选合适的版本文件)把它放......
  • 启动应用程序出现dot3hc.dll找不到问题解决
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个dot3hc.dll文件(挑选合适的版本文件)把它放......
  • 2024年3月26号题解
    EightII解题思路使用IDA*算法进行搜索,同时遍历所有高度中最小的,再保存dfs中的路径就可以了代码实现#include<sstream>#include<iostream>#include<algorithm>#include<cstring>#include<unordered_map>#include<queue>#include<set>usingnamespacestd;......