[POI2007]石头花园SKA

Time Limit: 20 Sec  Memory Limit: 162 MB
Submit: 776  Solved: 237
[Submit][Status][Discuss]

Description

  Blue Mary是一个有名的石头收藏家。迄今为止,他把他的藏品全部放在他的宫殿的地窖中。现在,他想将他
的藏品陈列在他的花园中。皇家花园是一个边长为1000000000单位的平行于坐标轴的正方形。对于每个石头,Blue
 Mary都有一个他想放置的坐标,然后将他告诉他的属下。不幸的是,他忘了告诉他们坐标的顺序(比如无法分辨(
x,y)和(y,x))。属下们,就自己决定了每个石头的具体位置。为了保护他的藏品,Blue Mary决定建造一个篱笆来
保护他们。为了美学的需要,篱笆也被设计为平行于坐标轴的矩形。如果花园的布局知道了,那么就可以知道最短
长度的篱笆的布局。他的属下们需要变换石头的坐标使得篱笆的长度最少。每个石头只能从(x,y)变换为(y,x),由
于每个石头的重量不一样。属下们希望他们移动的石头的重量和最少。

Input

第一行包含一个数n,表示石头的数量
接下来n行分别描述n个石头的初始坐标和重量xi,yi,mi。
(0<=xi,yi<=1000000000,1<=mi<=2000
(2<=n<=1000000)

Output

一行包含两个数由一个空格分割。
最小的篱笆长度和最小的移动的石子的重量和

Sample Input

5
2 3 400
1 4 100
2 2 655
3 4 100
5 3 277

Sample Output

10 200

HINT

2018.4.17修改题面,不需要输出方案了.未重测!

题解:

  篱笆的长度最小是第一目标,应当优先考虑。易知,当所有石头的坐标都满足x<=y的时候,即全部在y=x直线的一侧之时,一定能够得到最小的周长,这时的周长就是第一个答案。

  而满足这一周长的方式不止一种,可以将这个矩形关于y=x直线做对称,总共有四种可能的情况,全部枚举一遍即可。

 #include<cstring>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<iostream> #define ll long long
#define inf 1000000007
#define N 1000007 #define Wb putchar(' ')
#define We putchar('\n')
#define rg register int
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
}
inline void write(ll x)
{
if(x<) putchar('-'),x=-x;
if (x==) putchar();
int num=;char c[];
while(x) c[++num]=(x%)+,x/=;
while(num) putchar(c[num--]);
} int n,m,ans=inf;
int lx=inf,ly=inf,rx=-inf,ry=-inf;
struct Node
{
int x,y,w;
}a[N]; inline void solve(int lx,int ly,int rx,int ry)
{
#define judge(x,y) (x>=lx&&x<=rx&&y>=ly&&y<=ry)
int res=;
for (int i=;i<=n;i++)
{
if (judge(a[i].x,a[i].y)) continue;
if (judge(a[i].y,a[i].x)) res+=a[i].w;
else return;
}
#undef judge
ans=min(ans,res);
}
int main()
{
n=read();
for (int i=;i<=n;i++)
a[i].x=read(),a[i].y=read(),a[i].w=read();
for (int i=;i<=n;i++)
if (a[i].x<a[i].y)
{
lx=min(lx,a[i].x);
ly=min(ly,a[i].y);
rx=max(rx,a[i].x);
ry=max(ry,a[i].y);
}
else
{
lx=min(lx,a[i].y);
ly=min(ly,a[i].x);
rx=max(rx,a[i].y);
ry=max(ry,a[i].x);
}
solve(lx,ly,rx,ry),solve(lx,ly,ry,rx);
solve(ly,lx,rx,ry),solve(ly,lx,ry,rx);
write(2ll*(rx+ry-lx-ly)),Wb,write(ans);
}

BZOJ1105 [POI2007]石头花园SKA 贪心的更多相关文章

  1. BZOJ1105 : [POI2007]石头花园SKA

    考虑把所有石头翻到直线y=x同侧,此时可以保证篱笆长度最短. 这种最短的篱笆一共有4种可能,枚举每种可能然后$O(n)$检验求出答案即可. #include<cstdio> const i ...

  2. BZOJ 1105: [POI2007]石头花园SKA

    1105: [POI2007]石头花园SKA Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 628  Solved: 182[Submit][Stat ...

  3. [POI2007]石头花园SKA

    Description Blue Mary是一个有名的石头收藏家.迄今为止,他把他的藏品全部放在他的宫殿的地窖中.现在,他想将他的藏品陈列在他的花园中.皇家花园是一个边长为1000000000单位的平 ...

  4. 【BZOJ】1105: [POI2007]石头花园SKA

    题意 二维平面上有\(n(2 \le n \le 1000000)\)个点,可以花费\(w_i\)交换第\(i\)个点的横纵坐标.求在满足能覆盖所有点的最小矩阵周长最短的情况下花费最小. 分析 这题太 ...

  5. 【BZOJ2000】[HNOI2000]取石头游戏(贪心,博弈论)

    [BZOJ2000][HNOI2000]取石头游戏(贪心,博弈论) 题面 BZOJ 洛谷 题解 这题好神仙啊,窝不会QaQ. 假装一下只有三个元素\(a_{i-1},a_i,a_{i+1}\),并且满 ...

  6. [bzoj1105]石头花园

    首先$C/2=x_{max}+y_{max}-x_{min}-y_{min}=max(x_{max},y_{max})-min(x_{min},y_{min})+min(x_{max},y_{max} ...

  7. [luogu] P3210 [HNOI2010]取石头游戏(贪心)

    P3210 [HNOI2010]取石头游戏 题目描述 A 公司正在举办一个智力双人游戏比赛----取石子游戏,游戏的获胜者将会获得 A 公司提供的丰厚奖金,因此吸引了来自全国各地的许多聪明的选手前来参 ...

  8. luogu2678 [NOIp2015]跳石头 (二分答案+贪心)

    先二分出一个x,我们要算使最近的跳跃距离>=x的最少移除数量是否<=M就可以了 然后就别dp了...贪心就完事了...我肯定能不移就不移比较好... #include<bits/st ...

  9. B1108 [POI2007]天然气管道Gaz 贪心

    啊啊啊,这题有毒.我想了各种花式数据结构,最后告诉我贪心???受不了... 题干: Description Mary试图控制成都的天然气市场.专家已经标示出了最好的天然气井和中转站在成都的地图.现在需 ...

随机推荐

  1. CSP201403-2:窗口

    引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的"计算机职业资格认证"考试, ...

  2. [Clr via C#读书笔记]Cp1CLR执行模型

    Cp1CLR执行模型 本章的概念点 CLR=Common Language Runtime 内存管理,程序集加载,安全性,异常处理和线程同步.CLR是基础,支持着面向它的各种语言.各种语言会被对应的编 ...

  3. 剑指offer-顺时针打印矩阵19

    题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数 ...

  4. 地牢逃脱(BFS(广度优先搜索))

    题目描述 给定一个 n 行 m 列的地牢,其中 '.' 表示可以通行的位置,'X' 表示不可通行的障碍,牛牛从 (x0 , y0 ) 位置出发,遍历这个地牢,和一般的游戏所不同的是,他每一步只能按照一 ...

  5. ThinkPHP - 4 - 学习笔记(2015.4.12)

    ThinkPHP D方法 D方法用于实例化自定义模型类,是ThinkPHP框架对Model类实例化的一种封装,并实现了单例模式,支持跨项目和分组调用,调用格式如下:D('[项目://][分组/]模型' ...

  6. Red and Black(DFS深搜实现)

    Description There is a rectangular room, covered with square tiles. Each tile is colored either red ...

  7. HDU 2124 Repair the Wall

    http://acm.hdu.edu.cn/showproblem.php?pid=2124 Problem Description Long time ago , Kitty lived in a ...

  8. windows默认TEMP环境

    留着是为了等出问题的时候能找着改回来 Administrator 的用户变量 TEMP     %USERPROFILE%\AppData\Local\Temp TMP        %USERPRO ...

  9. c++内存分类

    1. 代码段:放置代码 2. 静态数据段:放置全局变量和static的局部变量,字符串常量 3. 动态数据段:栈,放置局部作用域的变量,离开函数返回后就会被释放:堆,必须手动的分配和释放. 关于字符串 ...

  10. WPF如何将数据库中的二进制图片数据显示在Image控件上

    首先在xaml文件里定义一个Image控件,取名为img MemoryStream stream = new MemoryStream(获得的数据库对象): BitMapImage bmp = new ...