有人知道为什么第六个点会wa掉吗
查看原帖
有人知道为什么第六个点会wa掉吗
111349
bobzbh楼主2022/7/12 19:14
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
int n,num_l[9005][500],num_r[9005][500],multi[9005][500],divi[9005][500];
struct node
{
	int l,r;
}peo[9005];
bool cmp(struct node a,struct node b)
{
	return a.r*a.l<b.l*b.r;
}
int getlen_m(int pl)
{
	int lenth;
	for(int i=500; i>=1; --i)
	{
		if(multi[pl][i]!=0)
		{
			lenth=i;
			break;
		}
	}
	return lenth;
}
int getlen_d(int pl)
{
	int lenth;
	for(int i=500; i>=1; --i)
	{
		if(divi[pl][i]!=0)
		{
			lenth=i;
			break;
		}
	}
	return lenth;
}
int getlen_n(int number)
{
	int nn=number,len=0;
	while(nn!=0)
	{
		nn/=10;
		len++;
	}
	return len;
}
void put(int pl)
{
	int left=getlen_n(peo[pl].l),right=getlen_n(peo[pl].r);
	int ll=peo[pl].l,rr=peo[pl].r;
	for(int i=1; i<=left; ++i)
	{
		num_l[pl][i]=ll%10;
		ll/=10;
	}
	num_l[pl][0]=left;
	for(int i=1; i<=right; ++i)
	{
		num_r[pl][i]=rr%10;
		rr/=10;
	}
	num_r[pl][0]=right;
}
void multiply(int pl)
{
	for(int i=1; i<=num_l[pl-1][0]; ++i)
	{
		for(int j=1; j<=multi[pl-1][0]; ++j)
		{
		    int cheng=num_l[pl-1][i]*multi[pl-1][j];
		    multi[pl][i+j-1]+=cheng%10;
		    multi[pl][i+j]=cheng/10;
		}
	}
	multi[pl][0]=getlen_m(pl);
}
void divide(int pl)
{
	int de_multi[500];
	for(int i=0; i<=multi[pl][0]; ++i)
	{
		de_multi[i]=multi[pl][i];
	}
	for(int i=multi[pl][0]; i>=1; --i)
	{
		divi[pl][i]=de_multi[i]/peo[pl].r;
		de_multi[i-1]+=de_multi[i]%peo[pl].r*10;
	}
	divi[pl][0]=getlen_d(pl);
}
void pairup()
{
	int max_len=0;
	for(int i=1; i<=n; ++i)
	{
		if(divi[i][0]>max_len)
		{
			max_len=divi[i][0];
		}
	}
	int plac=0,maxx=0;
	for(int i=1; i<=n; ++i)
	{
		if(divi[i][max_len]>maxx)
		{
			plac=i;
			maxx=divi[i][max_len];
		}
	}
	for(int i=divi[plac][0]; i>=1; --i)
	{
		cout<<divi[plac][i];
	}
}
int main()
{
	
	cin>>n;
	memset(num_l,0,sizeof(num_l));
	memset(num_r,0,sizeof(num_r));
	memset(multi,0,sizeof(multi));
	memset(divi,0,sizeof(divi));
	for(int i=0; i<=n; ++i)
	{
		cin>>peo[i].l>>peo[i].r;
	}
	sort(peo+1,peo+1+n,cmp);
	for(int i=0; i<=n; ++i)
	{
		put(i);
	}
	multi[0][0]=1;
	multi[0][1]=1;
	for(int i=1; i<=n; ++i)
	{
		multiply(i);
		divide(i);
	}
	pairup();
	return 0;
}
2022/7/12 19:14
加载中...