问题标题: 酷町堂:2609

0
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
我要回答