Codeforces Round 941 (Div. 2) F.Missing Subarray Sum

Missing Subarray Sum

题目描述

There is a hidden array a a a of n n n positive integers. You know that a a a is a palindrome, or in other words, for all 1 ≤ i ≤ n 1 \le i \le n 1in, a i = a n + 1 − i a_i = a_{n + 1 - i} ai=an+1i. You are given the sums of all but one of its distinct subarrays, in arbitrary order. The subarray whose sum is not given can be any of the n ( n + 1 ) 2 \frac{n(n+1)}{2} 2n(n+1) distinct subarrays of a a a.

Recover any possible palindrome a a a. The input is chosen such that there is always at least one array a a a that satisfies the conditions.

An array b b b is a subarray of a a a if b b b can be obtained from a a a by the deletion of several (possibly, zero or all) elements from the beginning and several (possibly, zero or all) elements from the end.

输入描述

The first line of the input contains a single integer t t t ( 1 ≤ t ≤ 200 1 \le t \le 200 1t200) — the number of test cases. The description of the test cases follows.

The first line of each test case contains a single integer n n n ( 3 ≤ n ≤ 1000 3 \le n \le 1000 3n1000) — the size of the array a a a.

The next line of each test case contains n ( n + 1 ) 2 − 1 \frac{n(n+1)}{2} - 1 2n(n+1)1 integers s i s_i si ( 1 ≤ s i ≤ 1 0 9 1\leq s_i \leq 10^9 1si109) — all but one of the subarray sums of a a a.

It is guaranteed that the sum of n n n over all test cases does not exceed 1000 1000 1000.

Additional constraint on the input: There is always at least one valid solution.

输出描述

For each test case, print one line containing n n n positive integers a 1 , a 2 , ⋯ a n a_1, a_2, \cdots a_n a1,a2,an — any valid array a a a. Note that a a a must be a palindrome.

If there are multiple solutions, print any.

样例输入

7
3
1 2 3 4 1
4
18 2 11 9 7 11 7 2 9
4
5 10 5 16 3 3 13 8 8
4
8 10 4 6 4 20 14 14 6
5
1 2 3 4 5 4 3 2 1 1 2 3 2 1
5
1 1 2 2 2 3 3 3 3 4 5 5 6 8
3
500000000 1000000000 500000000 500000000 1000000000

样例输出

1 2 1 
7 2 2 7 
3 5 5 3 
6 4 4 6 
1 1 1 1 1 
2 1 2 1 2 
500000000 500000000 500000000

原题

Codeforces Round 941——传送门

题解

CF题解——传送门

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;vector<ll> create_arr(bool pry, vector<ll> v)
{deque<ll> dq;if (pry){dq.push_back(v[0]);}else{dq.push_front(v[0] / 2);dq.push_back(v[0] / 2);}for (int i = 1; i < v.size(); i++){dq.push_front((v[i] - v[i - 1]) / 2);dq.push_back((v[i] - v[i - 1]) / 2);}return vector<ll>(dq.begin(), dq.end());
}int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t;cin >> t;while (t--){int n;cin >> n;int num = n * (n + 1) / 2 - 1;vector<ll> a(num);for (int i = 0; i < num; i++){cin >> a[i];a[i] <<= 1;}sort(a.begin(), a.end());vector<ll> single;// 去重for (ll x : a){if (!single.empty() && single.back() == x)single.pop_back();elsesingle.push_back(x);}vector<ll> arr = create_arr(n & 1, single); // 构造出的数组vector<ll> sum(arr.size() + 1, 0); // 前缀和数组ll s = 0;                          // 数组总和for (int i = 1; i <= arr.size(); i++){sum[i] = sum[i - 1] + arr[i - 1];s += arr[i - 1];}vector<ll> section_sum; // 区间和数组for (int i = 0; i < sum.size(); i++){for (int j = i + 1; j < sum.size(); j++){section_sum.push_back(sum[j] - sum[i]);}}sort(section_sum.begin(), section_sum.end());if (section_sum.size() <= a.size())swap(section_sum, a);int i;for (i = 0; a.rbegin()[i] == section_sum.rbegin()[i]; i++);ll x = 2 * section_sum.rbegin()[i] - s;if (single.size() > (n + 1) / 2)single.erase(find(single.begin(), single.end(), x));elsesingle.insert(lower_bound(single.begin(), single.end(), x), x);vector<ll> ans = create_arr(n & 1, single);for (ll x : ans){cout << x / 2 << ' ';}cout << '\n';}return 0;
}

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

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

相关文章

CUDA架构介绍与设计模式解析

文章目录 **CUDA**架构介绍与设计模式解析**1** CUDA 介绍CUDA发展历程CUDA主要特性CUDA系统架构CUDA应用场景编程语言支持CUDA计算过程线程层次存储层次 **2** CUDA 系统架构分层架构并行计算模式生产-消费者模式工作池模式异步编程模式 **3** CUDA 中的设计模式工厂模式策略模…

ubuntu搭建node私库Verdaccio

ubuntu搭建node私库Verdaccio Verdaccio 是一个轻量级的私有 npm 代理注册服务器&#xff0c;它是开源的&#xff0c;可以帮助你设置和维护企业内部的 npm 包的存储库。使用 Verdaccio 可以让你完全控制包的发布流程、依赖关系以及访问策略。这篇文章将指导你如何在 Ubuntu 系…

为什么大家都说品深茶可以抗癌

据说&#xff0c;品深茶的创始人之前是一个程序员&#xff0c;他在软件行业工作十多年&#xff0c;由于常年熬夜加班再加上抽烟喝酒等不良习惯&#xff0c;导致在一次体检中被查出患上了肾癌&#xff0c;对他来说&#xff0c;期待的财务自由还没实现&#xff0c;身体就已经完蛋…

品深茶的抗癌效果怎么样?

茶叶中的一些成分&#xff0c;如茶多酚、儿茶素等&#xff0c;具有抗氧化和抗炎作用&#xff0c;这些作用在一定程度上可以抑制癌细胞的生长和扩散。 然而&#xff0c;这些成分在茶叶中的含量和生物利用率会受到多种因素的影响&#xff0c;如茶叶的品种、制作工艺、饮茶方式等…

小程序SSL证书更新指南

随着网络技术的不断发展&#xff0c;小程序已经成为许多企业和个人进行业务推广和服务提供的重要平台。在享受小程序带来的便利和高效的同时&#xff0c;我们也必须重视其安全性问题。SSL证书作为保障小程序数据传输安全的重要手段&#xff0c;其更新工作不容忽视。本文将为大家…

Linux基础IO(下)

目录 1. 缓冲区 1.1 定义 1.2 理解缓冲区 1.2.1 为什么要有缓冲区 1.2.2 缓冲区的工作原理 缓冲区什么时候写入&#xff0c;什么时候刷新&#xff1f; 2. 文件系统 2.1 什么是文件系统&#xff1f; 2.2 为什么要有文件系统&#xff1f; 2.3 认识文件的管理结构 2.…

简要说说软分叉和硬分叉。

前言 一、软分叉 二、硬分叉 三、用途 总结 前言 软分叉和硬分叉是区块链技术中的两个重要概念&#xff0c;它们通常与加密货币的网络升级有关。下面我将分别解释这两个概念&#xff0c;并提供一些例子来帮助理解。下面是方便理解软分叉和硬分叉的图 一、软分叉 软分叉是一…

飞滴出行网约车项目-进阶版 架构知识

validation框架 作用代替if&#xff0c;else判断 <!--validation依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>具体笔记 https://blog.…

【QT学习】UDP协议,广播,组播

一。Udp详细解释 UDP&#xff08;User Datagram Protocol&#xff09;是一种无连接的传输层协议&#xff0c;它提供了一种简单的、不可靠的数据传输服务。与TCP相比&#xff0c;UDP不提供可靠性、流量控制、拥塞控制和错误恢复等功能&#xff0c;但由于其简单性和低开销&#x…

msf练习

一、什么是msfvenom&#xff1f; msfvenom是msf中的一个独立的负载生成器&#xff0c;它可以利用msf中的payloads和encoders来生成各种格式的木马文件&#xff0c;并在目标机上执行&#xff0c;配合meterpreter在本地监听上线。msfvenom是msfpayload和msfencode的结合体&#…

Outlook大附件插件 有效解决附件大小限制问题

很多企业都是使用Outlook来进行邮件的收发&#xff0c;可是由于附件大小有限&#xff0c;导致很多大文件发不出去&#xff0c;就会产生Outlook大附件插件这种业务需求。 邮件系统在发送大文件时面临的限制问题主要如下&#xff1a; 1、附件大小限制&#xff1a;大多数邮件服务…

人工智能_大模型044_模型微调004_随机梯度下降优化_常见损失计算算法_手写简单神经网络_实现手写体识别---人工智能工作笔记0179

然后对于,梯度下降,为了让训练的速度更好,更快的下降,又做了很多算法,可以看到 这里要知道Transformer中最常用的Adam 和 AdamW这两种算法. 当然,这些算法都是用于优化神经网络中的参数,以最小化损失函数。下面我会尽量以通俗易懂的方式解释它们的原理和适用场景。 1. **L-…

Qt下使用7Z源码进行压缩和解压缩

7Z压缩是一款常用的压缩算法和工具&#xff0c;本文主要介绍一款在qt环境下进行编译的压缩方法。 本人测试是可以正常跑通的&#xff0c;具体代码部分请下载&#xff1a;下载链接&#xff0c;提取码&#xff1a;ev9t 7z源码网址&#xff1a;7-Zip 7z简介&#xff1a; 7z 是…

vue+element-ui实现横向长箭头,横向线上下可自定义文字(使用after伪元素实现箭头)

项目场景&#xff1a; 需要实现一个长箭头&#xff0c;横向线上下可自定义文字 代码描述 <div><span class"data-model">{{ //上方文字}}</span><el-divider class"q"> </el-divider>//分隔线<span class"data-mod…

【人工智能基础】聚类实验分析

实验环境&#xff1a;anaconda、jupyter notebook、spyder 实现用到的类库&#xff1a;numpy、matplotlib、scikit-learn k均值聚类&#xff08;K-MEANS&#xff09; k均值聚类的原理&#xff1a; 选定k个聚类中心把数据集中距离聚类中心i最近的点都归属到一个簇根据每个簇中…

京东web京东,m端滑块,h5st4.2,4.3,4.7

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx a15018601872 本文章未…

(39)4.29数据结构(栈,队列和数组)栈

#include<stdlib.h> #include<stdio.h> #define MaxSize 10 #define Elemtype int 1.栈的基本概念 2.栈的基本操作 typedef struct { Elemtype data[MaxSize]; int top; }Sqstack;//初始化栈 void InitStack(Sqstack& S) { S.top -1; //初始化…

【C++】:日期类的实现 -- 日期计算器

前言 1.日期类是一种十分经典的类型。对于C的初学者&#xff0c;它能够帮助我们融会贯通许多C的基础知识&#xff0c;它涉及许多的基础语法&#xff0c;比如引用&#xff0c;函数重载&#xff0c;传值/传参返回&#xff0c;构造函数&#xff0c;运算符重载&#xff0c;const成…

final原理

文章目录 1. 设置 final 变量的原理2. 获取 final 变量的原理 1. 设置 final 变量的原理 理解了 volatile 原理&#xff0c;再对比 final 的实现就比较简单了 public class TestFinal {final int a 20; }字节码 0: aload_0 1: invokespecial #1 // Method java/lang/Object…

PaddlePaddle与OpenMMLab

产品全景_飞桨产品-飞桨PaddlePaddle OpenMMLab算法应用平台