问题标题: 酷町堂:7859 制作球拍

0
0
已解决
程安琪
程安琪
资深守护
资深守护

题目链接: 酷町堂:7859

题目描述 De**ion

给定2*n个兵乓球拍,每个乒乓球拍都有一个价格,现在将这2*n个乒乓球拍两两配对,每对乒乓球拍的制作时间就是这对乒乓球拍价格的总和,请问如果现在同时制作这n对乒乓球拍,至少需要多少时间。

输入描述 Input De**ion

第一行是一个整数m;
接下来有m行,每行都是两个整数x和y,表示有x个乒乓球拍的价格为y。保证所有x的总和等于2*n。

输出描述 Output De**ion

输出一个整数,表示同时制作这n对乒乓球拍的最短时间

样例输入 Sample Input

3 2 6 1 8 1 9

样例输出 Sample Output

15

数据范围及提示 Data Size & Hint

对于100%的数据,有1<=m<=100000;
1<=n<=5*10^8;
1<=y<=1000

10分超时代码

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
long long m,sum,b[N],k,c[N],dd,maxn=-1,a[N],x,y;
bool cmp(long long x,long long y){
    return x<y;
}
int main() {
    cin>>m;
    for(int i=1;i<=m;i++){
        cin>>x>>y;
        sum+=x;
        if(x>1)
            for(int j=1;j<=x;j++)    b[++k]=y;
        else    b[++k]=y;
    }
    sort(b+1,b+1+sum,cmp);
    int i=1,j=sum;
    while(i<j){
        c[++dd]=b[i]+b[j];
        i++;
        j--;
    }
    for(int i=1;i<=dd;i++){
        maxn=max(maxn,c[i]);
    }
    cout<<maxn;
    return 0;
}


0
已采纳
蔡辰夕
蔡辰夕
新手启示者
新手启示者

想想怎么优化

0
我要回答