首页 > 编程语言 >[Luogu-P1007]题解(C++)

[Luogu-P1007]题解(C++)

时间:2023-05-06 11:01:30浏览次数:38  
标签:min int 题解 pos C++ Luogu Part long max

Part I Preface

原题目(Luogu)

Part II Sketch

  • 给定一个正整数 \(L\),表示独木桥长度。
  • 给定一个正整数 \(N\),表示桥上士兵的数量。
  • 给定 \(N\) 个整数,分别表示每个士兵的坐标。
  • 规定走到 \(0\) 坐标或 \(L+1\) 的位置为下桥,两个士兵相遇时不能走过去,他们会各自回头走。求出所有士兵撤离独木桥的最短时间,和最大时间(行走一个单位花费 \(1\) 个时间单位)。

Part III Analysis

嗯,看到这道题我不禁对这道题的普及-难度非常怀疑。啥?大模拟?
自己观察,不难发现两个人相遇的时候,左面的人相当于继承右面的人继续走,右面的人也一样,所以其实这个转向和最终的结果没有任何关系。我们只要求出一个人到底是向左走还是向右走下桥那个更快哪个更慢,记录下来即可。
向左下桥,要走 \(pos\) 单位,向右走下桥要走 \(L - pos + 1\) 单位。
设最小值为 \(min\_\),最大值为 \(max\_\)。那么每次更新时依据 \(max\_ = max(max\_, max(L - pos + 1, pos)), min\_ = max(min\_, min(L - pos + 1, pos))\)
很巧妙的一题,建议大家去补。

Part IV Code

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
int L, N, pos;
int max_ = 0, min_ = 0;
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin >> L >> N;
    for(int i = 1; i <= N; i++){
        cin >> pos;
        max_ = max(max_, max(L - pos + 1, pos));
        min_ = max(min_, min(L - pos + 1, pos));
    }
    cout << min_ << ' ' << max_;
    return 0;
}

Part V Record


Record

标签:min,int,题解,pos,C++,Luogu,Part,long,max
From: https://www.cnblogs.com/silentBlog/p/17376528.html

相关文章

  • 高速爬过C++(2级)
    恭喜你升到2级,打怪不容易,虽然别的地方打一个怪可以升到99级!当我们用铅笔在白纸上画画时,会发生什么?我们弄脏了白纸。为啥会弄脏,原来是摩擦将铅笔粉留在了白纸上。虽然我们可以只关心画出什么样的图案而不管那些什么复杂的物理现象但是有时力道、速度也会影响成画的效果。所以......
  • 【HarmonyOS】【FAQ】HarmonyOS应用开发相关问题解答(一)
     【前提简介】本文档主要总结HarmonyOS开发过程中可能遇到的一些问题解答,主要围绕HarmonyOS展开,包括但不限于不同API版本HarmonyOS开发、UI组件、DevEcoStudio、Gitee示例代码等,并将持续更新哦。 【官方FAQ】【FAQ】HarmonyOS应用及服务开发常见问题汇总(官方总结,持续更新):ht......
  • 高速爬过C++(0级)
    魔镜:你想要什么?我:什么都想要魔镜:你有什么?我:什么都没有魔镜:我有的,你已经拥有。 掠过一本C++教程目录,似懂非懂的概念名称撞击大脑,让我两眼冒金星。魔镜什么都没有,所以我也什么都没有,心里默念了好几遍。我从0级开始闯入这本C++教程,虽然很久很久以前玩过,多少级?不说不说,好汉不......
  • [AtCoder-AT_ABC108_B]题解(C++)
    PartIPreface原题目(Luogu)原题目(AtCoder)PartIISketchPartIIIAnalysis观察这道题,我们很容易想到,必须推导出\(x1,y1,x2,y2\)与\(x3,y3,x4,y4\)之间的关系。我们观察下图。可以发现:\(\begin{aligned}\begin{cases}x3=x2-(y2-y1)\\y3=y2+(x2-......
  • [CodeForces-143A]题解(C++)
    PartIPreface原题目(Luogu)原题目(CodeForces)PartIISketch设有一个\(2\times2\)的棋盘,上面可以填入\(1-9\)的数字。给出\(6\)个数字,为每行每列以及每个对角线上的数字之和,求相应的摆放方式,无解输出\(-1\)。PartIIIAnalysis观察此题数据规模,不难发现数据......
  • [CodeForces-1104A]题解(C++)
    PartIPreface原题目(Luogu)原题目(CodeForces)PartIISketch给定一个整数\(n\)。将\(n\)拆分成一个数列\(a_1,a_2,a_3,\dots,a_m\)。使得\(\sum\limits_{k=1}^{m}a_k=n\),每个\(a_i\in[0,9]\)且数列中不相同的数的数量尽量少。PartIIIAnalysis我们很容易......
  • c++打卡第十九天
    一、问题描述 二、设计思路。①、定义总鱼数为x条,这个x我们需要使用double类型定义,②、第一次剩余x1=x-(x/2+1/2);第二次剩余x2=x1-(x1/3+1/3)第三次剩余x3=x2-(x2/4+1/4)第四次剩余x4=x3-(x3/5+1/5)x4=11;③、我们可以使用循环实现此方程。即x-(x/j+1/j);③、使用数组存储每次卖鱼......
  • C++类模板(模板类)
    参考资料:C++类模板(模板类)详解(biancheng.net) 人们需要编写多个形式和功能都相似的函数,因此有了函数模板来减少重复劳动;人们也需要编写多个形式和功能都相似的类,于是 C++ 引人了类模板的概念,编译器从类模板可以自动生成多个类,避免了程序员的重复劳动。例如,在《C++运算符重......
  • C++11生成随机数
    一、random_device类classrandom_device{public:typedefunsignedintresult_type;//constructor构造函数explicitrandom_device(conststd::string&token="");//propertiesstaticresult_typemin();staticresult_typemax()......
  • 【模板】堆 题解
    题目传送门一道小根堆模板题。在做这道题之前,我们先介绍一下小根堆是什么。我们定义小根堆是一种对于任何一个父结点的权值总是小于或等于子节点权值的完全二叉树。因此,不难看出,一个小根堆的堆顶(这棵树的根节点)应该是这个堆(树)中权值最小的结点。简单介绍完了小根堆,我们再介绍......