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的路径使得这条路径上最大最小边的比值最小? 思路 ...
随机推荐
- typescript设置全屏
fullScreen() { document.getElementById("fullScreen").style.display = "none"; doc ...
- 4G 内存 怎么只有2.99G可用
32为系统只可以识别3.25G,而且有256M的内存被显卡共享显存了,所以只剩2,99G.
- iOS--UIScrollView基本用法和代理方法
主要是为了记录下UIScrollView的代理方法吧 在帮信息学院的学长做东西的时候需要大量用到分块浏览,所以就涉及到很多的关于scrollview,所以也就有了这篇文章 - (void)view ...
- CPL学习笔记(二)
数组 数组(array) 声明通用格式为: typeName arrayName[arraySize]. arrayName指定元素数目,必须为整型常量或const值.(不能是变量) int a[3] ...
- (68)zabbix windows性能计数器使用详解
概述 windows下的性能计数器让zabbix监控更加轻松,直接获取性能计数器的数值即可完成windows监控.性能计数器如下: 1 perf_counter["\Processor( ...
- 解决mysql出现的问题#1055 - Expression of SELECT list is not in GROUP BY clause and contains nonaggregated column this i
最近在学flask, 在访问主页时,一直出现1055错误,在网上找的解决方法是删除ONLY_FULL_GROUP_BY,当时是删除了,但是退出在进行select @@sql_mode时,仍出现ONLY ...
- centos里没有pip命令怎么办?
刚刚入门python的嘛,然后这个centos也是不是那么熟悉!! pip在centos也没有,所以网上找来资料,3条语句就搞定啦! 1.查看是否安装依赖包,没安装先安装: yum install e ...
- MySQL中 IFNULL、NULLIF和ISNULL函数的用法
mysql 中 ifnull().nullif().isnull()函数的用法讲解: 一.IFNULL(expr1,expr2)用法: 假如expr1不为NULL,则 IFNULL() 的返回值为ex ...
- STM32CUBEMX入门学习笔记2:关于STM32芯片使用内部flash
找到正点原子的官网,下载他的HAL库:http://www.openedv.com/thread-109778-1-1.html 找到此例程,并打开其工程文件. 找到此文件,复制到自己工程里 复制到自 ...
- 牛客网暑期ACM多校训练营(第七场)A Minimum Cost Perfect Matching(找规律)
题意: 给定n, 求一个0~n-1的全排列p, 使得的和最小 分析: 打表发现最优解肯定是和为0的, 然后如果为2的幂就是直接反转即可, 不然的话就要分开从前面到后面逐步拆分, 具体思想模拟一下n = ...