zoukankan      html  css  js  c++  java
  • Hello 2020D(多重集)

    如果有一对时间对在某一场馆有时间重合而这一对时间对在另一场馆没有时间重合,则输出NO,否则输出YES。

     1 #define HAVE_STRUCT_TIMESPEC
     2 #include<bits/stdc++.h>
     3 using namespace std;
     4 vector<pair<pair<int,int>,pair<int,int> > >v1,v2;
     5 int check(const vector<pair<pair<int,int>,pair<int,int> > >&v){//常引用,既提高了效率,也不会让参数在函数中被改动
     6     multiset<int>l,r;//保留了某一场馆时间重合的场次下另一场馆的时间对。
     7     for(int i=0;i<v.size();++i){
     8         pair<pair<int,int>,pair<int,int> >it=v[i];
     9         pair<int,int>temp=it.first;
    10         pair<int,int>temp2=it.second;
    11         if(temp.second==0){
    12             l.erase(l.find(temp2.first));
    13             r.erase(r.find(temp2.second));
    14         }
    15         else{
    16             multiset<int>::iterator x=r.lower_bound(temp2.first);
    17             if(x!=r.begin())//如果有比当前开始时间更小的结束时间,说明这一场馆可以有一对没有时间重合的时间对且另一场馆这一对时间重合。
    18                 return 0;
    19             multiset<int>::iterator y=l.upper_bound(temp2.second);
    20             if(y!=l.end())//如果有比当前结束时间更大的开始时间,说明这一场馆可以有一对没有时间重合的时间对且另一场馆这一对时间重合。
    21                 return 0;
    22             l.insert(temp2.first);
    23             r.insert(temp2.second);
    24         }
    25     }
    26     return 1;
    27 }
    28 int main(){
    29     ios::sync_with_stdio(false);
    30     cin.tie(NULL);
    31     cout.tie(NULL);
    32     int n;
    33     cin>>n;
    34     int a,b,c,d;
    35     for(int i=1;i<=n;++i){
    36         cin>>a>>b>>c>>d;
    37         v1.push_back(make_pair(make_pair(a,-1),make_pair(c,d)));//相同的开始时间和结束时间要让开始时间排在前面,因为开始时间和结束时间相同的这一对是时间重合的,把开始时间的标记打得比结束时间小,可以保留更多A场馆重合的场次的B场馆的时间对。
    38         v1.push_back(make_pair(make_pair(b,0),make_pair(c,d)));
    39         v2.push_back(make_pair(make_pair(c,-1),make_pair(a,b)));
    40         v2.push_back(make_pair(make_pair(d,0),make_pair(a,b)));
    41     }
    42     sort(v1.begin(),v1.end());
    43     sort(v2.begin(),v2.end());
    44     if(!check(v1)||!check(v2))
    45         cout<<"NO";
    46     else
    47         cout<<"YES";
    48     return 0;
    49 }
    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    echarts中label上下两行展示
    vue中去掉地址栏中的#
    vue中登录超时跳转到登录页面设置拦截器
    在table中,tbody没有充满整个table
    vant中dialog的使用
    水位波纹动画兼容ie8
    在vue中使用XLSX导出表格
    elementUI 选择开始结束日期加限制
    element table 合并同类项并输出后台返回数据
    将后台返回的月份201810,201809转换成正常的9月10月
  • 原文地址:https://www.cnblogs.com/ldudxy/p/12162070.html
Copyright © 2011-2022 走看看