求助第七个点
查看原帖
求助第七个点
546089
LuukLuuk楼主2022/2/4 18:47

代码:

#include<bits/stdc++.h>
#include<string>
using namespace std;
const int MAXLEN=200000;	
typedef int hp[MAXLEN];	
struct ab{
	int a,b;
};

void Str2hp(string s,hp &a)	
{
	int i,len;
	memset(a,0,sizeof(a));
	len=s.size();
	a[0]=len;
	for(i=0;i<len;i++)	a[len-i]=s[i]-'0';
}

void printg(hp a)
{
	int i,len;
	len=a[0];
	for(i=len;i>=1;i--)	cout<<a[i];
}

void hp_to_hp(hp a,hp& b)
{
	int i,len;
	len=a[0];
	b[0]=a[0];
	for(i=len;i>=1;i--)	b[i]=a[i];
} 

void compare(hp& a,hp b) 
{
	int i;
	if(a[0]<b[0]) return;
	if(a[0]>b[0]) 
	{
		hp_to_hp(b,a);
		return; 
	}
	for(i=1;i<=sizeof(a);i++)
	{
		if(a[i]>b[i]) hp_to_hp(b,a);
		return;
	}
	return; 
}

void mult(hp a,int b,hp &c){
	hp d;
	int i,len,t;
	memset(d,0,sizeof(d));
	len=a[0];
	for(i=1;i<=len;i++)	d[i]=a[i]*b;
	for(i=1;i<=len;i++)
	{
		d[i+1]+=d[i]/10; 
		d[i]%=10;
	}
	len++;
	while(d[len])
	{
		d[len+1]=d[len]/10;
		d[len]%=10; 
		len++;
	}
	while(d[len]==0&&len>1)	len--;
	d[0]=len;
	memcpy(c,d,sizeof(d)); 
}

void divi(hp a,int b,hp &c,int &r)
{
	hp d;
	int i,len;
	
	memset(d,0,sizeof(d));
	r=0;
	len=a[0];
	
	for(i=len;i>=1;i--)
	{
		r=r*10+a[i];
		d[i]=r/b;
		r%=b;
	}
	while (len>1 && d[len]==0)	len--;
	d[0]=len;
	memcpy(c,d,sizeof(d));
}

int main()
{
	int j,i,n,r;
	ab a[1001],t;
	string x,y;
	hp ans,sum,max;sum[0]=1;sum[1]=1;max[0]=1;max[1]=1;
	
	scanf("%d",&n);                                 
	for(i=0;i<=n;i++)	scanf("%d%d",&a[i].a,&a[i].b);
	
	for(i=1;i<=n;i++)
	{
		for(j=i;j<n;j++)
		{        
			if(a[j].a*a[j].b>a[j+1].a*a[j+1].b)
			{
				t=a[j];
				a[j]=a[j+1];
				a[j+1]=t;
			}
		}
	}
	
	for(i=1;i<=n;i++)
	{
		mult(sum,a[i-1].a,sum);
		divi(sum,a[i].b,ans,r);
		compare(max,ans);
	}
	
	printg(max);
	return 0;
}
2022/2/4 18:47
加载中...