[BZOJ2797][Poi2012]Squarks
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
4
3 5 4 7 6 5
Sample Input 2
4
11 17 12 20 21 15
Sample Output
2
4 7 8 13
3 8 9 12
Sample Output 1
1
1 2 3 4
HINT
Source
先把数列排一下序,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的更多相关文章
- 【BZOJ2797】[Poi2012]Squarks 暴力乱搞
[BZOJ2797][Poi2012]Squarks Description 设有n个互不相同的正整数{X1,X2,...Xn},任取两个Xi,Xj(i≠j),能算出Xi+Xj.现在所有取法共n*(n ...
- [POI2012]Squarks
[POI2012]Squarks 题目大意: 设有\(n\)个互不相同的正整数\(\{X_1,X_2,...,X_n\}\),任取两个\(X_i,X_j(i\ne j)\),能算出\(X_i+X_j\ ...
- bzoj 2797 [Poi2012]Squarks 枚举一个,推出所有
题目大意 设有n个互不相同的正整数{X1,X2,...Xn},任取两个Xi,Xj(i≠j),能算出Xi+Xj. 现在所有取法共n*(n-1)/2个和,要你求出X1,X2,...Xn. 输出所有满足条件 ...
- POI2012题解
POI2012题解 这次的完整的\(17\)道题哟. [BZOJ2788][Poi2012]Festival 很显然可以差分约束建图.这里问的是变量最多有多少种不同的取值. 我们知道,在同一个强连通分 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 2795: [Poi2012]A Horrible Poem
2795: [Poi2012]A Horrible Poem Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 484 Solved: 235[Subm ...
- [BZOJ2803][Poi2012]Prefixuffix
2803: [Poi2012]Prefixuffix Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 219 Solved: 95[Submit][St ...
- [BZOJ2799][Poi2012]Salaries
2799: [Poi2012]Salaries Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 91 Solved: 54[Submit][Statu ...
- POI2012 (持续更新中)
Distance Well Vouchers Cloakroom A Horrible Poem Rendezvous Fibonacci Representation Squarks Salarie ...
随机推荐
- JavaWeb学习之什么是Servlet、如何使用servlet、为什么这样使用、servlet的虚拟路径、关于缺省Servlet(2)
1.什么是Servlet? * 服务器端Java程序,servlet需要交给服务器来运行. * 与javax.servlet.Servlet接口有关的java程序 2.如何使用servlet?[必须] ...
- Yii 同域名的单点登录 SSO实现
SSO (Single Sign-on) 顾名思义就是几个子项目共用一个登录点. 原理简单来说就是服务端session 共享, 客户端跨域cookies. 实现非常简单,protected/confi ...
- 【20140113】package 与 import
一个完整的java源程序应该包括下列部分: package语句: //该部分至多只有一句,必须放在源程序的第一句 import语句: public classDefinition: //公共类定义部分 ...
- OpenMesh 删除网格顶点
OpenMesh 提供了 delete_vertex() 函数来实现从网格中删除顶点,在删除掉顶点的同时,所有与该顶点相连的边也同时被删除. OpenMesh 官方文档 中给的顶点删除函数声明如下: ...
- OpenMesh 读写网格控制(读取写入纹理坐标,法向等)
OpenMesh读取网格默认是不自动读取obj网格中的法向,纹理坐标等信息的,写入网格同样也是.所以要读取(或写入)这些信息需要修改默认的选项. 先看一下其读写网格的函数 template<cl ...
- apk 打包方式
1 项目-->Android tools -->Export Signed Application Package 2 在项目 manifest.xml文件下 单击“use the Ex ...
- 细说static关键字及其应用
场景 先看段代码,考虑以下场景,其运行结果是什么? public class Test { static int i = 8; public void printI() { int i = 88; S ...
- LeetCode——Same Tree(判断两棵树是否相同)
问题: Given two binary trees, write a function to check if they are equal or not. Two binary trees are ...
- 学习linux内核时常碰到的汇编指令(2)
转载:http://blog.sina.com.cn/s/blog_4be6adec01007xvh.html JNGE∶指令助记符——(有符号数比较)不大于且不等于转移(等价于JL).当SF和OF异 ...
- AS项目转到eclipse中方法
手工改,1.在eclipse 上新建一个空的项目;2.点击android studio 中的android 视图, a.替换as 中的AndroidManifest.xml -> ...