题意

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

分析

这题太神了。有一个结论是,所有点都会交换到\(y=x\)线的同一侧。

题解

所以我们暴力就行辣。

#include <bits/stdc++.h>
using namespace std;
inline int getint() {
int x=0, c=getchar();
for(; c<48||c>57; c=getchar());
for(; c>47&&c<58; x=x*10+c-48, c=getchar());
return x;
}
const int N=1000005;
bool ok[N], vi[N];
int n, x[N], y[N], w[N], ans=~0u>>1;
void go(int lx, int rx, int ly, int ry) {
int temp=0;
for(int i=1; i<=n; ++i) {
if(lx<=x[i] && x[i]<=rx && ly<=y[i] && y[i]<=ry) {
vi[i]=0;
}
else if(lx<=y[i] && y[i]<=rx && ly<=x[i] && x[i]<=ry) {
vi[i]=1;
temp+=w[i];
}
else {
return;
}
}
if(temp<ans) {
ans=temp;
memcpy(ok, vi, sizeof(bool)*(n+1));
}
}
int main() {
n=getint();
int lx=~0u>>1, ly=lx, rx=-lx, ry=rx;
for(int i=1; i<=n; ++i) {
x[i]=getint(), y[i]=getint(), w[i]=getint();
int a=min(x[i], y[i]), b=max(x[i], y[i]);
lx=min(lx, a);
rx=max(rx, a);
ly=min(ly, b);
ry=max(ry, b);
}
printf("%lld ", 2ll*(rx-lx+ry-ly));
go(lx, rx, ly, ry);
go(lx, ry, ly, rx);
go(ly, rx, lx, ry);
go(ly, ry, lx, rx);
printf("%d\n", ans);
for(int i=1; i<=n; ++i) {
putchar('0'+ok[i]);
}
return 0;
}

最新文章

  1. c/c++程序员必须要掌握开源项目
  2. 用sql取出来的list需要处理成map的两种情况
  3. java servlet手机app访问接口(四)推送
  4. Thinking in Java——笔记(5)
  5. 图片轮播的JS写法,通用涉及多个轮播
  6. HDU 4122
  7. H5实现俄罗斯方块(一)
  8. Activity与Service通信(不同进程之间)
  9. dom4j测试
  10. Linux android开发环境问题:Unexcepted exception:cannot run program &quot;android-sdk-linux/platfor-tools/adb&quot; :err=2,No such file or directory.
  11. std::function,std::bind复习
  12. 进程间通信七 (socket)
  13. Emgu CV 高斯建模
  14. OC高级编程——深入block,如何捕获变量,如何存储在堆上
  15. 安卓---RedioButton(单选按钮)、CheckBox(复选按钮)
  16. Debian Security Advisory(Debian安全报告) DSA-4407-1 xmltooling
  17. 22)django-中间件
  18. .net core json配置相关用法
  19. Run native executable in Android App
  20. Fedora8 U盘安装

热门文章

  1. Dubbo超时和重连机制
  2. WinDbg 命令三部曲:(一)WinDbg 命令手册
  3. 10g ASM下修改control file的位置
  4. 第十二篇:SOUI的utilities模块为什么要用DLL编译?
  5. 六款值得推荐的android(安卓)开源框架简介(转)
  6. web2py学习之getting start环境搭建
  7. pythonchallenge之C++学习篇-03
  8. suse 不能远程登录
  9. 【转】Struts2中json插件的使用
  10. EventBus代替Intent将复杂对象传递给下一个即将启动的Activity