codeforces_D. Social Circles
2024-08-30 14:12:03
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 ;
}
最新文章
- C#_控件——CheckBox,TextBox,RequiredFieldValidator
- SPOJ #752. Power it!
- javascript中字符串格式转化成json对象记录
- CSS3 照片墙
- Unity UGUI——Rect Transform组件(基础属性)
- java 短信发送例子 tdy
- [MFC美化] SkinSharp使用详解2-SkinH.h函数介绍
- Maven(一)初识Maven
- .NET技术面试题系列(1) 基础概念
- 源码来袭:bind手写实现
- Linux/Unix系统QA
- Hystrix快速入门
- 阿里云服务器CentOS7怎么分区格式化/挂载硬盘
- centos7安装kvm
- 【WIN10】WIN2D——繪製文字
- Python 各种测试框架简介
- Visual Studio 2012创建SQL Server Database Project提示失败解决方法
- android动画具体解释一 概述
- lzugis——Arcgis Server for JavaScript API之自定义InfoWindow(续)
- HTML中table边框的显示总结
热门文章
- windows安装SVN服务器并设置开机启动
- Powershell 常见问题
- usdt源码编译安装
- HAProxy+Keepalived构建高可用负载均衡
- 【转】Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)
- Android JNI MAC OS环境配置
- bzoj2743 [HEOI2012]采花——树状数组+离线
- hdu4507(数位DP)
- c++性能测试工具:google benchmark入门(二)
- python_pdb断点调试常用命令