Codeforces Round 800 (Div. 1) A. Directional Increase (贪心之结论题之根本想不出来)

我们有一个长度为 n n n 的数组。最初,每个元素都等于 0 0 0 ,第一个元素上有一个指针。

我们可以按任意顺序执行以下两种操作任意次数(可能为零):

  • 如果指针不在最后一个元素上,则将指针当前所在的元素增加 1 1 1 。然后将其移动到下一个元素上。
  • 如果指针不在第一个元素上,则将指针当前所在的元素减少 1 1 1 。然后移动到上一个元素。

但还有一条额外的规则。完成后,指针必须在第一个元素上。

给你一个数组 a a a 。请判断经过一些操作后是否可以得到 a a a

输入
第一行包含一个整数 t ( 1 ≤ t ≤ 1000 ) t (1≤t≤1000) t(1t1000) 。 - 测试用例的数量。测试用例说明如下。

每个测试用例的第一行包含一个整数 n ( 1 ≤ n ≤ 2 ⋅ 1 0 5 ) n (1≤n≤2⋅10^5) n(1n2105) - 数组 a a a 的大小。

每个测试用例的第二行包含 n n n 个整数 a 1 , a 2 , … , a n ( − 1 0 9 ≤ a i ≤ 1 0 9 ) a_1,a_2,…,a_n ( −10^9≤a_i≤10^9 ) a1,a2,,an(109ai109) - 数组元素。

保证所有测试用例中 n n n 的总和不超过 2 ⋅ 1 0 5 2⋅10^5 2105

输出
对于每个测试用例,如果经过某些操作后可以获得 a a a ,则打印 “Yes”(不带引号),否则打印 “No”(不带引号)

您可以在任何情况下输出 "Yes "和 “No”(例如,字符串 “yEs”、"yes "和 "Yes "将被视为肯定回答)。


对于这道题,多加思考多少能够想出来这道题的判断方式是和每一个数的操作一二次数是有关系的,但是这道题的终极解题结论还是很难推出来的。

假设我们给出 b i b_i bi 为第 i i i 个元素进行操作 1 1 1 的次数, c i c_i ci 为第 i i i 个元素进行操作 2 2 2 的次数。
由于最终指针一定要回到第一个元素,所以 c i = b i − 1 c_i = b_{i-1} ci=bi1,并且数组的和必须是 0 0 0

对于同一个数的指针的移动,向右移动了 b i b_i bi 次,向左移动了 c i c_i ci 次,那么容易想到一定有 a i = b i − c i a_i = b_i - c_i ai=bici

那么联立两式可以得到 a i = b i − b i − 1 a_i = b_i - b_{i-1} ai=bibi1,并且我们知道 a 1 = b 1 a_1 = b_1 a1=b1,那么我们可以求得 b i b_i bi

求得b之后我们可以做什么?
我们已经知道了指针所有的向右移动的情况,那么我们可以说,如果 b i = 0 b_i = 0 bi=0,那么 b i b_i bi 之后的所有 b b b 都应该等于 0 0 0 才能够符合情况,并且 b i b_i bi 一定满足大于等于 0 0 0

那么我们可以以此为依据进行判断。


CODE:

#include<bits/stdc++.h>
using namespace std;
const int N = 2e5+10;
#define int long longint a[N];
int b[N];void solve(){int n;cin >> n;for(int i = 1;i <= n;i++){cin >> a[i];b[i] = b[i-1] + a[i];}if(b[n] != 0){cout << "NO\n";return;}for(int i = 1;i <= n;i++){if(b[i] < 0){cout << "NO\n";return;}}bool vis0 = 0;for(int i = 1;i <= n;i++){if(vis0 && b[i] != 0){cout << "NO\n";return;}if(b[i] == 0)vis0 = 1;}cout << "YES\n";
}signed main(){int T;cin >> T;while(T--){solve();}return 0;
}

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

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

相关文章

Java开发-面试题-0001-String、StringBuilder、StringBuffer的区别

Java开发-面试题-0001-String、StringBuilder、StringBuffer的区别 更多内容欢迎关注我&#xff08;持续更新中&#xff0c;欢迎Star✨&#xff09; Github&#xff1a;CodeZeng1998/Java-Developer-Work-Note 技术公众号&#xff1a;CodeZeng1998&#xff08;纯纯技术文&am…

【2024.5.29数据库MYSQL史上最详细基础学习汇总】

初识数据库 什么是数据库: DB的全称是database,即数据库的意思。数据库实际上就是一个文件集合,是一个存储数据的仓库,数据库是按照特定的格式把数据存储起来,用户可以对存储的数据进行增删改查操作; 什么是关系型数据库(SQL)? 关系型数据库是依据关系模型来创建的…

如何恢复被盗的加密货币?

本世纪&#xff0c;网络犯罪的首要目标是加密货币。 这要归功于加密货币的日益普及和价值&#xff0c;网络犯罪分子已经认识到经济收益的潜力&#xff0c;并将重点转向利用这种数字资产中的漏洞。 在今天的文章中&#xff0c;我们将讨论加密货币恢复和被盗加密货币恢复。 我们…

企业分公司利用SD-WAN搭建异地组网

随着业务的发展&#xff0c;公司开设多家分公司再也正常不过了&#xff0c;一般分公司都在异地设立&#xff0c;为了实现办公效率的最大化&#xff0c;同时加强企业对管理的便利性&#xff0c;分公司与总部两地业务数据要实现互通和共享&#xff0c;需要搭建异地组网来实现。 企…

IPFoxy Tips:海外代理IP适用的8个跨境出海业务

在当今数字化时代&#xff0c;互联网已经成为商业和个人生活不可或缺的一部分。IP代理作为出海业务的神器之一&#xff0c;备受跨境出海业务人员关注。IPFoxy动态、静态纯净代理IP也根据业务需求的不同&#xff0c;分为静态住宅、动态住宅、静态IPv4、静态IPv6四种类型代理。那…

【软件测试】LoadRunner参数化属性设置_单个参数

目录 为什么使用参数化属性详解Select next rowSequential&#xff08;顺序&#xff09;Random&#xff08;随机&#xff09;Unique&#xff08;唯一&#xff09;Same line as XXX&#xff08;和XXX属性的取值方式一样&#xff09; Update value onEach iteration&#xff08;每…

HDTune和CrystalDiskInfo硬盘检测S.M.A.R.T.参数当前值最差值阈值

高亮颜色说明&#xff1a;突出重点 个人觉得&#xff0c;&#xff1a;待核准个人观点是否有误 高亮颜色超链接 文章目录 S.M.A.R.T.监控技术磁盘健康状态监测,硬盘检测硬盘检测工具 HD Tune硬盘检测工具 CrystalDiskInfo 当前值最差值阈值原始值的含义二级标题待补充待补充 开头…

RedHat9 | 配置与管理DNS服务器

一、 知识预备 1、DNS服务器的分类 主DNS服务器 主DNS服务器复制维护所管辖域的域名服务信息&#xff0c;它从域管理员构造的本地磁盘文件中的加载域信息。该文件包含服务器具有管理权的的一部分域结构的精确信息&#xff0c;配置主域服务器需要一整套配置文件&#xff1a; …

《QT实用小工具·六十八》基于QMenu开发的炫酷菜单栏

1、概述 源码放在文章末尾 该项目基于QMenu实现了炫酷的菜单栏效果&#xff0c;包含了如下功能&#xff1a; 1、实现了类似word菜单栏的效果&#xff0c;可以在菜单栏中横向添加不同的菜单 2、鼠标点击菜单可以展开菜单栏&#xff0c;再次点击菜单可以收起菜单栏 3、鼠标点击笑…

汇编-汇编程序基本框架

汇编程序是一种直接控制计算机硬件的低级编程语言&#xff0c;通常用于微控制器和早期的个人计算机。编写16位汇编程序需要理解计算机的体系结构、汇编语言的指令集和内存模型。以下是汇编程序的一般结构和常见部分&#xff1a; 1. 程序头部 程序头部通常包括一些伪指令和程序…

Chromium源码学习(1)—— 拉取源码,编译

阅读建议&#xff1a;先简单过一下整个文章目录结构&#xff0c;大致了解一下各个步骤在干什么&#xff0c;然后在上手操作可能会事半功倍。也许你遇到的有些问题文章中已经提及到了&#xff0c;但是由于你没有往下看导致卡进度。 Chromium简介 Chromium项目于2008年发布&…

postman教程-7-文件上传接口

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了postman发送get请求的方法&#xff0c;本小节我们讲解一下postman文件上传接口的请求方法。 postman文件上传的方式大概有两种&#xff0c;一种是form-data类型上传文件&#xff0c;一种是bin…

IEnumerable 、 IEnumerator,yield return

自定义迭代类 》》》using System.Collections; using System.Collections; using System.Runtime.CompilerServices;namespace ConsoleApp1 {// 可迭代对象 标记此类可迭代 继承IEnumerable 类是可以迭代public class SpecificEnumerable : IEnumerable{private readonly …

RAG 高级应用:基于 Nougat、HTML 转换与 GPT-4o 解析复杂 PDF 内嵌表格

一、前言 RAG&#xff08;检索增强生成&#xff09;应用最具挑战性的方面之一是如何处理复杂文档的内容&#xff0c;例如 PDF 文档中的图像和表格&#xff0c;因为这些内容不像传统文本那样容易解析和检索。前面我们有介绍过如何使用 LlamaIndex 提供的 LlamaParse 技术解析复…

GD32F103RCT6/GD32F303RCT6(10)独立看门狗/窗口看门狗实验

本文章基于兆易创新GD32 MCU所提供的2.2.4版本库函数开发 后续项目主要在下面该专栏中发布&#xff1a; 手把手教你嵌入式国产化_不及你的温柔的博客-CSDN博客 感兴趣的点个关注收藏一下吧! 电机驱动开发可以跳转&#xff1a; 手把手教你嵌入式国产化-实战项目-无刷电机驱动&am…

集合的综合练习

自动点名器1&#xff1a;班级里有N个学生&#xff0c;实现随机点名器 public class test {public static void main(String [] args) {ArrayList<String> listnew ArrayList<>();//创建一个集合//在集合中添加元素Collections.addAll(list, "李明",&quo…

MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案

一、找不到my.ini配置文件 MySQL 8 安装或启动过程中&#xff0c;如果系统找不到my.ini文件&#xff0c;通常意味着 MySQL服务器没有找到其配置文件。在Windows系统上&#xff0c;MySQL 8 预期使用my.ini作为配置文件&#xff0c;而不是在某些情况下用到的my.cnf文件。 通过 …

常用的优化器汇总及keras实现

1.SGD&#xff08;Stochastic Gradient Descent&#xff09; 2.RMSprop&#xff08;Root Mean Square Propagation&#xff09; 3.Adadelta 4.Adam&#xff08;Adaptive Moment Estimation&#xff09; 5.Nadam 6.代码实现 from sklearn.compose import make_column_transforme…

Java----Maven详解

前言 Maven是Java项目的构建工具&#xff0c;通过项目对象模型&#xff08;POM&#xff09;管理项目配置信息&#xff0c;自动化构建、测试和部署过程。开发人员可定义项目结构、依赖和构建流程&#xff0c;提高开发效率和质量。本文介绍基本概念和用法&#xff0c;帮助您更好…

文本生成流程图 泰酷啦 Excalidraw Mermaid Obsidian

前言 介绍一个很酷的工具&#xff0c;Mermaid to Excalidraw 。作用是用代码生成流程图。 Mermaid 是一款强大的、轻量级的文本到图表的转换工具&#xff0c;它允许用户使用简单的Markdown风格的语法编写文本描述&#xff0c;然后通过JavaScript引擎将其转换成美观的图表。Mer…