题目链接: 酷町堂: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;
}