zoukankan      html  css  js  c++  java
  • CF1408D Searchlights(贪心模型)

    https://zhuanlan.zhihu.com/p/268630329

    在知乎上有位网友总结出来一种贪心套路

    这题的本质上是对于每对数,要将ai放入A集合或者把bi放入B集合

    最后求min(MAX(A)+MAX(B)),因此采用排序后,保留合适的值

    之后枚举每种可能答案即可

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    typedef pair<int,int> pll;
    const int N=4e6+10;
    const int mod=1e9+7;
    int a[N],b[N],c[N],d[N];
    struct node{
        int l,r;
    }s[N];
    int cnt1[N],cnt2[N];
    bool cmp(node a,node b){
        if(a.l==b.l)
            return a.r<b.r;
        return a.l<b.l;
    }
    vector<pll> num;
    int main(){
        ios::sync_with_stdio(false);
        int n,m;
        cin>>n>>m;
        int i,j;
        for(i=1;i<=n;i++){
            cin>>a[i]>>b[i];
        }
        for(i=1;i<=m;i++){
            cin>>c[i]>>d[i];
        }
        int idx=0;
        for(i=1;i<=n;i++){
            for(j=1;j<=m;j++){
                if(c[j]>=a[i]&&d[j]>=b[i]){
                    s[++idx]={c[j]-a[i]+1,d[j]-b[i]+1};
                }
            }
        }
        sort(s+1,s+1+idx,cmp);
        if(idx==0){
            cout<<0<<endl;
            return 0;
        }
        num.push_back({s[idx].l,s[idx].r});
        int cur=0;
        for(i=idx-1;i>=1;i--){
            if(s[i].r>num[cur].second){
                num.push_back({s[i].l,s[i].r});
                cur++;
            }
        }
        int ans=0x3f3f3f3f;
        ans=min(num[0].first,num[(int)num.size()-1].second);
        int len=(int)num.size()-1;
        for(i=0;i<len;i++){
            ans=min(ans,num[i].second+num[i+1].first);
        }
        cout<<ans<<endl;
    }
    View Code
    没有人不辛苦,只有人不喊疼
  • 相关阅读:
    jdk1.8新特性
    linux centos虚拟机安装
    linux基本命令介绍
    JavaScript与Java的区别
    jQuery UI的基本使用方法与技巧
    jQuery Ajax 实例 ($.ajax、$.post、$.get)
    .NET批量大数据插入性能分析及比较
    .NET中的CSV导入导出(实例)
    jquery中push()的用法(数组添加元素)
    .net如何后台批量删除
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/13902315.html
Copyright © 2011-2022 走看看