样例过,90,求
  • 板块P1591 阶乘数码
  • 楼主Mei20
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/9/16 17:33
  • 上次更新2024/9/16 21:05:57
查看原帖
样例过,90,求
759449
Mei20楼主2024/9/16 17:33
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
struct sj{
	int ord,a,n,sum;
};
bool cmp(sj a,sj b)
{
	return a.n<b.n;
}
bool comp(sj a,sj b)
{
	return a.ord<b.ord;
}
void mul(int *a,int b)
{
	int c[3001];
	memset(c,0,sizeof(c));
	for(int i=1;i<=a[0]+3;i++)
	{
		c[i]+=a[i]*b;
		if(c[i]>=10)
		{
			c[i+1]+=c[i]/10;
			c[i]%=10;
		}
	}
	a[0]+=3;
	while(c[a[0]]==0) a[0]--;
	for(int i=1;i<=a[0];i++)
	a[i]=c[i];
}
sj s[13];
int b[3001],t;
bool d;
int main()
{
	b[0]=1;b[1]=1;
	cin>>t;
	for(int i=1;i<=t;i++)
	{
		cin>>s[i].n>>s[i].a;
		s[i].ord=i;
	}
	sort(s+1,s+t+1,cmp);
	for(int i=1,j=1;i<=t;j++)
	{
		d=0;
		mul(b,j);
		if(s[i].n==j) {
			for(int k=b[0];k>=1;k--)
			if(b[k]==s[i].a) s[i].sum++;
			while(s[i+1].n==j&&i<=t){
				d=1;
				i++;
				for(int k=b[0];k>=1;k--)
				if(b[k]==s[i].a) s[i].sum++;
			}
			if(!d) i++;
		}			
	}
	sort(s+1,s+t+1,comp);
	for(int i=1;i<=t;i++)
	cout<<s[i].sum<<endl;
	return 0;
}
2024/9/16 17:33
加载中...