【2021】牛客模考(五模)编程题集合

本文解析了牛客模考(五模)中的三道编程题:化冰问题、行星观测及疫情应对策略。通过分段函数解决化冰问题,运用等差数列求和技巧解答行星观测问题,并采用并查集算法处理疫情问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【2021】牛客模考(五模)编程题集合

第一题:化冰

在这里插入图片描述

输入描述

输入数据共 5行
第一行给出一个整数 A
第一行给出一个整数 B
第一行给出一个整数 C
第一行给出一个整数 D
第一行给出一个整数 E
1<=|A|,B,C,D,E<=100;
A<=B

输出描述

在一行中输出加热所需的时间

范例

在这里插入图片描述

思路

分段函数就完事了

代码
#include<bits/stdc++.h>
using namespace std;
int main(){
    int a,b,c,d,e;
    cin>>a>>b>>c>>d>>e;
    int num=0;
    if(a>0){
        num = e*(b-a);
    }
    if(a==0) num=d+e*(b-a);
    if(a<0&&b>0) num=c*(0-a)+d+b*e;
    else if(a<0&&b<0) num=c*(b-a);
    printf("%d",num);
}
第二题:行星观测

在这里插入图片描述

输入输出描述

在这里插入图片描述

范例

在这里插入图片描述

思路:

简单的等差数列求和(注意一些小细节就行)

代码实现
#include<bits/stdc++.h>
using namespace std;
int main(){
    long long r,l,a,n,m,res;
    cin>>l;
    cin>>r;
    cin>>a;
    res=0;
    m=(r-l)/a;
    n=(r-l)%a;
    res = m*(n+1);
    if(m>1){
        long long q=m-1;
        res += a*(q+1)*q/2;
    }
    printf("%lld",res);
}
第三题:疫情

在这里插入图片描述

输入输出描述

在这里插入图片描述

范例

在这里插入图片描述

思路:

并查集,先按题目给的城市关系集合进行连接,根据城市人口密度从大到小进行排序然后从开始剔除密度最高的城市进而更新城市关系集合再次重构并查集,直到连通数大于m,记录每次更新的城市中密度最高的然后加1形成一个每个连通数对应的h值列表,表中的最小值即是答案

代码实现
#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,m;
    cin>>n>>m;
    if(n<m) return -1;
    int a[n];
    set<int> u;
    for(int i=0;i<n;i++){
        cin>>a[i];
        u.insert(a[i]);
    }
    int d[n];
    memset(d,0,sizeof(d));
    for(int i=0,x,y;i<n-1;++i){
        cin>>x>>y;
        a[x-1]>a[y-1]?d[x-1]++:d[y-1]++;
    }
    unordered_map<int,int> nums;
    for(int i=0;i<n;i++){
        nums[a[i]] += d[i]; 
    }
    auto iter = u.rbegin();
    m--;
    while (m>=0&&iter!=u.rend())
    {
        m -= nums[*iter];
        ++iter;
    }
    cout<<(iter == u.rend() ? -1:*prev(iter)+1);
    return 0;
}
欢乐的时光总是短暂的,让我们下一次再见!!!
good good study,day day up! (study hard, improve every day)
预知后事,请听下回分解!!!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值