高精度40分剩下点WA恳求dalao帮助QWQ
查看原帖
高精度40分剩下点WA恳求dalao帮助QWQ
601747
xibaohe楼主2023/1/7 15:45
#include<cstring>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int maxn[1000005],cnt[1000005];
struct node
{
	int a,b;
};node no[1000005];
bool cmp(node x,node y)
{
	return x.b*x.a<y.b*x.b;
}
void mulBIG(int a[],int b,int c[])
{
	c[0]=a[0];
	int u=0;
	for(int i=1;i<=c[0];i++)
	{
		int t=a[i]*b+u;
		c[i]=t%10;
		u=t/10;
	}
	while(u>0)
	{
		c[++c[0]]=u%10;
		u/=10;
	}
}
void addBIG(int x[],int y[],int z[])
{
	z[0]=max(x[0],y[0]);
	int u=0;
	for(int i=1;i<=z[0];i++)
	{
		int t=x[i]+y[i]+u;
		z[i]=t%10;
		u=t/10;
	}
	if(u>0)
	z[++z[0]]=u;
}
void subBIG(int x[],int y[],int z[])
{
	z[0]=max(x[0],y[0]);
	int u=0;
	for(int i=1;i<=z[0];i++)
	{
		x[i]-=u;
		u=0;
		int t=x[i]-y[i]-u;
		if(t>=0)
		{
			z[i]=x[i]-y[i];
			continue;
		}
		u=1;
		z[i]=t+10;
	}
	while(z[z[0]]==0&&z[0]>1)
	z[0]--;
}
void s2BIG(string s,int a[])
{
	a[0]=s.size();
	for(int i=a[0];i>=1;i--)
	a[i]=s[a[0]-i]-'0';
}
void printBIG(int a[])
{
	for(int i=a[0];i>=1;i--)
	cout<<a[i];
	cout<<endl;
}
bool cmpBIG(int a[], int b[])
{
	if(a[0] != b[0]) return a[0] < b[0];
	for(int i = a[0]; i >= 1; i--)
		if(a[i] != b[i]) return a[i] < b[i];
	return false;
}
void divBIG(int a[],int b,int c[])
{
	c[0]=a[0];
	int r=0;
	for(int i=c[0];i>=1;i--)
	{
		int t=r*10+a[i];
		c[i]=t/b;
		r=t%b;
	}
	while(c[c[0]]==0&&c[0]>1)
	c[0]--;
}
void fuzhiBIG(int a[],int b[])
{
	memset(a,0,sizeof(a));
	a[0]=b[0];
	for(int i=1;i<=b[0];i++)
	a[i]=b[i];
	return;
}
int main(){
	int n;
	cin>>n;
    cin>>no[0].a>>no[0].b;
    for(int i=1;i<=n;i++) cin>>no[i].a>>no[i].b;
    sort(no+1,no+n+1,cmp);
    string s="1";
    s2BIG(s,cnt);
    for(int i=1;i<=n;i++)
    {
    	mulBIG(cnt,no[i-1].a,cnt);
    	int x[1000005];
    	divBIG(cnt,no[i].b,x);
    	if(cmpBIG(x,maxn)==false)
    	fuzhiBIG(maxn,x);
	}
	printBIG(maxn);
	return 0;
}

2023/1/7 15:45
加载中...