codeforces 题目 Line Empire

目录

题目:

题目描述:

思路:

分析:

结论:

AC代码:


题目:

题目描述:

对于每个案例,先给你三个整数(n,a,b)(需要征服的国家数,征服系数,搬家系数)

再给你 n 个整数代表要征服的国家位置 Xi 

你的首都的起始位置在 0 ,你可以有两种操作:

① 移动你的首都从 c1 到 c2(另一个已被征服的国家位置),花费 a * | c1 - c2 |

② 假设首都在 c1 ,要征服的国家在 c2 ,那么征服这个国家的花费是 b * | c1 - c2 |,注意,你要征服的国家与你的首都之间不能有未征服的国家,并且征服完一个国家之后首都并不会变

请寻找能征服这 n 个国家的最小花费(最后首都在哪里都无所谓)

思路:

题目描述可能有点混乱,简单来说你只有两种操作,你的首都起始位置在 0 ,要么攻打右边第一个未被攻打的国家,要么考虑往右边搬到一个已经攻打了的国家。

所以怎么才能让花费最少?

如果不想听我分析可以直接看结论(可点击)


分析:

首先,对于花费来说,其实只有两类,①征服路花费  ②搬家路花费

我们可以用两种颜色的线来表示两类花费

总花费就变成了两种颜色的线段长度分别乘上对应的系数(搬家路系数 a 征服路系数 b 

然后,我们先入为主找两个特例尝试一下

特例1:

如果一直不搬家,我们的花费是多少?

此时,总花费就是所有橙色线段的长度和乘上征服系数b,同时我们也发现,如果不搬家,前面路径重叠的部分很多,如果征服路系数 b 特别大, 搬家路系数a 比较小的话,搬家能够有效的减少前面重复路径,达到俭省总费用的目的。

特例2:

如果征服完一个就立刻搬家呢?

很明显,相较于特例1,特例2 减少了很多橙色路径,但相对的,如果搬家路系数 a 非常大,那么有可能特例2 还不如特例1 .....

特例3:

如果我们确定一定要搬到 5 的位置,两种方式的比较(③征服完 3 立刻搬 和 ④征服完 5 再一起搬)

发现,③ 比 ④多出来了一段橙色路径,所以如果确定了要搬到某个位置,立刻搬一定比等征服完几个之后一起搬更节省。如果能确定下来是否搬到某节点,立刻搬首都的决策是无后效性的。

.........

通过特例1 和特例2 ,我们需要对后面的情况预先进行规划,特例3 让我们知道,如果征服了一个地方,我们必须立刻做出判断是否搬首都到此位置,如果不搬那就永远不搬了

那么当我们征服完一个国家之后,如何判断是否搬?如下图

上面是搬,下面是不搬,我们可以看到唯一的区别就是两个黑色框,那我们比较这两个黑框内谁更小即可,然后进行相对的操作

结论:

开两个前缀和,征服前缀和( precon[ ] )搬家路前缀和( premov[ ] )

从左到右依次遍历每一个要征服的国家,每一次,都征服这个国家,征服过后判断是否要搬到此地

此时假设:

首都位置为 last

征服掉的国家是第 i 个

后面未征服的国家数 temp

c1(不搬)和c2(搬)为两种选择

结合这张图,我们可以知道:

temp = n - i

c1 = temp * ( precon[ i ] - precon[ last ])

c2 = premov[ i ] - premov[ last ]

若 c1 >= c2 说明搬合适,我们更新 last 到当前第 i 个国家的位置,并将搬首都费加到总和内

若 c1 < c2 说明不搬合适,直接去征服下一个国家即可

思路有了,具体操作请看AC代码

AC代码:

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
const int N = 2e5 + 5;

ll x[N];//位置
ll precon[N];//征服费前缀
ll premov[N];//搬家费前缀

void solve()
{
	ll n, a, b;
	ll sum = 0;
	cin >> n >> a >> b;

	for (int i = 1; i <= n; i++)
	{
		cin >> x[i];
		premov[i] = premov[i - 1] + (x[i] - x[i - 1]) * a;
		precon[i] = precon[i - 1] + (x[i] - x[i - 1]) * b;
	}


	ll last = 0;//首都位置
	for (ll i = 1; i <= n; i++)
	{
		sum += precon[i] - precon[last];
		if (i == n)
			break;

		ll temp = n - i;

		ll c1, c2;//两种操作
		c1 = temp * (precon[i] - precon[last]);
		c2 = premov[i] - premov[last];

		if (c1 >= c2)
		{
			sum += c2;
			last = i;
		}
	}
	cout << sum << '\n';
}

int main()
{
	std::ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t;
	cin >> t;
	while (t--)
		solve();
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

项目分析:解决类的复杂设计中遇到的问题

1.问题1&#xff1a;析构函数乱码问题 【样例输入】 -3 1 3 -1 -3 2 3 -2 【样例输出】 gouzao 1 -3 1 3 -1 gouzao 2 -3 2 3 -2 -3 1 3 -1 -3 2 3 -2 9.4245 18.849 Ellipse xigou 3 -2 Point xigou 3 -2 Point xigou -3 2 Point xigou 3 -2 Point xigou -3 2…

DS1307时钟模块使用记录

在网上买的一个模块&#xff0c;准备做外部的一个时钟&#xff0c;接入自己其他的项目中&#xff0c;以它的时间为基准&#xff0c;执行每半小时更新时间到其他产品中去 模块采用软件IIC方式读写&#xff0c;需给此模块VCC供5V电压 读写效果如下&#xff1a; 源代码&#xff1…

持续集成交付CICD:GitLabCI 实现Sonarqube代码扫描

目录 一、实验 1.GitLabCI 代码扫描 二、问题 1.GitLab 执行sonar-scanner命令报错 一、实验 1.GitLabCI 代码扫描 &#xff08;1&#xff09;打开maven项目 &#xff08;2&#xff09;maven项目流水线调用公共库 &#xff08;3&#xff09;项目组添加token认证 &#xf…

电位器是什么

电位器 电子元器件百科 文章目录 电位器前言一、电位器是什么二、电位器的类别三、电位器的应用实例四、电位器的作用原理总结前言 电位器是一种可调节的电阻器,通过改变电位器的接触位置,可以改变电位器的电阻值,用于调节电路中的电流、电压、信号等参数。 一、电位器是什…

推荐5款很牛的Paas平台编译构建工具

发现市面上这方面的文章还比较少&#xff0c;来扩充一下。 常用的 PaaS 平台内的构建工具包括了以下这些&#xff1a; 一、AWS CodeBuild 托管在 AWS 云平台上&#xff0c;具有高可用性和弹性。支持多种编程语言和框架&#xff0c;包括 Java、Python、Node.js、Ruby 等。可以…

履带吊,笔记

0.前言 履带吊使用了与传统的门桥式起重机不同的技术路线。因为它是移动式设备&#xff0c;所以它的动力是燃油发动机。为了精确调控升降。它的整套动力系统似乎采用了某种液压传动系统。履带吊国内也有生产商。但是下文中&#xff0c;还是从国外的一款产品说起。这款产品的pd…

HarmonyOS开发工具DevEco Studio的下载和安装

一、DevEco Studio概述 一、下载安装鸿蒙应用开发工具DevEco Studio 开发鸿蒙应用可以从鸿蒙系统上运行第一个程序Hello World开始。 为了得到这个Hello World&#xff0c;你需要得到这个Hello World的源代码&#xff0c;源代码是用人比较容易看得懂的计算机编程语言规范写的…

2024黑龙江省职业院校技能大赛信息安全管理与评估样题第二三阶段

2024黑龙江省职业院校技能大赛暨国赛选拔赛 "信息安全管理与评估"样题 *第二阶段竞赛项目试题* 本文件为信息安全管理与评估项目竞赛-第二阶段试题&#xff0c;第二阶段内容包括&#xff1a;网络安全事件响应、数字取证调查和应用程序安全。 极安云科专注技能竞赛…

Java对象转Map

在和外部系统对接时&#xff0c;对方系统提供的SDK方法入参全是Map&#xff0c;没办法&#xff0c;只能想办法把对象转成Map。这里&#xff0c;借助了hutool的工具类&#xff0c;可以方便的通过反射获取对象的属性。引入hutool的maven配置&#xff1a; <dependency><g…

从霸总短剧的热播,看出海品牌如何巧妙利用短剧进行全球推广

近期&#xff0c;中国式“霸总”短剧在国外走红&#xff0c;看着这熟悉的剧情模式和作品结构&#xff0c;让一众国内网友震惊的同时&#xff0c;也为中国品牌的全球推广带来了新的思路和灵感。本文Nox聚星将和大家从霸总短剧在海外的热播出发&#xff0c;探讨出海品牌如何巧妙利…

附录2、vuepress自定义home页

# 1、vuepress的主体继承 # 2、创建覆盖的home页面 从Github官网仓库中拷贝文件 [外链图片转存中…(img-hpmT5V89-1701937211778)] # 3、修改需要的样式 # 效果 改之前 [外链图片转存中…(img-mCfFRWok-1701937211783)] 改之后 [外链图片转存中…(img-aeQg8j1B-170193721178…

几分钟在Ubuntu搭建本地Emlog博客网站并发布至公网无需购买域名服务器

文章目录 前言1. 网站搭建1.1 Emolog网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 3. 公网访问测试总结 前言 博客作为使…

[MySQL] MySQL中的内置函数

本篇文章主要是对MySQL中常见的内置函数进行了详细解释。例如有日期类函数、字符串类函数、数学类函数等等。希望本篇文章会对你有所帮助。 文章目录 一、日期类函数 1、1 使用详解 1、2 实例演示 二、字符串函数 2、1 使用详解 2、2 实例演示 三、数学函数 四、其他函数 &…

Linux Docker 安装Nginx

1.21、查看可用的Nginx版本 访问Nginx镜像库地址&#xff1a;https://hub.docker.com/_/nginx 2、拉取指定版本的Nginx镜像 docker pull nginx:latest #安装最新版 docker pull nginx:1.25.3 #安装指定版本的Nginx 3、查看本地镜像 docker images 4、根据镜像创建并运行…

Linux学习笔记2

web服务器部署&#xff1a; 1.装包&#xff1a; [rootlocalhost ~]# yum -y install httpd 2.配置一个首页&#xff1a; [rootlocalhost ~]# echo i love yy > /var/www/html/index.html 启动服务&#xff1a;[rootlocalhost ~]# systemctl start httpd Ctrl W以空格为界…

2024年安防行业预测:5G与安防视频监控技术的5大关键趋势

5G技术是一项以前所未有的速度和可靠性提供数据传输的技术&#xff0c;它的出现将极大地促进安防视频监控技术的发展。随着5G技术的快速发展&#xff0c;安防视频监控系统将在多个方面迎来显著的改进和创新。伴随着2023年进入尾声&#xff0c;2024即将到来&#xff0c;那么在20…

静态住宅代理科普——实际应用场景以及如何配置?

住宅代理IP不仅是理论上的网络工具&#xff0c;它在多个实际应用场景中表现突出&#xff0c;极大地便利了用户的网络操作。接下来&#xff0c;将深入探讨住宅代理IP在市场调研、内容访问、社交媒体管理等方面的实际应用&#xff0c;揭示其在不同领域的实用价值。 ## 实际应用场…

【Java】实验三

实现加减乘除功能的计算器 实验要求 (1)界面包括菜单栏、显示区和按键区,参照附件中的计算器,如下: (2)功能要求:先实现加减乘除,其他功能根据自己的进度尽可能多地实现。附部分按键的功能说明: 1、C是清除键,功能是将之前输入的数字、计算结果等信息全部归零。…

常见动物经济手术3d模拟交互演示教学实现了教育资源的共享

动物常见病防治是兽医必备的技能&#xff0c;为了让实习兽医在上岗作业前拥有丰富的常见病防治经验。借助动物常见病防治VR虚拟仿真技术开展动物常见病防治VR模拟实操培训&#xff0c;能极大方便院校实训。 提高教学质量 传统的动物医学教学往往依赖于理论知识和实验室实践&…