0
已解决
邹文昊
高级守护
高级守护
2609 奶牛配对
经验值:1200
时间限制:1000毫秒
内存限制:128MB
题目描述 Description
有M( M ≤ 1,000,000,000,M为偶数)头奶牛,每头奶牛有一个产奶量。现在将这些奶牛两两配对可以获得更优质的牛奶。给每对奶牛的挤奶的时间等于两头奶牛产奶量总和。现在给这M/2对奶牛同时挤奶,问挤奶所需的最短时间是多少。
输入描述 Input Description
第一行,一个整数N( 1≤N≤100,000 )
接下来N行,每行两个整数,x m,表示有x头奶牛的产奶量为m ( 1≤m≤1,000,000,000 )
输出描述 Output Description
输出产奶时间的最小值
样例输入 Sample Input
3 1 8 2 5 1 2
样例输出 Sample Output
10
求思路和伪代码
邹文昊在2024-08-20 11:38:44追加了内容
#include<bits/stdc++.h>
using namespace std;
struct cow{
long long n,cl;
}c[100005];
long long ans,n;
bool cmp(cow a,cow b){
return a.cl<b.cl;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)scanf("%lld%lld",c[i].n,c[i].cl);
sort(c+1,c+1+n,cmp);
long long i=1,j=n;
while(i<=j){
ans=max(ans,c[i].cl+c[j].cl);
if(c[i].n==c[j].n){
i++;
j--;
}else if(c[i].n>c[j].n){
c[i].n-=c[j].n;
j--;
}else{
c[j].n-=c[i].n;
i++;
}
}
cout<<ans;
}
@张百川 是这样嘛
0
已采纳
张百川
新手光能
新手光能
定义结构体 cow
定义超长整形变量n,cl;
定义cow类型的c数组
布尔 cmp(cow类型的a,cow类型的b){
返回 a.cl小于b.cl;
}
输入n
循环n次输入c[i].n,c[i].cl
给c数组排序(别忘了加一个cmp)
定义i=1,j=n
当i<=j时执行
ans=ans和c[i].cl+c[j].cl中较大数;
如果c[i].n等于c[j].n
i++;
j--;
否则 如果c[i].n大于c[j].n
c[i].n减去c[j].n;
j减一;
否则
c[j].n减去c[i].n;
i加一;
输出ans;
0
0