http://codeforces.com/contest/1060/problem/D

题意:

n个客人,每个客人希望自己左边空li个座位,右边空ri个座位,可以形成任意个圆,问最少多少个座位。

思路:

1、问题可以看作,给每个客人gi的左边找一个合适的另一个客人gj。其之间的空座数为max(l(gi),r(gj))。这样匹配,自然会匹配为若干个圆。

2、将l和r排序,按大小顺利依次匹配,这样的总座位数最少。

证明:假设现在l和r都递增排好序。从匹配中任意找两对,例如(a, b),(c,d),且a!=c,b!=d,将其换为(c, b),(a, d)。

1)当c<=b时,已知a<c和b<d,得a<c<=b<d,交换后,max(a, b)==max(c, b)==b,max(c, d)==max(a, d)==d

2)当c>b时,

2.1)c<=d。得a<c,b<c,c<=d。max(a, b)<max(c, b),max(c, d)==max(a, d)

2.2)c>d。得b<d<c,a<c。max(c, d)==max(c, b),max(a, b) 不可能大于 max(a, d)

证得,交换l序列中任意两个不同得数,总座位数不会减少。

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
#define LL long long int main()
{
int n,l[],r[];
while(scanf("%d",&n)!=EOF)
{
for(int i=;i<n;i++)
scanf("%d%d",&l[i],&r[i]);
sort(l,l+n);
sort(r,r+n);
LL res=n;
for(int i=;i<n;i++)
res+=max(l[i],r[i]);
printf("%I64d\n",res);
}
return ;
}

最新文章

  1. C#_控件——CheckBox,TextBox,RequiredFieldValidator
  2. SPOJ #752. Power it!
  3. javascript中字符串格式转化成json对象记录
  4. CSS3 照片墙
  5. Unity UGUI——Rect Transform组件(基础属性)
  6. java 短信发送例子 tdy
  7. [MFC美化] SkinSharp使用详解2-SkinH.h函数介绍
  8. Maven(一)初识Maven
  9. .NET技术面试题系列(1) 基础概念
  10. 源码来袭:bind手写实现
  11. Linux/Unix系统QA
  12. Hystrix快速入门
  13. 阿里云服务器CentOS7怎么分区格式化/挂载硬盘
  14. centos7安装kvm
  15. 【WIN10】WIN2D——繪製文字
  16. Python 各种测试框架简介
  17. Visual Studio 2012创建SQL Server Database Project提示失败解决方法
  18. android动画具体解释一 概述
  19. lzugis——Arcgis Server for JavaScript API之自定义InfoWindow(续)
  20. HTML中table边框的显示总结

热门文章

  1. windows安装SVN服务器并设置开机启动
  2. Powershell 常见问题
  3. usdt源码编译安装
  4. HAProxy+Keepalived构建高可用负载均衡
  5. 【转】Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)
  6. Android JNI MAC OS环境配置
  7. bzoj2743 [HEOI2012]采花——树状数组+离线
  8. hdu4507(数位DP)
  9. c++性能测试工具:google benchmark入门(二)
  10. python_pdb断点调试常用命令