Atcoder 073E - Ball Coloring

链接:http://arc073.contest.atcoder.jp/tasks/arc073_c

题目大意:给定n对数,将每对中一个染红一个染蓝,求(Rmax-Rmin)*(Bmax-Bmin)。

分析:- -感觉没有太多的知识点,就是有点难想。。

      考虑所有数中的MAX和MIN,如果在Rmax=MAX&&Bmin=MIN,就需要让Rmin尽量大,Bmax尽量小,将每一对的大数染红,小数染黑;如果是Bmax=MAX&&Bmin=MIN,就需要让Rmax-Rmin尽量小,首先让所有xi<yi,按x排序,先把x全部染红,然后从小到大按顺序把x  y交换,计算交换后的Rmax和Rmin,更新一下Rmax-Rmin的最小值。因为如果存在xi<yi,而xi为红色,继续往后更新,和xi为黑色往后更新相比,最小值可能更小,而最大值不可能更小,因而不需要考虑这种情况。注意当MAX和MIN在同一对里时,不需要考虑后一种情况。

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstdio>
 4 using namespace std;
 5 const int maxn=200005;
 6 struct bag{
 7     int x,y;
 8 }p[maxn];
 9 bool operator < (bag a,bag b){
10     if(a.x==b.x)return a.y<b.y;
11     return a.x<b.x;
12 }
13 int n,Rmax,Rmin,Bmax,Bmin;
14 int main(){
15     long long ans=1e18;
16     scanf("%d",&n);
17     if(n==1){
18         cout<<0<<endl;return 0;
19     }
20     for(int i=0;i<n;i++){
21         scanf("%d%d",&p[i].x,&p[i].y);
22         if(p[i].x>p[i].y){
23             int k=p[i].x;
24             p[i].x=p[i].y;
25             p[i].y=k;
26         }
27     }
28     sort(p,p+n);
29     int Max=p[0].y,Min=p[0].x,_max=0,_min=0;
30     for(int i=1;i<n;i++){
31         if(p[i].x<=Min&&p[i].y>=Max){
32             Min=p[i].x;Max=p[i].y;
33             _max=i;_min=i;
34         }
35         else if(p[i].x<Min){
36             Min=p[i].x;
37             _min=i;
38         }else if(p[i].y>Max){
39             Max=p[i].y;
40             _max=i;
41         }
42     }
43     Rmax=Max;Bmin=Min;
44     Rmin=p[_min].y;Bmax=p[_max].x;
45     for(int i=0;i<n;i++){
46         Rmin=min(Rmin,p[i].y);
47         Bmax=max(Bmax,p[i].x);
48     }
49     ans=(long long)(Rmax-Rmin)*(Bmax-Bmin);
50     if(_max!=_min){
51         Bmax=Max;Bmin=Min;
52         Rmax=max(p[n-1].x,p[0].y);
53         int premin=p[0].y;
54         Rmin=min(p[0].y,p[1].x);
55         //sort(p,p+n);
56         long long ans0=Rmax-Rmin;
57         for(int i=1;i<n-1;i++){
58             Rmax=max(p[i].y,Rmax);
59             Rmin=min(min(premin,p[i].y),p[i+1].x);
60             premin=min(premin,p[i].y);
61             if(Rmax-Rmin<ans0)ans0=Rmax-Rmin;
62         }
63         ans0*=Bmax-Bmin;
64         ans=min(ans,ans0);
65     }
66     cout<<ans<<endl;
67     return 0;
68 }

 

转载于:https://www.cnblogs.com/7391-KID/p/7078683.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
疫情居家办公系统管理系统按照操作主体分为管理员和用户。管理员的功能包括办公设备管理、部门信息管理、字典管理、公告信息管理、请假信息管理、签到信息管理、留言管理、外出报备管理、薪资管理、用户管理、公司资料管理、管理员管理。用户的功能等。该系统采用了MySQL数据库,Java语言,Spring Boot框架等技术进行编程实现。 疫情居家办公系统管理系统可以提高疫情居家办公系统信息管理问题的解决效率,优化疫情居家办公系统信息处理流程,保证疫情居家办公系统信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理公告,管理疫情居家办公系统信息,包括外出报备管理,培训管理,签到管理,薪资管理等,可以管理公告。 外出报备管理界面,管理员在外出报备管理界面中可以对界面中显示,可以对外出报备信息的外出报备状态进行查看,可以添加新的外出报备信息等。签到管理界面,管理员在签到管理界面中查看签到种类信息,签到描述信息,新增签到信息等。公告管理界面,管理员在公告管理界面中新增公告,可以删除公告。公告类型管理界面,管理员在公告类型管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值