[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 ...
随机推荐
- Android ANR分析(三)
http://www.jianshu.com/p/8964812972be http://stackoverflow.com/questions/704311/android-how-do-i-inv ...
- 关于 redis、memcache、mongoDB 的对比(转载)
from:http://yang.u85.us/memcache_redis_mongodb.pdf 从以下几个维度,对 redis.memcache.mongoDB 做了对比.1.性能都比较高,性能 ...
- ASP.NET Web API 上传文件
HTML表单: <form id="form1" method="post" enctype="multipart/form-data" ...
- font-face使用备忘
@font-face { font-family: 'SingleMalta'; src: url('./font/SingleMalta.ttf'); } @font-face { font-fam ...
- SVN-简要说明
SVN官方推荐在一个版本库的根目录下先建立trunk.branches.tags这三个文件夹,其中trunk是开发主干,存放日常开发的内容:branches存放各分支的内容,比如为不同客户定制的不同版 ...
- A Study of WebRTC Security
转自:http://webrtc-security.github.io/ A Study of WebRTC Security Abstract Web Real-Time Communication ...
- IIS配置php运行环境默认加载的php.ini路径
第一步: 把PHP的安装路径添加到环境变量Path中,右键 “我的电脑” -> 高级 -> 环境变量 -> 系统变量,追加 D:PHP-5.2.8\; 第二步: 新建“系统变量” P ...
- windows 2003 企业版 下载地址+序列号
迅雷地址: thunder://QUFodHRwOi8vcy5zYWZlNS5jb20vV2luZG93c1NlcnZlcjIwMDNTUDJFbnRlcnByaXNlRWRpdGlvbi5pc29a ...
- 用Access作为后台数据库支撑。
/// <summary> /// 读取Excel文档 /// </summary> /// <param name="Path">文件名称&l ...
- Redis学习笔记(2) Redis基础类型及命令之一
1. 基础命令 (1) 获取符合规则的键名列表 格式为:KEYS pattern 其中pattern表示支持通配符 # 建立一个名为bar的键 > SET bar OK # 获取Redis所有键 ...