Tallest Cow(POJ3263)

Tallest Cow(POJ3263)

给出N头牛的身高,和M对关系(ai与bi可以相互看见。即他们中间的牛都比他们矮)。已知最高的牛为第P头,身高为H。求每头牛的身高最大可能是多少。( \(1 \leq N,M \leq 10^4, 1 \leq H \leq 10^6\) )

输入样例:

9 3 5 5
1 3
5 3
4 3
3 7
9 8

输出样例:

5
4
5
3
4
4
5
5
5

分析:

朴素解法:数组C初始化0 ,ai与bi之间的数减一 最后设C[P] = 0 即Hi = H+C[i] \(O(NM)\)

前缀和:把对一个区间的操作转化为左右两个端点的操作,再通过前缀和得到原问题的解

​ 数组D初始化0,D[ai+1]-=1,D[bi]+=1 最后 \(C[i] = \sum_{j=1}^iD[j]\) \(O(N+M)\)

题解:

#include<iostream>
#include<map>

using namespace std;

map<pair<int,int>,bool> existed;  //处理重复的成对关系
int c[10010],d[10010];

int main(){
    int n,p,h,m;
    cin>>n>>p>>h>>m;
    
    for(int i=1;i<=m;i++){
        int a,b,t;
        cin>>a>>b;
        if(a>b){t=a;a=b;b=t;}
        if(existed[make_pair(a,b)])continue;
        d[a+1]--;d[b]++;
        existed[make_pair(a,b)] = true;
    }


    for(int i=1;i<=n;i++){
        c[i] = c[i-1] + d[i];
        cout<<h+c[i]<<endl;
    }
    return 0;
}

转载于:https://www.cnblogs.com/wendiudiu/p/10762178.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以帮你解决这个问题。以下是我给出的解决方案: 首先,我们需要定义一个学生类 `Student`,这个类包含身高和体重两个属性: ```python class Student: def __init__(self, height, weight): self.height = height self.weight = weight ``` 然后,我们需要定义一个宿舍类 `Dormitory`,这个类包含宿舍成员列表和一个方法,用于找出宿舍最高的同学: ```python class Dormitory: def __init__(self, max_students=4): self.max_students = max_students self.students = [] def add_student(self, student): if len(self.students) < self.max_students: self.students.append(student) def find_tallest_student(self): tallest = None for student in self.students: if tallest is None or student.height > tallest.height: tallest = student return tallest ``` 最后,我们可以使用这两个类来解决问题。首先,我们需要创建一个宿舍列表,然后向其中添加学生,最后找出每个宿舍最高的同学: ```python dormitories = [Dormitory() for i in range(10)] # 添加学生到宿舍 for i in range(40): student = Student(height=i, weight=i) dormitory = dormitories[i % 10] dormitory.add_student(student) # 找出每个宿舍最高的同学 for dormitory in dormitories: tallest_student = dormitory.find_tallest_student() if tallest_student is not None: print(f"The tallest student in this dormitory is {tallest_student.height}cm tall.") else: print("This dormitory has no students.") ``` 这样,我们就可以找出每个宿舍最高的同学了。希望这个解决方案能够帮助到你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值