zoukankan      html  css  js  c++  java
  • Tallest Cow

    现在有 N 头奶牛,已知第 I 头牛是所有牛中最高的牛(或最高的之一),身高为 H ;我们还知道 R 种关系,每一种关系包含的 a , b表示第 a 头牛可以看见第 b 头牛(即第 b 头牛的身高不低于第 a 头牛的身高,

    并且它们中间的牛的身高都不高于 a 的身高),求每头牛的最高可能身高。

    模拟就是从min(a,b)开始,到max(a,b)不满足的就减到满足

    贪心可得a,b相等时最优

     

    注意,不会出现a,x,b,y  (a,b) (x,y) 的情况

    所以就可以一层一层减去1,使得满足条件

    但有可能会重复减去多次,所以要判重,如果用bool数组会超时

    所以可以用map

    map<pair<int,int>,bool>vis;

    if(vis[make_pair(a,b)]) continue;

    vis[make_pair(a,b)]=true

    不要忘记swap一下a,b

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cmath>
     6 #include<map>
     7 using namespace std;
     8 const int maxn=10007;
     9 int N,I,H,R,d[maxn];
    10 map<pair<int,int>,bool>vis;
    11 int main(){
    12   cin>>N>>I>>H>>R;
    13   for(int i=1;i<=R;i++){
    14     int a,b;cin>>a>>b;
    15     if(a>b) swap(a,b);
    16     if(vis[make_pair(a,b)]) continue;
    17     d[a+1]--;d[b]++;
    18     vis[make_pair(a,b)]=true;
    19   } 
    20   for(int i=1;i<=N;i++){
    21       d[i]+=d[i-1];
    22     cout<<H+d[i]<<endl;
    23   }
    24   return 0;
    25 } 

     

  • 相关阅读:
    du熊学斐波那契I
    《博客园精华集》分类索引
    C++中指针和引用的区别
    堆和栈的区别
    getch和getchar的区别
    class和struct
    ARM开发步骤
    ARM寻址方式
    存储器映射
    思维中的错误
  • 原文地址:https://www.cnblogs.com/lcan/p/9810766.html
Copyright © 2011-2022 走看看