BZOJ 1105: [POI2007]石头花园SKA
1105: [POI2007]石头花园SKA
Time Limit: 20 Sec Memory Limit: 162 MB
Submit: 628 Solved: 182
[Submit][Status][Discuss]
Description
Blue Mary是一个有名的石头收藏家。迄今为止,他把他的藏品全部放在他的宫殿的地窖中。现在,他想将他
的藏品陈列在他的花园中。皇家花园是一个边长为1000000000单位的平行于坐标轴的正方形。对于每个石头,Blue
Mary都有一个他想放置的坐标,然后将他告诉他的属下。不幸的是,他忘了告诉他们坐标的顺序(比如无法分辨(
x,y)和(y,x))。属下们,就自己决定了每个石头的具体位置。为了保护他的藏品,Blue Mary决定建造一个篱笆来
保护他们。为了美学的需要,篱笆也被设计为平行于坐标轴的矩形。如果花园的布局知道了,那么就可以知道最短
长度的篱笆的布局。他的属下们需要变换石头的坐标使得篱笆的长度最少。每个石头只能从(x,y)变换为(y,x),由
于每个石头的重量不一样。属下们希望他们移动的石头的重量和最少。
Input
第一行包含一个数n,表示石头的数量(2<=n<=1000000),接下来n行分别描述n个石头的初始坐标和重量xi,y
i,mi。(0<=xi,yi<=1000000000,1<=mi<=2000)
Output
包含两行,第一行包含两个数由一个空格分割。最小的篱笆长度和最小的移动的石子的重量和。第二行为一个
01字符串,第i个字符为1表示要改变第i个石头的位置。0表示不改变。
Sample Input
2 3 400
1 4 100
2 2 655
3 4 100
5 3 277
Sample Output
01010
HINT

Source
分析
篱笆的长度最小是第一目标,应当优先考虑。易知,当所有石头的坐标都满足x<=y的时候,即全部在y=x直线的一侧之时,一定能够得到最小的周长,这时的周长就是第一个答案。
而满足这一周长的方式不止一种,可以将这个矩形关于y=x直线做对称,总共有四种可能的情况,全部枚举一遍即可。
代码
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm> #define ri register int #define lim 100000000 char *c = new char[lim]; template <class T>
void read(T &x)
{
x = ; while (*c < '')++c; while (*c >= '')
x = x* + *c++ - '';
} #define N 1000005
#define inf 2e9 + 7 int n;
int x[N];
int y[N];
int w[N]; int ans = inf; bool vis[N], use[N]; void calculate(int lx, int ly, int rx, int ry)
{
ri res = ; memset(vis, , sizeof(vis)); #define judge(X, Y) (X >= lx && X <= rx && Y >= ly && Y <= ry) for (ri i = ; i <= n; ++i)
{
if (judge(x[i], y[i]))
continue;
if (judge(y[i], x[i]))
vis[i] = , res += w[i];
else return;
} if (res < ans)
ans = res, memcpy(use, vis, sizeof(use));
} signed main(void)
{ fread(c, , lim, stdin); read(n); for (ri i = ; i <= n; ++i)
read(x[i]), read(y[i]), read(w[i]); ri lx, ly, rx, ry; lx = ly = inf, rx = ry = ; for (ri i = ; i <= n; ++i)
{
if (x[i] < y[i])
{
if (x[i] < lx)lx = x[i];
if (y[i] < ly)ly = y[i];
if (x[i] > rx)rx = x[i];
if (y[i] > ry)ry = y[i];
}
else
{
if (y[i] < lx)lx = y[i];
if (x[i] < ly)ly = x[i];
if (y[i] > rx)rx = y[i];
if (x[i] > ry)ry = x[i];
}
} calculate(lx, ly, rx, ry);
calculate(lx, ly, ry, rx);
calculate(ly, lx, rx, ry);
calculate(ly, lx, ry, rx); printf("%lld %d\n", 2LL*(rx + ry - lx - ly), ans); for (ri i = ; i <= n; ++i)putchar(use[i] ? '' : '');
}
BZOJ_1105.cpp
@Author: YouSiki
BZOJ 1105: [POI2007]石头花园SKA的更多相关文章
- 【BZOJ】1105: [POI2007]石头花园SKA
题意 二维平面上有\(n(2 \le n \le 1000000)\)个点,可以花费\(w_i\)交换第\(i\)个点的横纵坐标.求在满足能覆盖所有点的最小矩阵周长最短的情况下花费最小. 分析 这题太 ...
- BZOJ1105 [POI2007]石头花园SKA 贪心
[POI2007]石头花园SKA Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 776 Solved: 237[Submit][Status][Di ...
- [POI2007]石头花园SKA
Description Blue Mary是一个有名的石头收藏家.迄今为止,他把他的藏品全部放在他的宫殿的地窖中.现在,他想将他的藏品陈列在他的花园中.皇家花园是一个边长为1000000000单位的平 ...
- BZOJ1105 : [POI2007]石头花园SKA
考虑把所有石头翻到直线y=x同侧,此时可以保证篱笆长度最短. 这种最短的篱笆一共有4种可能,枚举每种可能然后$O(n)$检验求出答案即可. #include<cstdio> const i ...
- 树状数组 - BZOJ 1103 [POI2007]大都市
bzoj 1103 [POI2007]大都市 描述 在经济全球化浪潮的影响下,习惯于漫步在清晨的乡间小路的邮递员 Blue Mary也开始骑着摩托车传递邮件了.不过,她经常回忆起以前在乡间漫步的情景. ...
- 并查集 - BZOJ 1104 [POI2007]洪水
BZOJ 1104 [POI2007]洪水 描述 AKD 市处在一个四面环山的谷地里.最近一场大暴雨引发了洪水,AKD 市全被水淹没了.Blue Mary,AKD 市的市长,召集了他的所有顾问(包括你 ...
- BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]
1103: [POI2007]大都市meg Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2221 Solved: 1179[Submit][Sta ...
- BZOJ 1101: [POI2007]Zap
1101: [POI2007]Zap Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2262 Solved: 895[Submit][Status] ...
- BZOJ 1100: [POI2007]对称轴osi
1100: [POI2007]对称轴osi Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 630 Solved: 243[Submit][Statu ...
随机推荐
- Win7安装Redis
首先, 到 https://github.com/MSOpenTech/redis/releases 下载Redis的windows 64bit port zip 解压后放到某个目录下, 例如 c:\ ...
- iis 发布MVC HTTP错误 403.14
1. 在web.config增加<modules runAllManagedModulesForAllRequests="true" /> 如:问题依然不能解决.报错貌 ...
- python处理经过gzip压缩的网页内容
Python在进行网页抓取时,有时会获取到经过gzip压缩后的数据(体积小,传输快),导致无法阅读和使用. 如图所示,为http原始报文.可以看到,header区域的“Content-Encoding ...
- rpc框架之 thrift 学习 1 - 安装 及 hello world
thrift是一个facebook开源的高效RPC框架,其主要特点是跨语言及二进制高效传输(当然,除了二进制,也支持json等常用序列化机制),官网地址:http://thrift.apache.or ...
- python中from module import * 的一个陷阱
from module import *把module中的成员全部导到了当前的global namespace,访问起来就比较方便了.当然,python style一般不建议这么做,因为可能引起nam ...
- 教你如何反编译Android安装文件apk来偷窥源代码
本文章首发于浩瀚先森博客,地址:http://www.guohao1206.com/2016/08/23/970.html 1. 准备 - java环境 安装java并配置环境 => JAVA环 ...
- 求解区间最值 - RMQ - ST 算法介绍
解析 ST 算法是 RMQ(Range Minimum/Maximum Query)中一个很经典的算法,它天生用来求得一个区间的最值,但却不能维护最值,也就是说,过程中不能改变区间中的某个元素的值.O ...
- Mininet在创建拓扑的过程中为什么不打印信息了——了解Mininet的log系统
前言 写这篇博客是为了给我的愚蠢和浪费的6个小时买单! 过程原因分析 我用Mininet创建过不少拓扑了,这次创建的拓扑非常简单,如下图,创建拓扑的代码见github.在以前的拓扑创建过程中,我都是用 ...
- Javascript的精华啊【如果以后我看到了或者想到了再继续补吧】
我不过略有一些讨人喜欢的地方而已,怎么会有什么迷人的魔力呢? 一.语法 JS只有一个数字类型,64位浮点数,所以1和1.0是相同的.为什么这么设计:防止短整型的溢出. 二.对象 1.通常将一个对象的值 ...
- 怎样修改 Openstack Horizon(Dashboard)的显示界面 (二)
上一篇文章介绍了 Dashboard 的基本结构框架,那接下来的问题就是如何在这个框架中加入我们自己想要的内容了.在真正动手之前,让我们先来看看官方的页面是怎么做出来的.首先我们进入 /usr/sha ...