bzoj 2797 [Poi2012]Squarks 枚举一个,推出所有
题目大意
设有n个互不相同的正整数{X1,X2,...Xn},任取两个Xi,Xj(i≠j),能算出Xi+Xj。
现在所有取法共n*(n-1)/2个和,要你求出X1,X2,...Xn。
输出所有满足条件的方案
3<=n<=300
分析
首先我们假设x1<x2<x3..<xn是没问题的
那么两个数的和中最小的为x1+x2
次小的为x1+x3
现在考虑x2+x3的排名
比x2+x3小的一定是x1+xk
我们枚举x2+x3是哪一个值
可以解出x1,x2,x3
剩下的数中最小的为x1+x4
求出x4
同时可以算出x2+x4,x3+x4
除去已知的,剩下的数中最小x1+x5
依此类推
做法
我们考虑怎么找剩下的数
首先我们把所有的和插入set/heap里
每知道一个和就在里面删掉
考虑什么情况违法
x<0, xi-1==xi ,你求出来的和在原序列中不存在
solution
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cctype>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
const int M=307;
inline int rd(){
int x=0;bool f=1;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=0;
for(;isdigit(c);c=getchar()) x=x*10+c-48;
return f?x:-x;
}
int n,m;
int a[M];
int b[M*M];
int ans[M][M],tot;
struct cmp{
bool operator () (int x,int y){
return x>y;
}
};
priority_queue<int,vector<int>,cmp>q,ers;
void gao(int d){
int tp=b[1]+b[2]+d;
if(tp&1) return;
tp/=2;
a[3]=tp-b[1];
a[2]=tp-b[2];
a[1]=tp-d;
int cnt;
int i,j,val;
while(!q.empty()) q.pop();
while(!ers.empty()) ers.pop();
for(i=1;i<=m;i++) q.push(b[i]);
ers.push(b[1]);
ers.push(b[2]);
ers.push(d);
for(cnt=4;cnt<=n;cnt++){
while(!ers.empty()){
if(ers.top()==q.top()){
ers.pop();
q.pop();
}
else break;
}
val=q.top();q.pop();
a[cnt]=val-a[1];
for(j=2;j<cnt;j++) ers.push(a[j]+a[cnt]);
}
while(!ers.empty()){
if(ers.top()==q.top()){
ers.pop();
q.pop();
}
else break;
}
if(!ers.empty()) return;
for(i=1;i<=n;i++) if(a[i]<=0) return;
for(i=2;i<=n;i++) if(a[i]==a[i-1]) return;
tot++;
for(i=1;i<=n;i++) ans[tot][i]=a[i];
}
int main(){
int i,j;
n=rd();
m=n*(n-1)/2;
for(i=1;i<=m;i++) b[i]=rd();
sort(b+1,b+m+1);
for(i=3;i<=n;i++)
if(i==3||b[i]!=b[i-1]) gao(b[i]);
printf("%d\n",tot);
for(i=1;i<=tot;i++){
for(j=1;j<=n;j++) printf("%d ",ans[i][j]);
puts("");
}
}
bzoj 2797 [Poi2012]Squarks 枚举一个,推出所有的更多相关文章
- [BZOJ2797][Poi2012]Squarks
2797: [Poi2012]Squarks Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 211 Solved: 89[Submit][Status ...
- [POI2012]Squarks
[POI2012]Squarks 题目大意: 设有\(n\)个互不相同的正整数\(\{X_1,X_2,...,X_n\}\),任取两个\(X_i,X_j(i\ne j)\),能算出\(X_i+X_j\ ...
- 【BZOJ2797】[Poi2012]Squarks 暴力乱搞
[BZOJ2797][Poi2012]Squarks Description 设有n个互不相同的正整数{X1,X2,...Xn},任取两个Xi,Xj(i≠j),能算出Xi+Xj.现在所有取法共n*(n ...
- bzoj 2801 [Poi2012]Minimalist Security 设一个,求出所有
题目大意 给出一个N个顶点.M条边的无向图,边(u,v)有权值w(u,v),顶点i也有权值p(i), 并且对于每条边(u,v)都满足p(u)+p(v)>=w(u,v). 现在要将顶点i的权值减去 ...
- Bzoj 2789: [Poi2012]Letters 树状数组,逆序对
2789: [Poi2012]Letters Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 278 Solved: 185[Submit][Stat ...
- BZOJ 2795: [Poi2012]A Horrible Poem( hash )
...字符串hash. 假如长度x是一个循环节, 那么对于任意n(x | n)也是一个循环节. 设当前询问区间[l, r]长度为len = ∏piai, 最终答案ans = ∏piai' ,我们只需枚 ...
- bzoj 2803 [Poi2012]Prefixuffix 兼字符串hash入门
打cf的时候遇到的问题,clairs告诉我这是POI2012 的原题..原谅我菜没写过..于是拐过来写这道题并且学了下string hash. 字符串hash基于Rabin-Karp算法,并且对于 ...
- bzoj 2795 [Poi2012]A Horrible Poem hash+线性筛
题目大意 bzoj 2795 给出一个由小写英文字母组成的字符串S,再给出q个询问,要求回答S某个子串的最短循环节. 如果字符串B是字符串A的循环节,那么A可以由B重复若干次得到. n<=500 ...
- BZOJ 1050 旅行comf(枚举最小边-并查集)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1050 题意:给出一个带权图.求一条s到t的路径使得这条路径上最大最小边的比值最小? 思路 ...
随机推荐
- 十分钟看懂,未来Web前端开发最新趋势
首先,展望未来趋势我们就要弄懂过去的一年,也就是18年,web前端开发的重要新闻.重要事件和JavaScript的各种流行框架.模式发展趋势. 我们来快速回顾一下. NPM热门前端框架下载 先来看最热 ...
- 远程连接 mySql数据库
远程连接 mySql数据库 一.安装并配置MySQL1.安装MySQL:运行mysql-essential-6.0.11-alpha-win32,按“MySQL+6.0+Windows下安装图解”完成 ...
- 1_HDFS理论及安装部署
一.hadoop简介 1.hadoop的初衷是为了解决Nutch的海量数据爬取和存储的需要,HDFS来源于google的GFS,MapReduce来源于Google的MapReduce,HBase来源 ...
- IOS使用Jenkins进行持续集成
本文主要讲述在开发过程中,提高工作效率而进行的IOS-Jenkins的持续集成. 背景 平时我们开发完成IOS项目,需要打包给测试人员进行测试.其中的过程需要重复进行:修改配置项--编译---连接设备 ...
- 自动化运维工具——pssh
PSSH介绍 pssh是一个python编写可以在多台服务器上执行命令的工具,同时支持拷贝文件,是同类工具中很出色的.它的用法可以媲美ansible的一些简单用法,执行起来速度比ansible快它支持 ...
- redis+PHP消息队列实现及应用
学习视频: http://www.imooc.com/learn/852 学习笔记: https://blog.csdn.net/qq_33862644/article/details/7938564 ...
- 优酷项目之 ORM(数据库对象关系映射)代码重写
前言: 我们在操作数据库时候一般都是通过sql代码来操作mysql数据库中相关数据,这就需要懂得sql语句,那么怎么样才能在不懂sql语句的情况下通过我们所学的python代码来实现对mysql数据库 ...
- CodeForce:16C-Monitor
传送门:http://codeforces.com/problemset/problem/16/C Monitor time limit per test0.5 second memory limit ...
- 为工程添加上下文菜单(ContextMenu)
上下文菜单大多数情况下都是为ListView中的Item添加的,长按2S左右跳出菜单,添加上下文菜单必须重写活动中的onCreateContextMenu()方法和onContextItemSelec ...
- LSTM block和cell区别
LSTM的结构中每个时刻的隐层包含了多个memory blocks(一般我们采用一个block),每个block包含了包含一个Cell(有多个memory cell组成)和三个gate,一个基础的结构 ...