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的路径使得这条路径上最大最小边的比值最小? 思路 ...
随机推荐
- Java 从资源文件(.properties)中读取数据
在Java工程目录src下,创建一个后缀为.properties的文件,例如db.properties 文件中的内容如下(键=值): name=mk age=123 address=China 在程序 ...
- Java写诗程序
import java.util.Random; public class test_word { public static void main(String[] args) { System.ou ...
- java基础—super关键字
一.super关键字
- 自行实现一个简易RPC框架
10分钟写一个RPC框架 1.RpcFramework package com.alibaba.study.rpc.framework; import java.io.ObjectInputStrea ...
- FMDB中的数据处理
[self.db executeUpdate:@"create table test (a text, b text, c integer, d double, e double)" ...
- 禁止按键F5和禁止鼠标右键菜单 js代码
<script language="javascript"> //禁止按键F5 document.onkeydown = function(e){ e = window ...
- 【NOIP2017提高组模拟7.3】B
树上路径统计,点分治解决. 统计一段区间,naive地用了set解决,这样的复杂度是O(nlog^2n)的 考场代码出了个问题,统计答案时找到了之前的最优答案,但是没有加上新的一段,导致60分 #in ...
- sql_autoload_register()函数
复习__autoload的时候,看到了spl_autoload_register()这个函数.但是一下子没有弄明白,通过查资料我算是弄明白了. 1.__autoload() —— 自动加载 ...
- vue-highlightjs的使用小结
万能的github真主,让我们强大!在vue的项目中想使用highlight.js这样的代码高亮?有人帮助我们实现了vue-highlightjs 安装 yarn add highlight.js - ...
- phpstorm 工具使用技巧(持续补充中。。。)
phpstorm 工具使用技巧(持续补充中...) 一.phpstorm大小写切换 1.选择要转换的目标字符串: //普通商家,普通折扣默认值'COMMON_DISCOUNT'=>10.00, ...