LuoguP1286 两数之和
题面概括
将n个数两两相加得到n*(n-1)/2个和,给出这些和,求所有原数方案
n<=500
LuoguP1286
题解
此题原题是 n<10, 没啥可做的
先将 \(n*(n-1)/2\) 个数排序
设b[i]表示给定的数中第i小的, a[i]为原数第i小的
显然有: b[1]=a[1]+a[2],b[2]=a[1]+a[3]
那么 i>=3 时呢?
则是不一定的
考虑为什么不一定: 我们无法判断 \(b[3] = a[1]+a[4]\) 还是 \(b[4] = a[2]+a[3]\)
那b[3]还可不可能等于其他的组合呢?
显然是不能的(不解释),
b[3]如此,b[4]呢? b[5]呢?
不难发现若 b[j]=a[p]+a[q] 当j确定后 \(q_max=j+1\),此时 p=1
所以我们可以通过枚举p,q(p!=1)来将b[j]删掉,剩下的数就一定是 a[1]+a[j+1]=b[j]
枚举a[1]则可以轻松推出剩下的数
删除操作用 multiset 实现,格外好写
代码
#include<bits/stdc++.h>
using namespace std;
#define int ll
#define re register
#define ll long long
#define get getchar()
#define in inline
in int read()
{
int t=0; char ch=get;
while(ch<'0' || ch>'9') ch=get;
while(ch<='9' && ch>='0') t=t*10+ch-'0', ch=get;
return t;
}
const int _=601;
multiset<int > s;
int n,b[_<<10],a[_],f[_],N,st,ans[_][_],tot;
in void solve(int k)
{
a[1]=(b[2]+b[1]-b[k])/2;
a[2]=b[1]-a[1];
a[3]=b[k]-a[2];
}
void calc(int qwe)
{
for(re int i=4;i<=n;i++)
{
multiset<int> :: iterator it=s.begin();
a[i]=*it-a[1];
s.erase(it);
if(a[i]<a[i-1]) return;
for(re int j=2;j<i;j++)
{
it=s.find(a[i]+a[j]);
if(*it!=a[i]+a[j]) return;
s.erase(it);
}
}
tot++;
for(re int i=1;i<=n;i++) { ans[tot][i]=a[i]; }
f[qwe]=1;
}
signed main()
{
while(cin>>n)
{
memset(f,0,sizeof(f));
memset(ans,0,sizeof(ans));
s.clear();
tot=0;
N=(n-1)*n/2;
for(re int i=1;i<=N;i++) b[i]=read();
sort(b+1,b+N+1);
for(re int i=3;i<=N && b[2]+b[1]>=b[i];i++)
{
if((b[2]+b[1]-b[i])&1) continue;
if(b[i]==b[i-1]&&f[i-1]) {f[i]=1;continue;}
solve(i);
if(a[3]<a[2] || a[2]<a[1]) continue;
s.clear();
for(re int j=3;j<=N;j++)
if(j!=i) s.insert(b[j]);
calc(i);
}
if(tot==0) {
cout<<"Impossible"<<endl;
continue;
}
for(re int i=tot;i>=1;i--){
for(re int j=1;j<=n;j++) cout<<ans[i][j]<<' ';
cout<<endl;
}
}
return 0;
}
LuoguP1286 两数之和的更多相关文章
- 给定数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X
题目:给定数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X 思路一: 1,先采用归并排序对这个数组排序, 2,然后寻找相邻<k,i>的两数之和sum,找到恰好sum>x的 ...
- LeetCode 170. Two Sum III - Data structure design (两数之和之三 - 数据结构设计)$
Design and implement a TwoSum class. It should support the following operations: add and find. add - ...
- LeetCode 371. Sum of Two Integers (两数之和)
Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -. Exam ...
- LeetCode 167. Two Sum II - Input array is sorted (两数之和之二 - 输入的是有序数组)
Given an array of integers that is already sorted in ascending order, find two numbers such that the ...
- [LeetCode] Two Sum IV - Input is a BST 两数之和之四 - 输入是二叉搜索树
Given a Binary Search Tree and a target number, return true if there exist two elements in the BST s ...
- [LeetCode] 1. Two Sum 两数之和
Part 1. 题目描述 (easy) Given an array of integers, return indices of the two numbers such that they add ...
- Leetcode(一)两数之和
1.两数之和 题目要求: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重 ...
- 南大算法设计与分析课程OJ答案代码(1)中位数附近2k+1个数、任意两数之和是否等于给定数
问题1 用来测试的,就不说了 问题2:中位数附近2k+1个数 给出一串整型数 a1,a2,...,an 以及一个较小的常数 k,找出这串数的中位数 m 和最接近 m 的小于等于 m 的 k 个数,以及 ...
- 两数之和,两数相加(leetcode)
我们都知道算法是程序员成长重要的一环,怎么才能提高算法呢, 出来在网上看视频之外,动手练习是非常重要的.leetcode 就是一个非常好的锻炼平台. 1. 两数之和,在 leetcode 里面是属于 ...
随机推荐
- spring Boot面试题(2020最新版)
概述 什么是 Spring Boot? Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提 ...
- .NETCore在析构函数(Finalize)在Linux下引起程序异常退出现象
目 录 1. 现象概述... 1 2. 操作数据库的代码... 2 3. 引起的异常... 2 4. 异常信息分析... 3 5. 分析结 ...
- 过万 star 高星项目的秘密——GitHub 热点速览 Vol.39
作者:HelloGitHub-小鱼干 虽然国外十一并不过国庆,但是本周的 GitHub 也稍显疲软,GitHub 周榜的获 star 超过 1k 的项目寥寥无几,本周新开源的项目更是屈指可数.用 C ...
- Neo4j---性能优化
不会项目管理的研发不是好loder(^_^ ^_^),开个玩笑,目的是想说项目管理很重要,研发同胞们需要重视.重视.重视(重要的事情说三遍).随着项目业务扩展,不再是停留在基本某一业务范围,海量数据接 ...
- VPS教程:搭建个人网盘教程—kodexplorer
kodexplorer网盘系统.Kodexplorer,也叫芒果云.可道云.kodcloud,总之名字改了不少.但其本身作为一个网盘文件系统,还是有很多可圈可点的地方. seafile.h5ai.ko ...
- Java知识系统回顾整理01基础01第一个程序07Eclipse使用----找不到类如何解决?
一.现象 有时候会碰到如图所示的问题,分明有Hello这个类,并且也有主方法,可是运行就会出现找不到或者无法加载类Hello,或者Class Not Found 异常. 出现这个状况,有多种原因造成, ...
- weblogic 安装+部署(一)
昨天刚接触weblogic,在windows下搭建了一个weblogic,没什么技术,留个笔记. 1.首先要有jdk,添加环境变量这个没什么好说的. 2.下载weblogic:可以去官网下:http: ...
- OneWire应用 单总线温度传感器DS18系列
OneWire DS18S20, DS18B20, DS1822 Temperature DS18B20 The DS18B20 digital thermometer provides 9-bit ...
- ThreeJS系列1_CinematicCameraJS插件详解
ThreeJS系列1_CinematicCameraJS插件详解 接着上篇 ThreeJS系列1_CinematicCameraJS插件介绍 看属性的来龙去脉 看方法作用 通过调整属性查看效果 总结 ...
- 一文搞懂PV、UV、VV、IP及其关系与计算
写在前面 十一长假基本上过去了,很多小伙伴在假期当中还是保持着持续学习的心态,也有不少小伙伴在微信上问我,让我推送相关的文章.这个时候,我都是抽空来整理小伙伴们的问题,然后,按照顺序进行推文. PS: ...