USACO 1月比赛 铜组题解


比赛链接:http://usaco.org/

第一题:MAJORITY OPINION

标签:思维、模拟
题意:给定一个长度为 n n n的序列 a a a,操作:若区间 [ i , j ] [i,j] [i,j]内某个数字 k k k出现的次数 大于区间长度的一半,可以将区间内的所有数都换成这个数 k k k。经过多次操作之后,让区间 [ 1 , n ] [1,n] [1,n]内都为同一个数,输出所有可能的数(按照数字递增的顺序),若没有输出 − 1 -1 1。( 1 < = n < = 1 0 5 , 1 < = a i < = n 1<=n<=10^5,1<=a_i<=n 1<=n<=105,1<=ai<=n
题解:连续两个相同的数,不管是往前还是往后一个,都可以把加进来的数变成区间内的这个数。
比如 x y y z x\ y \ y \ z x y y z可以往前把 x x x变成 y y y,往后把 z z z变成 y y y,那其实再往前或者再往后 可以把所有数都变成 y y y
除此之外,还有 y x y y \ x\ y y x y的情况也是满足条件的,先把中间的这个 x x x变成 y y y,然后也可以把所有数都变成 y y y

最终就变成了求第 i i i数和 i − 1 i-1 i1个数或者第 i − 2 i-2 i2个数 是否相同,相同的话,就可以去作为我们的答案,当然可能有重复的情况,所以要去重输出。
代码

#include <bits/stdc++.h>
using namespace std;const int N = 1e5 + 10;
int t, n, a[N], res[N];int main() {cin >> t;while (t--) {cin >> n;int c = 0;for (int i = 1; i <= n; i++) {cin >> a[i];if (i >= 2 && a[i] == a[i - 1]) res[++c] = a[i];else if (i >= 3 && a[i] == a[i - 2]) res[++c] = a[i];}sort(res + 1, res + 1 + c);c = unique(res + 1, res + 1 + c) - res - 1;if (c == 0) cout << -1 << endl;else {for (int i = 1; i < c; i++) {cout << res[i] << " ";}cout << res[c] << endl;}}return 0;
}

第二题:CANNONBALL

标签:模拟
题意:给定一个从左往右 1 , 2 , . . . , N 1,2,...,N 1,2,...,N标记的数轴,从其中某个位置 S S S开始往右跳,初始能量为 1 1 1。如果当前能量为 k k k,将会从当前位置往前跳 k k k的距离。
每个标记的位置,要么是跳板,要么是靶子,每个位置都有值 v i v_i vi
跳板:跳到跳板上,当这个位置的值是 v i v_i vi,当前能量会增加 v i v_i vi,并反转跳的方向。
靶子:跳到靶子上,如果当前能量大于等于 当前位置的值 v i v_i vi,将会打破靶子,靶子被破坏掉后,将会一直维持破坏的状态,下次跳到这个位置无法被打破。
假设可以跳无限长的时间,或者离开数轴位置,能打破多少个靶子?( 1 < = N < = 1 0 5 1<=N<=10^5 1<=N<=105
题解:维持当前朝向 d i r dir dir,当前能量 e n e r g y energy energy,模拟跳的过程,当跳的过程中 s < 1 s<1 s<1或者 s > n s>n s>n结束。每次按照规则进行模拟跳,跳板的时候增加能量值,反转跳的方向,打靶的时候标记一下靶子是否被破坏过。

如果在同一个能量值跳到 某个位置 两次,那么可以得到以后的循环不会有新的靶子被破坏,再之后就是重复新的一轮了。小估估一下时间复杂度,让它尽量跳,超出轮数默认不会再产生新的打破靶子数。
代码

#include <bits/stdc++.h>
using namespace std;const int N = 1e5 + 10;
int n, s, q[N], v[N], ans = 0;
bool vis[N];int main() {cin >> n >> s;for (int i = 1; i <= n; i++) {cin >> q[i] >> v[i];}int energy = 1, dir = 1; // 能量、朝向for (int i = 1; i <= 1000 * N; i++) {if (q[s] == 0) { // 跳板energy += v[s];dir *= -1;}else { // 靶子if (!vis[s] && energy >= v[s]) {vis[s] = 1;ans++;}}s += dir * energy;if (s < 1 || s > n) break;}cout << ans << endl;return 0;
}

第三题:BALANCING BACTERIA

标签:思维、差分
题意:给定 n n n个数, a 1 , a 2 , a 3 . . . a n a_1,a_2,a_3...a_n a1,a2,a3...an,每次操作 可以选择数字 L ( 1 < = L < = n ) L(1<=L<=n) L1<=L<=n,并选择增加或者减少。
比如增加的情况,从第 n n n个数开始,第 n n n个数增加 L L L,第 n − 1 n-1 n1个数增加 L − 1 L-1 L1,第 n − 2 n-2 n2个数增加 L − 2 L-2 L2…,依次类推,直到增加值为 0 0 0,再往前就不增加(即第 1 1 1个到第 n − L n-L nL个数不增加值)
求将所有数变成 0 0 0的最少操作次数。( 1 < = n < = 2 ∗ 1 0 5 , 1 0 − 15 < = a i < = 1 0 15 1<=n<=2*10^5,10^{-15}<=a_i<=10^{15} 1<=n<=2105,1015<=ai<=1015

举个例子:比如有两个数 − 1 3 -1\ \ \ 3 1   3
可以先从选择数字 L = 1 L=1 L=1并进行减少,操作 5 5 5次,把序列变成: − 1 − 2 -1\ \ \ \ -2 1    2
然后选择数字 L = 2 L=2 L=2,并进行增加,操作 1 1 1次,把序列变成: 0 0 0\ \ \ 0 0   0。总共 6 6 6次操作。
题解:以样例 2 2 2为例,有 5 5 5个数: 1 3 − 2 − 7 5 1\ \ \ 3 \ \ -2 \ \ -7 \ \ \ 5 1   3  2  7   5
我们维护一个差分数组 b i b_i bi a i − a i − 1 a_i-a_{i-1} aiai1 1 2 − 5 − 5 12 1\ \ \ 2 \ \ -5 \ \ -5 \ \ \ 12 1   2  5  5   12
这个差分数组表示原 a a a数组中相邻两个数的差值,我们额外对 i = 1 i=1 i=1的时候求 b 1 = a 1 − a 0 b_1=a_1-a_0 b1=a1a0 a 0 = 0 a_0=0 a0=0
再对差分数组 b i b_i bi做差分, c i = b i − b i − 1 c_i=b_i-b_{i-1} ci=bibi1 1 1 − 7 0 17 1 \ \ 1 \ \ -7 \ \ 0 \ \ 17 1  1  7  0  17

a i a_i ai: 1 3 − 2 − 7 5 1\ \ \ 3 \ \ -2 \ \ -7 \ \ \ 5 1   3  2  7   5
1 1 1 a i a_i ai − 1 − 2 − 3 − 4 − 5 = > 0 1 − 5 − 11 0 -1\ -2\ -3\ -4 \ -5=> 0\ \ \ 1 \ \ -5 \ \ -11 \ \ \ 0 1 2 3 4 5=>0   1  5  11   0 (操作次数 + 1 +1 +1
2 2 2 a i a_i ai 0 − 1 − 2 − 3 − 4 = > 0 0 − 7 − 14 − 4 0\ -1\ -2\ -3 \ -4=> 0\ \ \ 0 \ \ -7 \ \ -14 \ \ \ -4 0 1 2 3 4=>0   0  7  14   4 (操作次数 + 1 +1 +1
3 3 3 a i a_i ai 0 0 1 2 3 = > 0 0 0 0 17 0\ 0\ 1\ 2 \ 3=> 0\ \ \ 0 \ \ 0 \ \ 0 \ \ \ 17 0 0 1 2 3=>0   0  0  0   17 (操作次数 + 7 +7 +7
4 4 4 a i a_i ai 0 0 0 0 0 = > 0 0 0 0 17 0\ 0\ 0\ 0 \ 0=> 0\ \ \ 0 \ \ 0 \ \ 0 \ \ \ 17 0 0 0 0 0=>0   0  0  0   17 (操作次数 + 0 +0 +0
5 5 5 a i a_i ai 0 0 0 0 − 1 = > 0 0 0 0 0 0\ 0\ 0\ 0 \ -1=> 0\ \ \ 0 \ \ 0 \ \ 0 \ \ \ 0 0 0 0 0 1=>0   0  0  0   0 (操作次数 + 17 +17 +17

我们能够发现每次归 0 0 0的操作次数就是对应 c i c_i ci的绝对值。其实就是对 b i b_i bi进行差分,得到每个对应的后缀需要修改多少。
代码

#include <bits/stdc++.h>
using namespace std;const int N = 2e5 + 10;
typedef long long ll;
ll a[N], b[N], n, ans = 0;int main() {cin >> n;for (int i = 1; i <= n; i++) {cin >> a[i];b[i] = a[i] - a[i - 1]; // 差分}for (int i = 1; i <= n; i++) {ans += abs(b[i] - b[i - 1]);}cout << ans << endl;return 0;
}

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

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

相关文章

已解决解决java.util.concurrent.BrokenBarrierException异常的正确解决方法,亲测有效!!!

已解决解决java.util.concurrent.BrokenBarrierException异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 报错原因 解决思路 解决方法 总结 在并发编程中&#xff0c;CyclicBarrier是Java提供的一个同步辅助工具类&#xff…

WiFi基础知识介绍(超详细)

1.WiFi专业名词概念 AP(Access Point):无线接入点&#xff1a;这个概念特别广&#xff0c;在这里&#xff0c;用大白话说&#xff0c;你可以把CC3200当做一个无线路由器&#xff0c;这个路由器的特点不能插入网线&#xff0c;没有接入Internet&#xff0c;只能等待其他设备的链…

C语言中的数组操作技巧:提升程序的效率和可读性

1. 概念 数组是C语言中常见且重要的数据结构&#xff0c;在许多应用中都被广泛使用。合理地处理数组操作可以提高程序的效率和可读性。本文将介绍C语言中常用的数组操作方法和技巧&#xff0c;帮助读者优化数组操作并提升程序效果。 2.常用的数组操作方法 2.1 数组的初始化 C…

canvas自定义扩展方法:文字自动换行

查看专栏目录 canvas实例应用100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

hyperf 二十四 模型缓存

教程&#xff1a;Hyperf 一 安装及配置 1.1 安装 目前仅支持redis。 composer require hyperf/model-cache 1.2 配置 配置位置&#xff1a;config/autoload/databases.php 配置类型默认值备注handlerstringHyperf\ModelCache\Handler\RedisHandler::class无cache_keystri…

python时间格式数据处理。

由于编码和格式问题&#xff0c;有时候从read_csv或者read_excel读取到的时间类型是不确定的。 1.字符串转datetime.datetime时间格式 如果是字符串string类型&#xff0c;则可以使用&#xff1a; df[PDATE] pd.to_datetime(df[PDATE]).dt.date 转换为date格式&#xff0c…

开发安全之:Header Manipulation

Overview 方法 echo_json() 包含未验证的数据&#xff0c; 这会招致各种形式的攻击&#xff0c;包括&#xff1a;cache-poisoning、cross-site scripting、cross-user defacement、page hijacking、cookie manipulation 或 open redirect。 Details 以下情况中会出现 Header …

Websocket基本用法

1.Websocket介绍 WebSocket是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性的连接&#xff0c;并进行双向数据传输。 应用场景&#xff1a; 视频弹幕网页聊天体育实况更新股票基金…

基于OpenCV的高压电力检测项目案例

一、项目背景与目标 随着高压电力设施的日益增多&#xff0c;传统的巡检方式已无法满足现代电力系统的需求。为此&#xff0c;我们决定利用计算机视觉技术&#xff0c;特别是OpenCV库&#xff0c;开发一个高压电力检测系统。目标是实现自动化、高精度的电力设备检测&#xff0c…

P1228 地毯填补问题(葬送的芙蓉王【bushi】)

地毯填补问题 题目描述 相传在一个古老的阿拉伯国家里&#xff0c;有一座宫殿。宫殿里有个四四方方的格子迷宫&#xff0c;国王选择驸马的方法非常特殊&#xff0c;也非常简单&#xff1a;公主就站在其中一个方格子上&#xff0c;只要谁能用地毯将除公主站立的地方外的所有地…

【零基础学习CAPL】——CAN报文的发送(配合Panel面板单次发送)

🙋‍♂️【零基础学习CAPL】系列💁‍♂️点击跳转 文章目录 1.概述2.面板创建2.1.新建一个Panel2.2. 在Panel中调出控件窗口2.3.控件添加与配置3.系统变量创建4.系统变量与Panel绑定5.CAPL脚本实现6.效果1.概述 使用场景,按下面板按钮同时发送报文。 本章主要介绍 CAPL脚…

Redis -- String 字符串, 计数命令,字符串操作

"学如逆水行舟&#xff0c;不进则退。" 目录 Redis的String字符串 常见命令 set get mget mset setnx setex psetex 计数命令 incr incrby decr decrby incrbyfloat 字符串操作 append getrange setrange strlen 小结 string内部编码 Redis…

文生图提示词:自然景观

场景描述 --自然景观 Natural Landscapes 涵盖了多种自然景观&#xff0c;可以用于精确地表达 AI 生成图像中所需的自然环境。 Mountain 山脉 River 河流 Forest 森林 Beach 海滩 Ocean 海洋 Lake 湖泊 Waterfall 瀑布 Desert 沙漠 Valley 山谷 Meadow 草地 Glacier 冰川 Cliff…

分布式系统唯一ID方案

分布式系统唯一ID方案 一、引言 在当今数字化时代&#xff0c;分布式系统的发展势不可挡&#xff0c;从云服务到微服务架构&#xff0c;都凸显了分布式系统在构建大规模、高效的应用中的重要性。而在这个庞大而复杂的系统中&#xff0c;唯一ID的生成和管理变得至关重要。唯一…

springboot137欢迪迈手机商城设计与开发

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

通过与chatGPT交流实现零样本事件抽取

1、写作动机&#xff1a; 近来的大规模语言模型&#xff08;例如Chat GPT&#xff09;在零样本设置下取得了很好的表现&#xff0c;这启发作者探索基于提示的方法来解决零样本IE任务。 2、主要贡献&#xff1a; 提出了基于chatgpt的多阶段的信息抽取方法&#xff1a;在第一阶…

6、应急响应-日志自动提取自动分析ELKLogkitLogonTracerAnolog等

用途&#xff1a;个人学习笔记&#xff0c;欢迎指正 目录 背景: 一、日志自动提取-七牛Logki&观星应急工具 1、七牛Logkit: (支持Windows&Linux&Mac等) 2、观星应急工具(只支持Windows) 二、日志自动分析-Web-360星图&Goaccess&ALB&Anolog 1、W…

uniapp 使用canvas 画海报,有手粘贴即可用(拆成组件了,看后面)

1.直接使用 html部分 <view click"doposter">下载海报</view> <canvas canvas-id"myCanvas" type2d style"width: 370px; height: 550px;opcity:0;position: fixed;z-index:-1;" id"myCanvas" />js 部分 drawBac…

SpringMVC校验注解不生效

简介 SpringMVC框架提供了SPI扩展&#xff1a;javax.validation.spi.ValidationProvider&#xff0c;用来实现参数校验功能。Spring使用hibernate-validator作为它的默认实现&#xff0c;我们只需要进行一些简单的注解声明&#xff0c;就可以达到参数校验的功能。但是在实际使…

【网络安全|漏洞挖掘】ChatGPT 再曝安全漏洞,被指泄露私密对话

风靡全球的聊天机器人 ChatGPT 近日再次陷入安全风波&#xff0c;被曝泄露用户同机器人的私密对话&#xff0c;其中包含用户名、密码等敏感信息。 ArsTechnica 网站援引其读者提供的截图报道称&#xff0c;ChatGPT 泄露了多段非用户本人的对话内容&#xff0c;包含了大量敏感信…