70pts求助
查看原帖
70pts求助
360511
UperFicial楼主2021/10/20 08:16

高精直接贺的,应该没错。

然后我就不理解了/yun

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<ctime>
#include<cstdlib>
#include<iostream>
#include<string>
#include<climits>
#include<queue>
#include<vector>
using namespace std;
inline int read()
{
	int s=0,w=1;
	char ch=getchar();
	while(ch<'0' or ch>'9'){if(ch=='-')w=-1;ch=getchar();}
	while(ch>='0' and ch<='9')s=s*10+(ch-'0'),ch=getchar();
	return s*w;
}
const int INF=1e9+10;
inline int Max(int x,int y){return x>y?x:y;}
inline int Min(int x,int y){return x<y?x:y;}
inline void Swap(int&x,int&y){x^=y;y^=x;x^=y;}
inline int Abs(int x){return x>0?x:-x;}
const int MAXN(1010);
int n;
struct node{int x,y,z;};
node a[MAXN];
inline bool cmp(node x,node y){return x.z<y.z;}
struct BigInteger
{
	int d[MAXN],len;
	inline void Clear()
	{
		while(len>1&&!d[len-1]) --len;
		return;
	}
	BigInteger()
	{
		memset(d,0,sizeof(d));
		len=1;
		return;
	}
	BigInteger(int num){*this=num;}
	BigInteger(char*num){*this=num;}
	BigInteger operator=(const char*num)
	{
		memset(d,0,sizeof(d));
		len=strlen(num);
		for(register int i=0;i<len;i++)
			d[i]=num[len-i-1]-'0';
		Clear();
		return *this;
	}
	BigInteger operator=(int num)
	{
		char s[20];
		sprintf(s,"%d",num);
		*this=s;
		return *this;
	}
	BigInteger operator+(const BigInteger&b)
	{
		BigInteger c=*this;
		int i;
		for(i=0;i<b.len;i++)
		{
			c.d[i]+=b.d[i];
			if(c.d[i]>9) c.d[i]%=10,++c.d[i+1];
		}
		while(c.d[i]>9) c.d[i++]%=10,++c.d[i];
		c.len=Max(len,b.len);
		if(c.d[i]&&c.len<=i) c.len=i+1;
		return c;
	}
	BigInteger operator-(const BigInteger&b)
	{
		BigInteger c=*this;
		int i;
		for(i=0;i<b.len;i++)
		{
			c.d[i]-=b.d[i];
			if(c.d[i]<0) c.d[i]+=10,--c.d[i+1]; 
		}
		while(c.d[i]<0) c.d[i++]+=10,--c.d[i];
		c.Clear();
		return c;
	}
	BigInteger operator*(const BigInteger&b) const
	{
		BigInteger c;
		c.len=len+b.len;
		for(register int j=0;j<b.len;j++)
			for(register int i=0;i<len;i++)
				c.d[i+j]+=d[i]*b.d[j];
		for(register int i=0;i<c.len-1;i++)
			c.d[i+1]+=c.d[i]/10,c.d[i]%=10;
		c.Clear();
		return c;
	}
	BigInteger operator/(const BigInteger&b)
	{
		BigInteger c=*this,a=0;
		for(register int i=len-1;i>=0;i--)
		{
			a=a*10+d[i];
			int j;
			for(j=0;j<10;j++)
				if(a<b*(j+1)) break;
			c.d[i]=j;
			a=a-b*j;
		}
		c.Clear();
		return c;
	}
	bool operator<(const BigInteger&b) const
	{
		if(len!=b.len) return len<b.len;
		for(register int i=len-1;i>=0;i--)
			if(d[i]!=b.d[i]) return d[i]<b.d[i];
		return false;
	}
	string str() const
	{
		char s[MAXN]={};
		for(register int i=0;i<len;i++)
			s[len-1-i]=d[i]+'0';
		return s;
	}
};
BigInteger maxx=0,ans=0;
ostream&operator<<(ostream&out,const BigInteger&x)
{
	cout<<x.str();
	return out;
}
int main()
{
	freopen("read.txt","r",stdin);
	n=read();
	for(register int i=0;i<=n;i++)
	{
		a[i].x=read(),a[i].y=read();
		a[i].z=a[i].x*a[i].y;
	}
	sort(a+1,a+1+n,cmp);
	ans=a[0].x;
	for(register int i=1;i<=n;i++)
	{
		BigInteger now=ans/a[i].y;
		if(maxx<now) maxx=now;
		now=a[i].x;
		ans=ans*now;
	}
	cout<<maxx<<endl;
	return 0;
}
2021/10/20 08:16
加载中...