【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;
}