Educational Codeforces Round 158 [Rated for Div. 2]

news2025/2/22 6:17:11

A. Line Trip

还算比较简单的,不过本蒟蒻一开始以为是二分答案,二分写到一半突然想到油量直接取两个加油站之间的最大距离就好了。

最大距离能过,剩下必然都能过,要特判a[n]~x距离是两倍,因为x没有加油站,车还要掉头回去。

同时题目要求的范围是n到50就行了,如果开到2e7+5这种庞大的范围并且还用上了,可能就会被大佬hack掉(虽然题目用不到50,但是大佬的hack数据里面用了2e7,那你这道题就没分了)

本蒟蒻读题实在是太慢了,罗里吧嗦讲一堆直接干蒙了。还得多练英文

B. Chip and Ribbon

题目有点长,大意就是有个芯片在a[1],每次可以选择往后走一个(比如到a[2],但是a[n]不能到a[1],还要移动必须瞬移)或者瞬移到某一个位置上(可以原位瞬移)。并且芯片到过的位置都会+1。问你把一个0 0 0 0 0 0序列变成目标序列C最少要瞬移几次。

分析

假设有操作序列A,可以将0 0 0 0 0 0序列变成目标序列C。

那么显然有操作序列A(里面全部变成减法,操作顺序不变),可以将目标序列C变成0 0 0 0 0 0序列。

那么执行整个区间都减1,如果区间中某个数被减到0了,那就必然需要多瞬移一次。

如果是区间两端被减到0了,就缩小区间两端的指针。

可以发现我们执行的次数就是区间减1的次数包括计算中间为0的数量。

每次都去减C序列的最小值,然后每减一次就去更新一次C序列。

可以发现的是每次都减最小值复杂度为n,更新一次复杂度为n,n*n刚好爆了。

由于每次更新的时候都是区间修改,我们考虑差分维护C序列。

在原序列中执行次数是区间减1的次数和计算中间为0的数量。

原序列[10,1,5]   差分序列[10,-9,4,-5](-5是n+1的部分)

可以发现差分序列中一旦有负数,那么就是0出现的次数和需要执行区间减1的次数。

因为第一次执行区间减1是免费的,所以输出ans-1

AC代码

#include <bits/stdc++.h>
#define int long long
#define fr first
#define se second
#define endl '\n'
using namespace std;

const int N=2e5+5;
int n,a[N],ans;

void solve(){
    cin>>n;
    for(int i=1,t;i<=n;++i){
        cin>>t;
        a[i]+=t;
        a[i+1]-=t;
    }
    for(int i=1;i<=n+1;++i)
        if(a[i]<0)ans+=-a[i];
    cout<<ans-1<<endl;
}

void init(){
    for(int i=1;i<=n+1;++i)
        a[i]=0;
    ans=0;
}
signed main(){
    ios::sync_with_stdio(false),cin.tie(nullptr);
    int t;
    cin>>t;
    while(t--)solve(),init();
    return 0;
}

C. Add, Divide and Floor

B题可能是我的思路有问题,所以想的特别复杂,感觉B题比C题难的多的多

C题就简单了,你每次可以选择一个数x,让序列中所有的数都执行(ai+x)/2,问执行几次序列相等。

只看一眼肯定蒙,是不是很难的数学题啊

随便举个例子就能做这道题:0 10

假设我们选x=20,那么下一个序列就会变成:0/2+20/2和10/2+20/2

可以发现我们选x=20没有使序列的差更小,反而公共的加上了20/2。

所以我们每次选x都选序列中的最小值就行了,直到最大值变成最小值。

AC代码

#include <bits/stdc++.h>
#define int long long
#define fr first
#define se second
#define endl '\n'
using namespace std;

const int N=2e5+5;
int n,minn=LONG_LONG_MAX,maxx=LONG_LONG_MIN,cnt;

void solve(){
    cin>>n;
    for(int i=1,t;i<=n;++i){
        cin>>t;
        minn=min(minn,t);
        maxx=max(maxx,t);
    }

    while(maxx!=minn){
        maxx=(maxx+minn)/2;
        cnt++;
    }

    if(cnt==0){
        cout<<0<<endl;
    }else if(cnt<=n){
        cout<<cnt<<endl;
        while(cnt--)cout<<minn<<" ";
        cout<<endl;
    }else{
        cout<<cnt<<endl;
    }
}

void init(){
    minn=LONG_LONG_MAX;
    maxx=LONG_LONG_MIN;
    cnt=0;
}
signed main(){
    ios::sync_with_stdio(false),cin.tie(nullptr);
    int t;
    cin>>t;
    while(t--)solve(),init();
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python百宝箱】Python项目生态圈:虚拟环境全指南

项目管理达人&#xff1a;Python虚拟环境的智慧选择 前言 在Python开发领域&#xff0c;创建虚拟环境是一项至关重要的任务&#xff0c;它有助于项目之间的依赖隔离&#xff0c;确保每个项目都能独立运行且使用特定的库和工具。本文将介绍多种创建Python虚拟环境的方法&#…

C语言线性表的实现(详解)

数据结构之线性表 ​ 线性表的基本概念&#xff1a;线性表是由0个或者多个数据元素的有限序列 ​ 特性是&#xff1a; ​ 1&#xff1a;数据元素之间都是有顺序的 ​ 2&#xff1a;数据元素的个数是有限的&#xff0c; ​ 3&#xff1a;数据元素的类型是相同的 ​ 性质是&…

二进制编辑器hexedit的安装及使用

Hexedit 同时以 ASCII 和十六进制显示文件 安装 终端输入hexedit回车&#xff0c;如果没安装&#xff0c;会提示让输入 sudo apt-get install hexedit 照着输入命令&#xff0c;安装。安装完成后&#xff0c;cd到一个有二进制文件的目录下&#xff0c;输入hexedit命令回车 再…

激光雷达SLAM(一)------初始激光雷达SLAM

专栏目的及认识激光雷达SLAM 一、专栏目的二、初始激光雷达SLAM1、激光雷达SLAM算法相关知识点2、SLAM常见问题[^2]3、激光雷达SLAM的需求点4、RTK在SLAM中的作用5、激光雷达视觉紧耦合图优化滤波紧耦合 一、专栏目的 大家好&#xff01;介绍一下博主自己&#xff0c;感知算法工…

在云服务器上搭建个人版chatGPT及后端Spring Boot集成chat GPT

原创/朱季谦 本文分成两部分&#xff0c;包括【国内服务器上搭建chat GPT】和【后端Spring Boot集成chat GPT】。 无论是在【国内服务器上搭建chat GPT】和【后端Spring Boot集成chat GPT】&#xff0c;两个方式都需要魔法访问&#xff0c;否则是无法正常使用的&#xff0c;即…

Java Flight Record 详解

核心概念 Java Flight Record 提供一个低开销的数据收集框架&#xff0c;用于对 Java 应用程序和 HotSpot JVM 进行故障排除。Flight Recorder 记录源自应用程序、JVM和操作系统的事件 Flight Record&#xff0c;顾名思义&#xff0c;相当于飞机黑匣子里保存的飞行记录 事件 …

vue3+ts mitt的使用

安装mitt :npm i mitt -Smain.ts: import mitt from mittconst Mit mitt();declare module vue {export interface ComponentCustomProperties{$Bus:typeof Mit} } app.config.globalProperties.$BusMit在A组件中使用 <template><div><h1>我是A<…

Leetcode—160.相交链表【简单】

2023每日刷题&#xff08;四十一&#xff09; Leetcode—160.相交链表 算法思想 两个链表的节点之和是相等的 如果两个链表相交&#xff0c;那么相交点之后的长度是相同的 我们需要做的事情是&#xff0c;让两个链表从同距离末尾同等距离的位置开始遍历。这个位置只能是较短…

【高可用架构】Haproxy 和 Keepalived 的区别

Haproxy 和 Keepalived 的区别 1.负载均衡器介绍2.Haproxy 和 Keepalived 的基本概念和特点2.1 Haproxy2.2 Keepalived 3.Haproxy 和 Keepalived 的区别3.1 功能上的区别3.2 架构上的区别3.3 配置上的区别 4.总结 1.负载均衡器介绍 负载均衡器是一种解决高并发和高可用的常用的…

【JavaSE】:数据类型

数据类型 一.总体概论二.java里与c的区别1.float2.char3.boolen 三.类型转换四.String类型 一.总体概论 在Java中数据类型主要分为两类&#xff1a;基本数据类型和引用数据类型。 不论是在16位系统还是32位系统&#xff0c;int都占用4个字节&#xff0c;long都占8个字节 。 整…

NAS非接入层协议学习(二)

在无线通信网络中 NAS (Non-Access Stratum)做为非接入层是演进分组系统(或5G核心网)中的一组协议。NAS用于在用户设备(UE)和移动管理实体(MME/AMF)之间传送非无线电信令&#xff0c;以实现NR/LTE/E-UTRAN接入。 NAS在协议栈中是控制面的最高层。 NAS协议分组中可以将其分为两…

3款免费的语音视频转文本AI神器

最近有很多粉丝让我出一期关于语音转文本的免费AI神器&#xff0c;毕竟这类工具在学习和工作中经常会用到&#xff0c;那今天就给大家安排。 我亲测了好几款软件之后&#xff0c;最终评选留下了三款 剪映hugging face飞书妙记 接下来一一给大家讲解 1.剪映 剪映其实是一款视…

因式分解的几何意义

本来准备和女儿一起玩一道几何题&#xff0c;想想还是算了&#xff0c;不如讲点更有趣的。 任何因式分解都是在堆积木&#xff0c;不信你看&#xff1a; 二项式定理&#xff0c;洋灰三角&#xff0c;都是面积&#xff0c;体积&#xff0c;超维体积的拼接&#xff0c;一个大超…

Python | CAP - 累积精度曲线分析案例

CAP通常被称为“累积精度曲线”&#xff0c;用于分类模型的性能评估。它有助于我们理解和总结分类模型的鲁棒性。为了直观地显示这一点&#xff0c;我们在图中绘制了三条不同的曲线&#xff1a; 一个随机的曲线&#xff08;random&#xff09;通过使用随机森林分类器获得的曲线…

leetcode_828_统计子串中的唯一字符

题意&#xff1a;所有子串中单个字符出现的次数和 问题转化&#xff1a;对于串中的每个字符&#xff0c;只包含其一次的所有子串的个数和 关于求只包含某位置字符一次的子串个数 class Solution { public:int uniqueLetterString(string s) {/* ...A...A...A...*/int n s.size…

【C++】类型转换 ② ( C++ 静态类型转换 static_cast | C 语言隐式转换弊端 | 代码示例 )

文章目录 一、静态类型转换 static_cast1、C 静态类型转换 static_cast2、C 语言隐式转换弊端3、代码示例 在之前写过一篇 C 类型转换的博客 【C 语言】类型转换 ( 转换操作符 | const_cast | static_cast | dynamic_cast | reinterpret_cast | 字符串转换 ) , 简单介绍了 C 类…

linklab phase1 更简单的方法

直接反汇编phase1.o&#xff0c;看eax中是0x21&#xff0c;0x21在数据域中&#xff0c;直接把从第21个字节的内容改为0000000000即可。

【python】--文件/文件夹读写及操作

目录 一、文件读写1、文件读写代码示例 二、文件/文件夹操作1、代码示例 一、文件读写 读写文件就是请求操作系统打开一个文件对象&#xff08;通常称为文件描述符&#xff09;&#xff0c;然后通过操作系统提供的接口从这个文件对象中读取数据&#xff08;读文件&#xff09;…

【如何修改输入法切换键】

操作 以win10为例&#xff0c;点开系统设置&#xff0c;选择时间和语言 选择语言&#xff0c;找到首选语言中的中文&#xff0c;点击选项 点击其中的微软输入法 选择按键 在按键中进行输入法切换按键的选择

Atcoder Beginner Contest 330——A~F题

A - Counting Passes Description Problem Statement N N N people labeled 1 , 2 , … , N 1,2,\dots,N 1,2,…,N took an exam, and person i i i scored A i A_i Ai​ points. Only those who scored at least L L L points pass this exam. Determine how many peopl…