所以我错在哪里了呢……
查看原帖
所以我错在哪里了呢……
986836
Jeeff楼主2024/10/5 11:11
#include<bits/stdc++.h>

using namespace std;

struct shop
{
	int a,b;	
};
bool cmp(shop x,shop y)
{
	return x.a<y.a; 
}
int main()
{
	int T;
	
	cin>>T;int sum[T];
	for(int i=0;i<T;i++)
	{
		int N,sale=0;
		cin>>N;
		shop sh[N];
		for(int j=0;j<N;j++)
		{
			cin>>sh[j].a>>sh[j].b;
			sale+=sh[j].b;
		}
		sort(sh,sh+N,cmp);
		sale/=2;
		int yisale=0,money=0;
		for(int j=0;j<N;j++)
		{
			money-=sh[j].a*sh[j].b;
			yisale+=sh[j].b;
			if(yisale>=sale)
			{
				money+=(yisale-sale)*sh[j].a;
				break;	
			} 
		}
		
		yisale=0;
		for(int j=N-1;j>=0;j--)
		{
			money+=sh[j].a*sh[j].b;
			yisale+=sh[j].b;
			if(yisale>=sale)
			{
				money-=(yisale-sale)*sh[j].a;
				break;	
			} 
		}
		sum[i]=money;
	}
	for(int i=0;i<T;i++)
	{
		cout<<sum[i]<<endl;	
	}    
}

思路就是先把交易次数加起来除以二,一般用来从低往高买进,另一半从高往低卖出,可是答案是错的……

2024/10/5 11:11
加载中...