【BZOJ2797】[Poi2012]Squarks

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

题解:首先将所有和排序,那么前两个和一定是x1+x2和x1+x3。但是下一个可能是x1+x4或x2+x3。不过容易发现,如果下一个是x2+x3,那么x1,x2,x3就都确定了,我们将这3个数两两相加的和去掉,剩下的最小的和就是x1+x4,再将x4+x(1,2,3)去掉,剩下的就是x1+x5。重复以上过程我们就能得到所有数的值。

所以我们只需要枚举x2+x3何时出现,那么它之前的数一定都是x1+xi,接着我们就能算出前i个数的值,进而得到所有数的值了。在求的时候可以用set维护一下,复杂度就是$O(n^3log_n)$的。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <set>
using namespace std;
int n,m,sum,ans;
int s[50010],v[310],A[310][310],p[310],k[310],q[310];
multiset<int> S;
multiset<int>::iterator it;
bool cmp(int a,int b)
{
for(int i=1;i<=n;i++) if(A[a][i]!=A[b][i]) return A[a][i]>A[b][i];
return 0;
}
int main()
{
scanf("%d",&n),m=n*(n-1)/2;
int i,j,k,flag;
for(i=1;i<=m;i++) scanf("%d",&s[i]);
sort(s+1,s+m+1);
for(i=3;i<=n;i++)
{
v[1]=(s[1]+s[2]-s[i])/2;
if(v[1]<=0) break;
flag=1;
for(j=2;j<=i&&flag;j++)
{
v[j]=s[j-1]-v[1];
if(v[j]<=v[j-1]) flag=0;
}
if(!flag) continue;
S.clear();
for(j=1;j<=m;j++) S.insert(s[j]);
for(j=1;j<i;j++) for(k=j+1;k<=i&&flag;k++)
{
it=S.find(v[j]+v[k]);
if(it==S.end()) flag=0;
else S.erase(it);
}
for(j=i+1;j<=n&&flag;j++)
{
v[j]=*(S.begin())-v[1];
if(v[j]<=v[j-1]) flag=0;
for(k=1;k<j&&flag;k++)
{
it=S.find(v[j]+v[k]);
if(it==S.end()) flag=0;
else S.erase(it);
}
}
if(!flag) continue;
sum++;
for(j=1;j<=n;j++) A[sum][j]=v[j];
}
for(i=1;i<=sum;i++) p[i]=i;
sort(p+1,p+sum+1,cmp);
for(i=1;i<=sum;i++)
{
for(j=1;j<=n;j++) if(A[p[i]][j]!=A[p[i-1]][j]) break;
if(j<=n) q[++ans]=p[i];
}
printf("%d\n",ans);
for(i=1;i<=ans;i++)
{
for(j=1;j<=n;j++) printf("%d ",A[q[i]][j]);
if(i!=ans) printf("\n");
}
return 0;
}

【BZOJ2797】[Poi2012]Squarks 暴力乱搞的更多相关文章

  1. VIJOS1476 旅行规划(树形Dp + DFS暴力乱搞)

    题意: 给出一个树,树上每一条边的边权为 1,求树上所有最长链的点集并. 细节: 可能存在多条最长链!最长链!最长链!重要的事情说三遍 分析: 方法round 1:暴力乱搞Q A Q,边权为正-> ...

  2. [BZOJ2797][Poi2012]Squarks

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

  3. [CSP-S模拟测试]:Cicada拿衣服(暴力+乱搞)

    题目传送门(内部题94) 输入格式 第一行两个整数$n,k$,代表衣服的数量和阈值. 接下来一行$n$个数,第$i$个数$a_i$表示每件衣服的愉悦值. 输出格式 输出一行$n$个数,第$i$个数为$ ...

  4. BZOJ 1491: [NOI2007]社交网络(Floyd+暴力乱搞)

    题面: https://www.lydsy.com/JudgeOnline/problem.php?id=1491 题解: 先看数据范围,n<=100..欸可以乱搞了 首先因为小学学过的乘法原理 ...

  5. Codeforces #254 div1 B. DZY Loves FFT 暴力乱搞

    B. DZY Loves FFT 题目连接: http://codeforces.com/contest/444/problem/B Description DZY loves Fast Fourie ...

  6. Codeforces 34C-Page Numbers(set+vector+暴力乱搞)

    C. Page Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  7. Codeforces Gym 100203G Good elements 暴力乱搞

    原题链接:http://codeforces.com/gym/100203/attachments/download/1702/statements.pdf 题解 考虑暴力的复杂度是O(n^3),所以 ...

  8. Codeforces 245G Suggested Friends 暴力乱搞

    G. Suggested Friends time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  9. BZOJ-1050 旅行comf 并查集+乱搞

    好久以前codevs上做过的,拿着改了改.. 1050: [HAOI2006]旅行comf Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2194 S ...

随机推荐

  1. Dbvisual连接远程数据库报错Error Code: 17401

    Long Message:违反协议 Details:   Type: java.sql.SQLException   Error Code: 17401   SQL State: null 现象: 本 ...

  2. Lintcode---克隆二叉树

    深度复制一个二叉树. 给定一个二叉树,返回一个他的 克隆品 . 您在真实的面试中是否遇到过这个题? Yes 样例 给定一个二叉树: 1 / \ 2 3 / \ 4 5 返回其相同结构相同数值的克隆二叉 ...

  3. 为什么会找不到D层文件?

    近期两天在重装系统,今天好不easy把各种东西都装齐全了,再打开我的机房收费系统,就提演示样例如以下错误: 看到这个问题.我感觉非常熟,由于曾经也遇到过两次这个问题,都是改了下D层的编译路径.改到了U ...

  4. Python在ubuntu下常用开发包名称

    build-essential python3-setuptools python-setuptools-doc python3-all-dev python3-wheelwheel时pip支持的一种 ...

  5. 分布式ID生成方案

    系统唯一ID是设计一个系统的时候常常会遇到的问题,也常常为这个问题而纠结. 生成ID的方法有很多,适应不同的场景.需求以及性能要求.所以有些比较复杂的系统会有多个ID生成的策略. 0. 分布式ID要求 ...

  6. atitit.GUI图片非规则按钮跟动态图片切换的实现模式总结java .net c# c++ web html js

    atitit.GUI图片非规则按钮跟动态图片切换的实现模式总结java .net c# c++ web html js 1. 图片按钮的效果总结 1 1.1. 按钮图片自动缩放的. 1 1.2. 不要 ...

  7. hdoj 1272 小希的迷宫 又一个并查集的简单应用

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  8. iOS应用代码段瘦身办法

    iOS应用代码段瘦身办法 大型app应对苹果官方代码段大小限制的小伎俩… 背景 苹果官方文档 对二进制 __TEXT 段大小有限制: 代码实在瘦不下去怎么办? 解决方案 利用 rename_secti ...

  9. httpclient 释放连接的问题 Invalid use of SingleClientConnManager: connection still allocated

    Invalid use of SingleClientConnManager: connection still allocated httpPost.releaseConnection();  该代 ...

  10. getAttribute()方法

    http://www.imooc.com/code/1587 getAttribute()方法 通过元素节点的属性名称获取属性的值. 语法: elementNode.getAttribute(name ...