bzoj 2797 [Poi2012]Squarks 枚举一个,推出所有
题目大意
设有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 枚举一个,推出所有的更多相关文章
- [BZOJ2797][Poi2012]Squarks
2797: [Poi2012]Squarks Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 211 Solved: 89[Submit][Status ...
- [POI2012]Squarks
[POI2012]Squarks 题目大意: 设有\(n\)个互不相同的正整数\(\{X_1,X_2,...,X_n\}\),任取两个\(X_i,X_j(i\ne j)\),能算出\(X_i+X_j\ ...
- 【BZOJ2797】[Poi2012]Squarks 暴力乱搞
[BZOJ2797][Poi2012]Squarks Description 设有n个互不相同的正整数{X1,X2,...Xn},任取两个Xi,Xj(i≠j),能算出Xi+Xj.现在所有取法共n*(n ...
- 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的权值减去 ...
- Bzoj 2789: [Poi2012]Letters 树状数组,逆序对
2789: [Poi2012]Letters Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 278 Solved: 185[Submit][Stat ...
- BZOJ 2795: [Poi2012]A Horrible Poem( hash )
...字符串hash. 假如长度x是一个循环节, 那么对于任意n(x | n)也是一个循环节. 设当前询问区间[l, r]长度为len = ∏piai, 最终答案ans = ∏piai' ,我们只需枚 ...
- bzoj 2803 [Poi2012]Prefixuffix 兼字符串hash入门
打cf的时候遇到的问题,clairs告诉我这是POI2012 的原题..原谅我菜没写过..于是拐过来写这道题并且学了下string hash. 字符串hash基于Rabin-Karp算法,并且对于 ...
- bzoj 2795 [Poi2012]A Horrible Poem hash+线性筛
题目大意 bzoj 2795 给出一个由小写英文字母组成的字符串S,再给出q个询问,要求回答S某个子串的最短循环节. 如果字符串B是字符串A的循环节,那么A可以由B重复若干次得到. n<=500 ...
- BZOJ 1050 旅行comf(枚举最小边-并查集)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1050 题意:给出一个带权图.求一条s到t的路径使得这条路径上最大最小边的比值最小? 思路 ...
随机推荐
- Java第十二次作业:继承与抽象类解决工人与学生的问题,抽象类实例。抽象类作用——为多态创造了可能。抽象类的作用总结
继承与抽象类解决工人与学生的问题 抽象类实例 package com.swift; public abstract class Person { private String name; privat ...
- Object-C知识点 (六) 开发中的技巧
本文主要介绍开发中的一些实用技巧 #pragma mark - 代码控制Home按键 [[UIApplication sharedApplication] performSelector:@selec ...
- python 爬取知乎图片
先上完整代码 import requests import time import datetime import os import json import uuid from pyquery im ...
- python入门:模拟简单用户登录(自写)
#!/usr/bin/env python # -*- coding: utf-8 -*- #模拟简单用户登录(自写) import getpass a = raw_input("Pleas ...
- 第6章 AOP与全局异常处理6.5-6.11 慕课网微信小程序开发学习笔记
https://coding.imooc.com/learn/list/97.html 目录: 第6章 AOP与全局异常处理6-1 正确理解异常处理流程 13:236-2 固有的处理异常的思维模式与流 ...
- LeetCode(23)Merge k Sorted Lists
题目 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity ...
- poj 3614 奶牛美容问题 优先队列
题意:每头奶牛需要涂抹防晒霜,其中有效的范围 min~max ,现在有L种防晒霜,每种防晒霜的指数为 f 瓶数为 l,问多少只奶牛可以涂上合适的防晒霜?思路: 优先队列+贪心 当奶牛的 min< ...
- Linux下配置LAMP环境
先准备相关软件,并确保服务器已经安装了gcc,gcc-c++,make三个软件,以便后续编译过程. 首先安装, libxml2 ftp://xmlsoft.org/libxml2/ 下载最新版本(我的 ...
- [POJ 1007] DNA Sorting C++解题
DNA Sorting Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 77786 Accepted: 31201 ...
- 大数据学习——spark运营案例
iplocation需求 在互联网中,我们经常会见到城市热点图这样的报表数据,例如在百度统计中,会统计今年的热门旅游城市.热门报考学校等,会将这样的信息显示在热点图中. 因此,我们需要通过日志信息(运 ...