2024.12.26 周四

news/2024/12/28 11:49:22/文章来源:https://www.cnblogs.com/jkkk/p/18637346

2024.12.26 周四


Q1. 1100

There is a ribbon divided into $n$ cells, numbered from $1$ to $n$ from left to right. Initially, an integer $0$ is written in each cell.

Monocarp plays a game with a chip. The game consists of several turns. During the first turn, Monocarp places the chip in the $1$-st cell of the ribbon. During each turn except for the first turn, Monocarp does exactly one of the two following actions:

  • move the chip to the next cell (i. e. if the chip is in the cell $i$, it is moved to the cell $i+1$). This action is impossible if the chip is in the last cell;
  • choose any cell $x$ and teleport the chip into that cell. It is possible to choose the cell where the chip is currently located.

At the end of each turn, the integer written in the cell with the chip is increased by $1$.

Monocarp's goal is to make some turns so that the $1$-st cell contains the integer $c_1$, the $2$-nd cell contains the integer $c_2$, ..., the $n$-th cell contains the integer $c_n$. He wants to teleport the chip as few times as possible.

Help Monocarp calculate the minimum number of times he has to teleport the chip.


------------------------独自思考分割线------------------------

  • 思维与观察,递推思想,是有趣的题..


A1.

  1. 本质就是在求在一个全 $0$ 数组中不断对其连续子串加 $1$至少加多少次才能变成指定数组。
  2. 观察/递推思维:在全局寻找答案比较难时考虑从开始递推寻找答案。如果画出以下图定会助力思考。
  3. 出了2个假思路,第三次基本正确比正解复杂点且不知道wa哪里了。

------------------------代码分割线------------------------

A1.

#include <bits/stdc++.h>
#define int long long //
#define endl '\n'     // 交互/调试 关
using namespace std;
#define bug(BUG) cout << "bug:# " << (BUG) << endl
#define bug2(BUG1, BUG2) cout << "bug:# " << (BUG1) << " " << (BUG2) << endl
#define bug3(BUG1, BUG2, BUG3) cout << "bug:# " << (BUG1) << ' ' << (BUG2) << ' ' << (BUG3) << endl
void _();
signed main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cout << fixed << setprecision(6);int T = 1;cin >> T;while (T--)_();return 0;
}
void _()
{int n;cin >> n;vector<int> a(n + 1);for (int i = 1; i <= n; i++)cin >> a[i];int res = -1;for (int i = 1; i <= n; i++)res += a[i] > a[i - 1] ? a[i] - a[i - 1] : 0;cout << res << endl;
}
// void _()
// {
//     int n;
//     cin >> n;
//     vector<int> a(n + 2);
//     int cnt = 0;
//     for (int i = 1; i <= n; i++)
//     {
//         int x;
//         cin >> x;
//         if (i == 1 || x - a[i - 1])
//             a[++cnt] = x;
//     }
//     n = cnt;//     map<int, int> has;
//     for (int i = 1; i <= n; i++)
//         if (a[i] > a[i - 1] && a[i] > a[i + 1])
//             has[a[i]]--;
//         else if (a[i] < a[i - 1] && a[i] < a[i + 1])
//             has[a[i]]++;//     cnt = 1;
//     int last = 0, res = 0;
//     for (auto [x, val] : has)
//     {
//         res += (x - last) * cnt;
//         last = x;
//         cnt += val;
//     }
//     res--;
//     cout << res << endl;
// }
// void _()
// {
//     int n;
//     cin >> n;
//     vector<vector<int>> vec;
//     vector<int> a(n + 1);
//     for (int i = 1; i <= n; i++)
//         cin >> a[i];//     for (int i = 1; i <= n; i++)
//         if (a[i])
//         {
//             vector<int> t;
//             int j = i;
//             for (; j <= n && a[j]; j++)
//                 t.push_back(a[j]);
//             i = j - 1;
//             vec.push_back(t);
//         }
//     // bug(vec.size());
//     int res = vec.size() - 1;
//     for (auto a : vec)
//     {
//         sort(a.rbegin(), a.rend());
//         res += a[0] - 1;
//     }
//     cout << res << endl;
// }
// void _()
// {
//     int n;
//     cin >> n;
//     int res = 0;
//     int cnt = 0, maxw = 0;
//     for (int i = 0; i < n; i++)
//     {
//         int x;
//         cin >> x;
//         if (x)
//             cnt++, maxw = max(maxw, x);
//         else
//         {
//             if (cnt)
//             {
//                 res++;
//                 res += maxw - 1;
//                 cnt = 0;
//                 maxw = 0;
//             }
//         }
//     }
//     if (cnt)
//     {
//         res += maxw - 1;
//         cnt = 0;
//         maxw = 0;
//     }
//     cout << res << endl;
// }

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

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

相关文章

UML之集合类型

无论何时当我们要使用一个多值对象时,我们必须要清楚两个问题,一是这些值的顺序重要吗?二是允许重复值的存在吗?在编程语言中还会有其他的明确的信息,在UML中,只需明确这两个问题的答案即可确定对应的集合类型。 1.Set Set是一个不允许存在重复值且未排序的集合。 例如一…

《计算机基础与程序设计》第十四周学习总结

学期(2024-2025-1) 学号(20241412) 《计算机基础与程序设计》第十四周学习总结 作业信息这个作业属于哪个课程 <班级的链接> 2024-2025-1-计算机基础与程序设计这个作业要求在哪里 <作业要求的链接> 2024-2025-1计算机基础与程序设计第十四周作业)教材学习内容…

2024-2025-1 20241417 《计算机基础与程序设计》第十四周学习总结

2024-2025-1 20241417 《计算机基础与程序设计》第十四周学习总结 作业信息这个作业属于哪个课程 <班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 <作业要求的链接>2024-2025-1计算机基础与程序设计第十四周作业这个作业的目标 <《C语言…

【Windows】 国内安装Scoop包管理器(镜像加速)

由于国内github访问不通畅,且多数开源软件托管在github,导致scoop体验极差,甚至安装Scoop这一步都无法进行。国内有位作者将scoop主程序托管在gitee,增加分流逻辑处理安装与更新所涉及的资源。 链接: https://gitee.com/scoop-installer/scoop 安装scoop主程序 1.1 初次安…

07 _ Load Average:加了CPU Cgroup限制,为什么我的容器还是很慢?

07 _ Load Average:加了CPU Cgroup限制,为什么我的容器还是很慢?你好,我是程远。今天我想聊一聊平均负载(Load Average)的话题。 在上一讲中,我们提到过CPU Cgroup可以限制进程的CPU资源使用,但是CPU Cgroup对容器的资源限制是存在盲点的。 什么盲点呢?就是无法通过CP…

高效搭建Nacos:实现微服务的服务注册与配置中心

Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一款动态服务发现、配置管理和服务管理平台。它旨在帮助开发者更轻松地构建、部署和管理分布式系统,特别是在微服务架构中。一、关于Nacos 1.1 简介 Nacos(Dynamic Naming and Configuration Service)是阿…

文章评分2

zz:https://blog.csdn.net/Y_sofun/article/details/74502970nodgd的文章由n个小写英文字母组成。文章的一个子串指的是文章中的一段连续的字母,子串的长度就是这一段的字母个数。nodgd在文章中用了排比、对偶、前后照应之类的手法,所以就有很多个子串是相同或者相近的。为了…

02 _ 理解进程(1):为什么我在容器中不能kill 1号进程?

02 _ 理解进程(1):为什么我在容器中不能kill 1号进程?你好,我是程远。 今天,我们正式进入理解进程的模块。我会通过3讲内容,带你了解容器init进程的特殊之处,还有它需要具备哪些功能,才能保证容器在运行过程中不会出现类似僵尸进程,或者应用程序无法graceful shutdow…

Camstar Portal 弹出层的使用:父子页面值传递

效果如下在Onload方法注册事件 protected override void OnLoad(EventArgs e) {try{base.OnLoad(e);SearchBtn.Click += new EventHandler(SearchBtn_Click);TranslateDetails.RowSelected += new JQGridEventHandler(TranslateDetails_SelectChanged);if (SEMI.AppCode.UIUtil…

如何使用飞书自定义机器人通知消息

大家有没有这样的需求,就是正在执行某个任务的时候希望任务完成之后给个通知,或者是软件运行报错的时候每天定期收集错误日志。 平时我们工作用的飞书,所有现在用飞书机器人把消息通知出来,非常简单 好用 的消息通知。 类似这样的消息通知还有企业微信也有。飞书拉群的时候添…

01 _ 认识容器:容器的基本操作和实现原理

01 _ 认识容器:容器的基本操作和实现原理你好,我是程远。作为一名工程师,我猜在过去的几年时间里,你肯定用过或者听人提起过容器(Container)。 说实话,容器这东西一点都不复杂,如果你只是想用的话,那跟着Docker官网的说明,应该十来分钟就能搞定。 简单来说,它就是个…