社区讨论

样例过,90,求

P1591阶乘数码参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@m14t5z83
此快照首次捕获于
2024/09/16 17:34
去年
此快照最后确认于
2025/11/04 21:06
4 个月前
查看原帖
CPP
#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;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...