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 } 

 

 

posted @ 2018-10-18 15:27  lcan  阅读(252)  评论(0编辑  收藏  举报