问,悬关
  • 板块学术版
  • 楼主aaa_lvzekai
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/8/14 12:44
  • 上次更新2023/11/3 03:55:30
查看原帖
问,悬关
1055005
aaa_lvzekai楼主2023/8/14 12:44

题目链接

为什么这个代码只有90分qwq

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1000010;
struct st
{
	ll a,b;
};
ll n,a,b,size,ans[N],length,daan[N],len,tmp[N];
st e[N];
bool cmp(st x,st y)
{
	if(x.a*x.b==y.a*y.b)
	{
		return x.b<y.b;
	}
	return x.a*x.b<y.a*y.b;
}
bool cmpcmp()
{
	if(length==len)
	{
		for(int i=1;i<=len;i++)
		{
			if(daan[i]!=tmp[i])
			{
				return daan[i]>tmp[i];
			}
		}
	}
	return length>len;
}
void multiplication(ll a[],ll &len,ll b)
{
	for(int i=1;i<=len;i++)
	{
		a[i]*=b;
	}
	len+=5;
	for(int i=1;i<=len;i++)
	{
		a[i+1]+=a[i]/10;
		a[i]%=10;
	}
	while(a[len]==0)
	{
		len--;
	}
}
void division(ll a[],ll &len,ll b)
{
	while(len>0&&a[len]==0)
	{
		len--;
	}
	memset(daan,0,sizeof(daan));
	length=1;
	ll tmp=0;
	bool flag=false;
	for(int i=len;i>=1;i--)
	{
		tmp=tmp*10+a[i];
		daan[++length]=tmp/b;
		tmp%=b;
		if(!flag&&daan[length]==0)
		{
			length--;
		}
		else
		{
			flag=true;
		}
	}
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>a>>b;
	for(int i=1;i<=n;i++)
	{
		cin>>e[i].a>>e[i].b;
	}
	sort(e+1,e+n+1,cmp);
	ans[++size]=a;
	for(int i=1;i<=n;i++)
	{
		division(ans,size,e[i].b);
		if(cmpcmp())
		{
			len=length;
			memcpy(tmp,daan,sizeof(daan));
		}
		multiplication(ans,size,e[i].a);
	}
	ll i=0;
	while(i<=len&&tmp[i]==0)
	{
		i++;
	}
	cout<<tmp[i++];
	for(;i<=len;i++)
	{
		cout<<tmp[i];
	}
	cout<<"\n";
	return 0;
}
2023/8/14 12:44
加载中...