C. Zero-Sum Prefixes(前缀和)

news/2024/7/2 9:01:08

Problem - C - Codeforces

 

一个数组v1,v2,...,vn的得分被定义为索引i的数量(1≤i≤n),使v1+v2+...+vi=0。

给你一个长度为n的数组a1,a2,...,an,你可以多次执行以下操作。

选择一个索引i(1≤i≤n),使ai=0。
然后用一个任意的整数替换ai。
通过执行一系列这样的操作,可以得到的a的最大可能分数是多少?

输入
每个测试包含多个测试用例。第一行包含一个整数t(1≤t≤104)--测试案例的数量。

每个测试用例的第一行包含一个整数n(1≤n≤2⋅105)--数组a的长度。

每个测试用例的第二行包含n个整数a1,a2,...,an (-109≤ai≤109) - 数组a。

保证所有测试用例的n之和不超过2⋅105。

输出
对于每个测试用例,在执行一系列操作后,打印出数组a的最大可能得分。

例子
InputCopy
5
5
2 0 1 -1 0
3
1000000000 1000000000 0
4
0 0 0 0
8
3 0 2 -10 10 -30 30 0
9
1 0 0 1 -1 0 1 0 -1
输出拷贝
3
1
4
4
5
注意
在第一个测试案例中,在一次操作中把a2的值改为-2是最好的。

结果数组a将是[2,-2,1,-1,0],得分是3。

a1+a2=2-2=0。
a1+a2+a3+a4=2−2+1−1=0;
a1+a2+a3+a4+a5=2−2+1−1+0=0.
在第二个测试案例中,将a3的值改为-2000000000是最理想的,给我们一个分数为1的阵列。

在第三个测试案例中,没有必要进行任何操作。

题解:

无论如何答案最大为n,

首先我们得到该数组的前缀和,

这题,首先特别考虑第一个0之前的,前缀和为0符合题意。

然后,第一个0之后,每两个0的区间,取前缀和相同的数量最大的作为答案。

#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
long long b[200050];
long long c[200050];
void solve()
{
	int n;
	cin >> n;
	int len = 0;
	for(int i = 1;i <= n;i++)
	{
		cin >> b[i];
		if(b[i] == 0)
		{
			c[len++] = i;
		}
		b[i] = b[i-1] + b[i];
	}
	c[len] = n+1;
	int ans = 0;
	for(int i = 1;i < c[0];i++)
	{
		if(b[i] == 0)
		{
			ans++;
		}
	}
	for(int i = 0;i < len;i++)
	{
		map<long long,int> f;
		int ma = 0;
		for(int j = c[i];j < c[i+1];j++)
		{
			f[b[j]]++;
			ma = max(ma,f[b[j]]);
		}
		ans += ma;
	}
	cout<<ans<<"\n";
}
int main()
{
	int t;
	cin >> t;
	while(t--)
	{
		solve();
	}
}


http://lihuaxi.xjx100.cn/news/158205.html

相关文章

【React一】React基础+组件化编程【ref+props+state】

文章目录一、 React基础组件化编程1-1 基础1-1-1 react简介1-1-1-1 react创建虚拟DOM1-1-1-2 虚拟DOM与真实DOM1-1-2 JSX1-1-2-1 语法规则【摘自word】1-1-2-2 渲染虚拟DOM(元素)1-1-2-3 JSX语法规则1-1-2-4 列表例子1-1- 3 模块与组件1-2 React面向组件化编程1-2-11-2-1-1 函数…

Android解析自定义属性实现视差动画效果

前言 在学习本文之前&#xff0c;可以先了解下android LayoutInflater源码分析以及换肤框架实现原理&#xff0c;这里通过LayoutInflater解析自定义属性&#xff0c;实现对布局中的View进行平移操作。 最终效果 实现思路 首先自定义平移属性&#xff0c;如支持X轴方向进出平…

java家庭理财收支管理系统

目 录 1 绪论 1 1.1 引言 1 1.2 研究内容 2 1.3 可行性分析 2 1.3.1 技术可行性 2 1.3.2 经济可行性 2 1.3.3 操作可行性 3 1.4 研究现状 3 2 开发技术介绍 4 2.1 Jsp技术 4 2.2 Mysql 5 2.3 tomcat简介 5 2.4 JDBC 6 3 需求分析 …

员工如何通过自助方式重置AD密码

很多企业都会通过AD管理员工的账户&#xff0c;而密码重置是IT helpdesk很繁重的一项工作。在OneAuth中可以启用员工自助修改密码。比如通过给员工手机/邮箱发送修改密码的临时口令&#xff0c;员工点输入临时口令验证&#xff0c;验证通过后才可以修改密码。 通过OneAuth重置…

Docker(一):什么是Docker?

为什么会出现Docker 假设你在开发一个项目&#xff0c;你所用的电脑是具备了项目特定配置的开发环境。但其他开发人员的设备以及开发环境配置都各有不同。你所在开发的应用需要依赖你当前的配置&#xff0c;而当你需要发布到测试环境的时候&#xff0c;你需要把你本地的环境配…

实现分布式下的全局唯一ID

ID生成规则必要性 软件上要求 全局唯一 不能出现重复的ID号&#xff0c;既然是唯一标识&#xff0c;这是最基本的要求趋势递增 在MySQL的InnoDB引擎中使用的是聚集索引&#xff0c;由于多数RDBMS使用Btree的数据结构来存储索引数据&#xff0c; 在主键的选择上面我们应该尽量…

RabbitMQ的入门篇

目录 1. RabbitMQ简介 1.1 RabbitMQ 1.2 RabbitMQ的介绍 1.3 RabbitMQ的特点 2. RabbitMQ的安装 2.1 RabbitMQ下载 2.2 下载的安装包 ​ 2.3 安装步骤 2.4 登录访问 3. RabbitMQ的入门 3.1 RabbitMQ的架构原理 3.2 永远的hello world程序 4. RabbitMQ的工作模式 4.1 简…

cnpm的版本锁定问题的解决方案

之前因为项目需求&#xff0c;经常使用cnpm i来下载依赖&#xff0c;后来有一次在debug的过程中发现用cnpm下载安装依赖是不会锁版本的&#xff0c;特此就这个问题在这里做个详细记录。 首先了解下npm包管理及依赖版本管理的原理。这些都是通过package.json文件实现的 当你使用…