• Tallest Cow,题解


    题目链接

    题意:

      问满足一系列形如ab可以相互看到的约束的所有奶牛的最大身高(最高的编号和高度已给出)

    分析:

      首先,这个可以互相看到指的是中间的人比两头的都矮,一条斜线看到的不行,那么其实我们就可以直接默认每个牛都是最高的,然后有一个约束给中间的牛矮一些,最后找到处理后的数据就好了,数据处理方式:线段树or差分,当然这一题差分更快一些。

      然后还有一个问题,就是他还要求b的身高大于等于a的,其实这个和没有一样,因为我们要求的是最大,能不变矮尽量不变,又因为如果有新的约束那么要不完全在a,b之内,要不完全在a,b之外(否则不可能),a,b就有同时改变了。

      然后就是注意去一下重,即两个相同的约束不会使中间的身高改变2或以上(如果用这种方法计算最大)

      最后就是代码。

      

    #include <cstdio>
    #include <algorithm>
    #include <map>
    using namespace std;
    const int maxn=10000+10;
    int c[maxn];
    map<pair<int,int>,bool> ma;
    int main(){
        int n,s,h,m;
        scanf("%d%d%d%d",&n,&s,&h,&m);
        c[0]=h;
        int js1,js2;
        for(int i=1;i<=m;i++){
            scanf("%d%d",&js1,&js2);
            if(js1>js2)
                swap(js1,js2);
            if(ma[make_pair(js1,js2)])
                continue;
            c[js1+1]--;
            c[js2]++;
            ma[make_pair(js1,js2)]=1;
        }
        for(int i=1;i<=n;i++){
            c[i]=c[i-1]+c[i];
            printf("%d
    ",c[i]);
        }
        return 0;
    }
  • 相关阅读:
    Assets Pipeline
    how to execute-shell-commands by ruby
    DFS---迷宫问题
    病毒感染监测
    RE数组开多大?
    C++如何输入含空格的字符串
    后缀算术表达式
    中缀表达式转化为后缀表达式
    基于两端操作的循环队列的实现---怎么判断队满??
    循环队列--忘记分配空间和如何用tag判断队空队满
  • 原文地址:https://www.cnblogs.com/wish-all-ac/p/12894179.html
Copyright © 2020-2023  润新知