题目大意

设有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 枚举一个,推出所有的更多相关文章

  1. [BZOJ2797][Poi2012]Squarks

    2797: [Poi2012]Squarks Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 211  Solved: 89[Submit][Status ...

  2. [POI2012]Squarks

    [POI2012]Squarks 题目大意: 设有\(n\)个互不相同的正整数\(\{X_1,X_2,...,X_n\}\),任取两个\(X_i,X_j(i\ne j)\),能算出\(X_i+X_j\ ...

  3. 【BZOJ2797】[Poi2012]Squarks 暴力乱搞

    [BZOJ2797][Poi2012]Squarks Description 设有n个互不相同的正整数{X1,X2,...Xn},任取两个Xi,Xj(i≠j),能算出Xi+Xj.现在所有取法共n*(n ...

  4. 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的权值减去 ...

  5. Bzoj 2789: [Poi2012]Letters 树状数组,逆序对

    2789: [Poi2012]Letters Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 278  Solved: 185[Submit][Stat ...

  6. BZOJ 2795: [Poi2012]A Horrible Poem( hash )

    ...字符串hash. 假如长度x是一个循环节, 那么对于任意n(x | n)也是一个循环节. 设当前询问区间[l, r]长度为len = ∏piai, 最终答案ans = ∏piai' ,我们只需枚 ...

  7. bzoj 2803 [Poi2012]Prefixuffix 兼字符串hash入门

    打cf的时候遇到的问题,clairs告诉我这是POI2012 的原题..原谅我菜没写过..于是拐过来写这道题并且学了下string hash.   字符串hash基于Rabin-Karp算法,并且对于 ...

  8. bzoj 2795 [Poi2012]A Horrible Poem hash+线性筛

    题目大意 bzoj 2795 给出一个由小写英文字母组成的字符串S,再给出q个询问,要求回答S某个子串的最短循环节. 如果字符串B是字符串A的循环节,那么A可以由B重复若干次得到. n<=500 ...

  9. BZOJ 1050 旅行comf(枚举最小边-并查集)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1050 题意:给出一个带权图.求一条s到t的路径使得这条路径上最大最小边的比值最小? 思路 ...

随机推荐

  1. Java第十二次作业:继承与抽象类解决工人与学生的问题,抽象类实例。抽象类作用——为多态创造了可能。抽象类的作用总结

    继承与抽象类解决工人与学生的问题 抽象类实例 package com.swift; public abstract class Person { private String name; privat ...

  2. Object-C知识点 (六) 开发中的技巧

    本文主要介绍开发中的一些实用技巧 #pragma mark - 代码控制Home按键 [[UIApplication sharedApplication] performSelector:@selec ...

  3. python 爬取知乎图片

    先上完整代码 import requests import time import datetime import os import json import uuid from pyquery im ...

  4. python入门:模拟简单用户登录(自写)

    #!/usr/bin/env python # -*- coding: utf-8 -*- #模拟简单用户登录(自写) import getpass a = raw_input("Pleas ...

  5. 第6章 AOP与全局异常处理6.5-6.11 慕课网微信小程序开发学习笔记

    https://coding.imooc.com/learn/list/97.html 目录: 第6章 AOP与全局异常处理6-1 正确理解异常处理流程 13:236-2 固有的处理异常的思维模式与流 ...

  6. LeetCode(23)Merge k Sorted Lists

    题目 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity ...

  7. poj 3614 奶牛美容问题 优先队列

    题意:每头奶牛需要涂抹防晒霜,其中有效的范围 min~max ,现在有L种防晒霜,每种防晒霜的指数为 f 瓶数为 l,问多少只奶牛可以涂上合适的防晒霜?思路: 优先队列+贪心 当奶牛的 min< ...

  8. Linux下配置LAMP环境

    先准备相关软件,并确保服务器已经安装了gcc,gcc-c++,make三个软件,以便后续编译过程. 首先安装, libxml2 ftp://xmlsoft.org/libxml2/ 下载最新版本(我的 ...

  9. [POJ 1007] DNA Sorting C++解题

        DNA Sorting Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 77786   Accepted: 31201 ...

  10. 大数据学习——spark运营案例

    iplocation需求 在互联网中,我们经常会见到城市热点图这样的报表数据,例如在百度统计中,会统计今年的热门旅游城市.热门报考学校等,会将这样的信息显示在热点图中. 因此,我们需要通过日志信息(运 ...