2797: [Poi2012]Squarks

Time Limit: 10 Sec  Memory Limit: 64 MB
Submit: 211  Solved: 89
[Submit][Status][Discuss]

Description

设有n个互不相同的正整数{X1,X2,...Xn},任取两个Xi,Xj(i≠j),能算出Xi+Xj。
现在所有取法共n*(n-1)/2个和,要你求出X1,X2,...Xn。

Input

第一行一个正整数n (3<=n<=300)。
第二行n*(n-1)/2个正整数(每个正整数不超过10^8),表示任取两个Xi,Xj(i≠j)算出的n*(n-1)/2个和。

Output

第一行一个正整数k,表示方案数。测试数据保证至少存在一种方案。
下面k行每行给出递增的n个正整数。方案按照{Xi}的最小值从大到小输出。

Sample Input

Sample Input 1
4
3 5 4 7 6 5

Sample Input 2
4
11 17 12 20 21 15

Sample Output

Sample Output 2
2
4 7 8 13
3 8 9 12

Sample Output 1
1
1 2 3 4

HINT

 

Source

[Submit][Status][Discuss]

先把数列排一下序,a1一定是x1+x2,a2一定是x1+x3。如果知道x2+x3的话,就可以求出x1~x3了。

这样的话可以枚举x2+x3,然后求出x1~x3之后删掉这里面的和,最小的一定是x1+x4了,这样又可以求出来x4。

因为n比较小,这样就可以过了。

 #include<set>
#include<cstdio>
#include<algorithm>
#define N 305
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int n,tot,a[N*N],ans[N][N],x[N];
multiset<int>s;
void solve(int a3)
{
s.clear();
for(int i=;i<=n*(n-)/;i++)
s.insert(a[i]);
if(a[]+a[]+a3&)return;
x[]=a[]+a[]-a3>>;
x[]=a[]-a[]+a3>>;
x[]=-a[]+a[]+a3>>;
if(x[]<||x[]<||x[]<)return;
s.erase(s.find(a[]));
s.erase(s.find(a[]));
s.erase(s.find(a3));
for(int i=;i<=n;i++)
{
x[i]=*s.begin()-x[];
if(x[i]<)return;
for(int j=;j<i;j++)
{
int t=x[j]+x[i];
if(s.find(t)==s.end())return;
s.erase(s.find(t));
}
}
for(int i=;i<=n;i++)
if(x[i]<=x[i-])return;
for(int i=;i<=n;i++)
ans[tot][i]=x[i];
tot++;
}
int main()
{
n=read();
for(int i=;i<=n*(n-)/;i++)a[i]=read();
sort(a+,a+n*(n-)/+);
for(int i=;i<=n;i++)
if(i==||a[i]!=a[i-])
solve(a[i]);
printf("%d\n",tot);
for(int j=;j<tot;j++,puts(""))
for(int i=;i<=n;i++)
printf("%d ",ans[j][i]);
}

(PS:我发现有很多人特别快,不知道是怎么做的。。)

[BZOJ2797][Poi2012]Squarks的更多相关文章

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

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

  2. [POI2012]Squarks

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

  3. bzoj 2797 [Poi2012]Squarks 枚举一个,推出所有

    题目大意 设有n个互不相同的正整数{X1,X2,...Xn},任取两个Xi,Xj(i≠j),能算出Xi+Xj. 现在所有取法共n*(n-1)/2个和,要你求出X1,X2,...Xn. 输出所有满足条件 ...

  4. POI2012题解

    POI2012题解 这次的完整的\(17\)道题哟. [BZOJ2788][Poi2012]Festival 很显然可以差分约束建图.这里问的是变量最多有多少种不同的取值. 我们知道,在同一个强连通分 ...

  5. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  6. 2795: [Poi2012]A Horrible Poem

    2795: [Poi2012]A Horrible Poem Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 484  Solved: 235[Subm ...

  7. [BZOJ2803][Poi2012]Prefixuffix

    2803: [Poi2012]Prefixuffix Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 219  Solved: 95[Submit][St ...

  8. [BZOJ2799][Poi2012]Salaries

    2799: [Poi2012]Salaries Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 91  Solved: 54[Submit][Statu ...

  9. POI2012 (持续更新中)

    Distance Well Vouchers Cloakroom A Horrible Poem Rendezvous Fibonacci Representation Squarks Salarie ...

随机推荐

  1. Linux Shell 高级编程技巧4----几个常用的shell脚本例子

    4.几个常用的shell脚本例子    4.0.在写脚本(同样适用在编程的时候),最好写好完善的注释    4.1.kill_processes.sh(一个杀死进程的脚本) #!/bin/bash c ...

  2. Eclipse 快捷键 转换为Netbeans 快捷键

    一直使用netbeans IDE开发,习惯了netbeans的快捷键,最近要开发个app就选择了H5. 接着使用了HBuilder (基于Eclipse开发) 总体来讲这个IDE还可以,不管是代码提示 ...

  3. 【转载】 Python动态生成变量

    用Python循环创建多个变量, 如创建 a1=   .a2=   .a3=   .a4=   .a5=    或  self.a1=    .self.a2=   . self.a3= 一. 可以通 ...

  4. 拷贝,集合,函数,enumerate,内置函数

    1.拷贝 字符串和数字.赋值 id一样 import copy #提供拷贝功能 copy.copy() #原来的和现在的一起修改,不用修改时用浅copy,节省内存,复制最外层 copy.deepcop ...

  5. mysql5.7.11安装配置

    1.下载安装包. mysql-5.7.11版本: http://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.11-winx64.zip 2.拷贝到任意盘: ...

  6. [LeetCode] Validate Binary Search Tree (两种解法)

    Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as ...

  7. NBU expired Media,Media ID not found in EMM database

    Subject:When attempting to expire a media in Veritas NetBackup (tm) 6.0 with the bpexpdate command, ...

  8. 【leetcode】plus One

    问题描述: Given a non-negative number represented as an array of digits, plus one to the number. The dig ...

  9. [Oracle] 生产上表的列类型更新

    由于粗心,数据库脚本生成的时候错将一个类型NUMBER(5)的字段类型改为 VARCHAR2(5) 直接进行表修改会报错,因为数据已经存在,不能进行更新: ); 大体思路如下:       将要更改类 ...

  10. mysql无法远程连接的解决方法

        在阿里云服务器上安装好MySQL后,首先想到的就是安装一款工具来管理数据库,一开始选择了phpMyAdmin,这个工具安装很简单,只要解压到能访问的目录下就行了.在浏览器中访问phpMyAdm ...