zoukankan      html  css  js  c++  java
  • 【NOIP模拟】隔壁

    题面

    隔壁学校地形图可以通过一个高度矩阵表示,矩阵中每一个位置都有一个数表示这个坐标的海拔,我们姑且将其称为海拔图,容易发现,我们可以通过这个矩阵轻松算出隔壁学校的主视图,左视图。相反的,我们却不能通过主视图和左视图唯一确定海拔图,现在问题来了,已知主视图左视图,我们需要知道铲平隔壁学校的代价上限和下限(即可能的体积最大值与最小值)

    分析

    给出的正视图和侧视图其实就是那一行(列)的最大值了,因此,为避免冲突,求最大值的时候就在两个最大值中去min

    而求最小值,要使出现的数字尽量少,则其他全部填0,只满足最大的点出现就可以了。

    代码

    #include<bits/stdc++.h>  
    using namespace std;  
    #define N 1010  
    #define ll long long  
    #define RT register  
    ll n,m,minx,maxx;  
    ll a[N],b[N],flag[N];  
    template<class T>  
    inline void read(T &x)  
    {  
        x=0;ll f=1;static char ch=getchar();  
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}  
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}  
        x*=f;  
    }  
    int main()  
    {  
        read(n);read(m);  
        for(RT ll i=1;i<=n;++i)read(a[i]);  
        for(RT ll i=1;i<=m;++i)read(b[i]);  
        for(RT ll i=1;i<=n;++i)  
            for(RT ll j=1;j<=m;++j)  
                maxx+=min(a[i],b[j]);  
        for(RT ll i=1;i<=n;++i)  
        {  
            minx+=a[i];  
            for(RT ll j=1;j<=m;++j)  
            {  
                if(flag[j])continue;  
                if(b[j]==a[i]){flag[j]=1;break;}  
            }         
        }  
        for(RT ll i=1;i<=m;++i)  
            if(!flag[i])  
                minx+=b[i];  
        printf("%lld %lld",minx,maxx);  
        return 0;  
    }  
  • 相关阅读:
    集群资源队列监控:Grafana
    1
    3月9号
    jmx
    日常笔记
    nsenter命令简介
    一天2小时
    postgresql Centos7部署
    笔记5
    1
  • 原文地址:https://www.cnblogs.com/NSD-email0820/p/9876061.html
Copyright © 2011-2022 走看看