社区讨论
样例过,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 条回复,欢迎继续交流。
正在加载回复...