E. Singers‘ Tour(数学推导)

news2024/10/3 20:24:56

Problem - 1618E - Codeforces
 

将n个城镇按顺序排列成一个环。这些城镇按顺时针顺序编号为1到n。在第i个城镇里,有一名歌手,他的曲目列表中每首歌的演唱时间为ai分钟,其中i∈[1,n]。

每位歌手按顺时针顺序访问所有n个城镇,并在每个城镇举办一场音乐会。另外,在每个城镇中,第i位歌手受到灵感,创作了一首时长为ai分钟的歌曲。这首歌被加入到他的曲目列表中,以便他可以在余下的城镇中演唱它。

因此,对于第i位歌手,他在第i个城镇的音乐会持续ai分钟,在(i+1)个城镇的音乐会持续2⋅ai分钟,...,在((i+k)modn+1)个城镇中音乐会的持续时间为(k+2)⋅ai分钟,...,在第((i+n−2)modn+1)个城镇中音乐会的持续时间为n⋅ai分钟。

给定一个由b个整数组成的数组,其中bi是第i个城镇中音乐会的总持续时间。重构任何正确的正整数序列a或者说明不可能重构。 输入

第一行包含一个整数t(1≤t≤103),表示测试用例的数量。然后是测试用例。

每个测试用例由两行组成。第一行包含一个整数n(1≤n≤4⋅104),表示城市的数量。第二行包含n个整数b1,b2,…,bn(1≤bi≤109),表示第i个城市音乐会的总持续时间。

所有测试用例中n的总和不超过2⋅105。 输出

对于每个测试用例,按以下方式输出答案:

如果没有合适的序列a,打印NO。否则,第一行打印YES,在接下来的一行打印n个整数a1,a2,…,an,其中ai(1≤ai≤109)是第i个歌手曲目的初始持续时间。如果有多个答案,可以打印任意一个。

Example

Input

Copy

4
3
12 16 14
1
1
3
1 2 3
6
81 75 75 93 93 87

Output

Copy

YES
3 1 3 
YES
1 
NO
YES
5 5 4 1 4 5 

注意

让我们考虑示例中的第一个测试用例:

第1位歌手在第1个城市举办了一场为3分钟的音乐会,在第2个城市为6分钟,在第3个城市为9分钟;

第2位歌手在第1个城市举办了一场为3分钟的音乐会,在第2个城市为1分钟,在第3个城市为2分钟; 第3位歌手在第1个城市举办了一场为6分钟的音乐会,在第2个城市为9分钟,在第3个城市为3分钟。

题解:

我们假设每一位的初始值是

a1,a2,a3...an,由于每个歌手都会成一个环

都会演唱(n + 1)*n/2*a[i],这么长时间,而所有歌手的相加和就是sum = b1 + ....bn

那么m = a1 +... an = sum/[(n + 1)*n/2]

假设n = 3

b1 = a1 + 3*a2 + 2*a3

b2 = 2*a1 + a2 + 3*a3

b2 - b1 = a1 - 2*a2 + a3

b2 - b1 + 3*a2 = a1 + a2 + a3

3*a2 = b1 - b2 + a1 + a2 + a3

a2 = (b1 - b2 + m)/n

接着计算答案即可,中间注意限制条件

#include <cstdio>
#include <cstring>
#include <algorithm>
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;
 #define int long long
typedef pair<int,int> PII;
typedef unsigned long long ULL;
const int N = 5e5 + 10;
int mod = 998244353;
int b[N];
void solve()
{
	int n;
	cin >> n;
	vector<int> ans(n + 10);
	int m = n*(n + 1)/2,s = 0;
	for(int i = 1;i <= n;i++)
	{
		int x;
		cin >> x;
		b[i] = x;
		s += x;
	}
	if(s%m ||s/m < n)
	{
		cout <<"NO\n";
		return ;
	}
	m = s/m;
	for(int i = 1;i <= n;i++)
	{
		ans[i%n + 1] = (b[i] - b[i%n + 1] + m)/n;
		if((b[i] - b[i%n + 1] + m)%n || ans[i%n + 1] > 1e9||ans[i%n + 1] < 1)
		{
			cout <<"NO\n";
			return;
		}
	}
	cout <<"YES\n";
	for(int i = 1;i <= n;i++)
	{
		cout << ans[i] <<" ";
	}
	cout <<"\n";
}
signed main()
{
	ios::sync_with_stdio(0 );
	cin.tie(0);cout.tie(0);
	int t = 1;
	cin >> t;
	while(t--)
	{
		solve(); 
	}
}

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

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

相关文章

为什么可以直接使用简单名字访问java.lang包中的公开类、接口

java.lang包中有一些基本类&#xff0c;在代码中访问这些公开的类、接口可以直接用简单的名字访问&#xff0c;而不需要用import语句显式导入。 先看下面两段示例代码&#xff0c;这两段代码的执行效果是一样的。 示例代码1–访问Math类的时候直接写简单的名字&#xff0c;而且…

pwn学习day4——ret2text

文章目录 原理&#xff1a;例子x64x32 原理&#xff1a; 覆盖函数返回地址到程序内存在的gadgets获取shell 例子 #include<stdio.h> #include<stdlib.h>void hint(){system("$0"); } int main(){char buf[0x10];printf("input: ");scanf(&q…

1.5、JAVA 初识JAVA运算符

1 运算符 1.1 概述 运算符 用于连接 表达式 的 操作数&#xff0c;并对操作数执行运算。 例如&#xff0c;表达式num1num2&#xff0c;其操作数是num1和num2&#xff0c;运算符是””。 在java语言中&#xff0c;运算符可分为5种类型&#xff1a; 算术运算符、赋值运算符、关…

数据中心可视化合集 | 图扑数字孪生机房,解锁运维新境界

IDC&#xff08;Internet Data Center&#xff09;数据中心可视化是指通过可视化的方式对数据中心的运行状态、资源使用情况、安全监控等进行展示和管理。可以帮助管理员更好地了解数据中心的运行情况和趋势&#xff0c;及时发现问题并采取措施&#xff0c;提高数据中心的运行效…

libevent实践01:准备源码、搭建项目、编译脚本和入门例子

编译源码 libevent是一个Reactor事件库。 我的理解&#xff0c;就是封装了select、epoll、poll的函数库。有使用select&#xff0c;poll&#xff0c;epoll的需求就可以使用的。 官网地址&#xff1a;https://libevent.org/ 下载源码&#xff1a; https://github.com/libev…

2023亚马逊云科技中国峰会主题演讲,分享基础架构在AI浪潮的求新求变

2023亚马逊云科技中国峰会第二天精彩继续&#xff01;6月28日&#xff0c;亚马逊云科技大中华区产品总经理陈晓建在《专注创新&#xff0c;摆脱基础架构束缚》主题演讲中提出&#xff0c;云服务是支持数字创新的关键生产力。在当前生成式AI技术爆发的大环境下&#xff0c;亚马逊…

一种快速估算PCB走线电阻的方法:方块统计

我们通常需要快速地估计出印刷电路板上一根走线或一个平面的电阻值&#xff0c;而不是进行冗繁的计算。 虽然现在已有可用的印刷电路板布局与信号完整性计算程序&#xff0c;可以精确地计算出走线的电阻&#xff0c;但在设计过程中&#xff0c;我们有时候还是希望采取快速粗略…

通过BeautifulSoup获取【领域赛道--大数据与算法】top100用户

文章目录 前言介绍实现帖子地址请求地址引入模块提取代码程序入口提取到的数据 总结最后 前言 博主空空star主页空空star的主页 大家好&#xff0c;我是空空star&#xff0c;本篇给大家分享一下《通过BeautifulSoup获取【领域赛道--大数据与算法】top100用户》。 介绍 Beautif…

社区团购爆品怎么做?社区团购小程序有什么功能?

社区团购爆款可以通过拉新&#xff0c;打好用户基础。刚上线就推行低价爆款拉新&#xff0c;利用一些低成本的奶制品类和禽蛋类&#xff0c;蔬菜类来引流拉新。这一招非常有效&#xff0c;吸引源源不断的客流量汇集平台&#xff0c;庞大的用户流量是订单爆棚的保障。商家/运营方…

这所顶级双非,学硕爆冷上线即录取,保护一志愿!

一、学校及专业介绍 华侨大学是福建省“双一流”建设A类高校&#xff0c;在泉州、厦门分别设有校区&#xff0c;现有28个学院&#xff1b;11个学科门类&#xff0c;9个一级学科博士点&#xff0c;25个一级学科硕士点&#xff0c;23个专业学位硕士点&#xff0c;5个博士后流动站…

性能测试中如何使用RunnerGo还原混合并发场景

我们在进行软件开发时经常需要进行性能测试、压力测试和负载测试。其中有一类测试场景叫做混合并发测试&#xff0c;需要模拟多个接口下不同数量的用户使用场景&#xff0c;检查同时处理多个并发任务的能力&#xff0c;本文将展示如何使用开源的RunnerGo还原混合并发场景。 在…

C语言排序算法实现

1.概述 所谓排序&#xff0c; 就是使一串记录&#xff0c; 按照其中的某个或某些关键字的大小&#xff0c; 递增或递减的排列起来的操作。 排序算法&#xff0c; 就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视&#xff0c; 尤其是在大量数据的处理方面…

数据分析回头看1——Pandas中数据处理总结

0、前言&#xff1a;因为之前自己在学习pandas的过程中就简单做了下笔记&#xff0c;发现在用的时候还是会比较乏力&#xff0c;很多东西容易忘&#xff0c;所以我就决定结合之前笔记的内容&#xff0c;按照使用pandas的习惯&#xff0c;把知识点梳理一下&#xff0c;方便之后查…

网段扫描攻击

攻击简介 如果网络中有用户向设备发送大量目标IP地址不能解析的IP报文&#xff08;即路由表中存在该IP报文的目的IP对应的路由表项&#xff0c;但设备上没有该路由表项中下一跳对应的ARP表项&#xff09;&#xff0c;将导致设备触发大量的ARP Miss消息。 大量的网段扫描报文会…

软件测试的自我学习和提升

软件测试是一项非常重要的工作&#xff0c;它可以确保软件在发布前能够正常运行&#xff0c;在软件开发过程中扮演着至关重要的角色。在这个不断变化和创新的时代&#xff0c;软件测试人员需要不断地学习和提升自己的技能和能力&#xff0c;以适应不同软件发展的需求。 1. 学习…

LeetCode刷题 | 309. 最佳买卖股票时机含冷冻期、714. 买卖股票的最佳时机含手续费

309. 最佳买卖股票时机含冷冻期 给定一个整数数组prices&#xff0c;其中第 prices[i] 表示第 i 天的股票价格 。​ 设计一个算法计算出最大利润。在满足以下约束条件下&#xff0c;你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票&#xff09;: 卖出股票后&…

【MySQL学习笔记】(四)MySQL数据类型

MySQL数据类型 1 数据类型分类2 数值类型2.1 tinyint 类型2.2 bit 类型2.3 小数类型2.4 字符串类型2.5 varchar2.6 char和varchar比较 2.6 日期和时间类型2.6 enum 和 set2.6.1 集合查询使用find_ in_ set函数 1 数据类型分类 2 数值类型 2.1 tinyint 类型 数值测试 mysql>…

基于IP 的 Nginx 虚拟主机

目录 一、配置文件&#xff08;不要忘了备份&#xff09; 二、 访问地址 一、配置文件&#xff08;不要忘了备份&#xff09; 二、 访问地址

while(1) 和 for ( ; ; )的区别

while(1) 和 for(;;) 它们不都是无限循环吗&#xff0c;作用应该一样啊&#xff0c;它们到底有什么区别&#xff1f; 要回答这个问题&#xff0c;其实你各自编写一段while(1) 和 for(;;)的代码&#xff0c;编译对比一下代码大小和汇编文件&#xff0c;你就大概知道了。 while(…

Vue.extend

Vue.extend 方法用来对基本的Vue组件进行扩展&#xff0c;&#xff0c;创建他的子类&#xff0c;&#xff0c;通过扩展根节点Vue定义新的组件 const BaseComponent Vue.extend({data(){return{message:"hehe"}}})const ExtendedComponent BaseComponent.extend({mo…