0
已解决
陈曦
资深天翼
资深天翼
#include<iostream>
#include<algorithm>
using namespace std;
long long n,a,b,s[100010],cnt,maxn;
int main(){
cin>>n;
for(long long i=1;i<=n;i++){
cin>>a>>b;
for(long long j=1;j<=a;j++){
s[++cnt]=b;
}
}
sort(s+1,s+cnt+1);
for(long long i=1,j=cnt;i<=j,j>=i;i++,j--){
//cout<<s[i]<<" "<<s[j]<<endl;
long long tmp=s[i]+s[j];
if(maxn<tmp){
maxn=tmp;
}
}
cout<<maxn;
return 0;
}
请找错
或
说思路。
0
已采纳
刘承志
中级光能
中级光能
while(i<=j){
ans=max(ans,a[i].m+a[j].m);
if(a[i].x>a[j].x){
a[i].x-=a[j].x;
j--;
}
else if(a[i].x<a[j].x){
a[j].x-=a[i].x;
i++;
}
else{
i++;
j--;
}
}
重点部分,i和j的值自己想
0
0
李秉轩
修练者
修练者
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=100005;
struct Node
{
int x, y;
}a[N];
bool cmp(Node s, Node t)
{
return s.y<t.y;
}
int n,ans;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d%d",&a[i].x,&a[i].y);
sort(a+1,a+1+n,cmp);
int i=1,j=n;
while(i<=j)
{
if(a[i].y+a[j].y>ans) ans=a[i].y+a[j].y;
if(a[i].x>a[j].x)
{
a[i].x-=a[j].x;
j--;
}
else if(a[i].x<a[j].x)
{
a[j].x-=a[i].x;
i++;
}
else
{
i++;
j--;
}
}
printf("%d",ans);
}
0