QingQiu1 @ 2022-12-07 16:26:00
#include <iostream>
using namespace std;
int t,n,a;
int b[1001];
long long wei,jg;
int main()
{
cin>>t;
while(t)
{
int j,i;
jg=0;
wei=0;
cin>>n>>a;
for(i=0;i<=1000;i++) b[i]=0;
b[1000]=1;
int jw=0;
for( j=2;j<=n;j++)
{
for( i=1000;i>=0;i--)
{
b[i]=b[i]*j+jw;
jw=b[i]/10;
b[i]%=10;
}
while(jw>0)
{
b[i]=jw%10;
jw/=10;
i--;
}
}
for( wei=0;wei<=1000;wei++)
{
if(b[wei]!=0) break;
}
for( i=wei;i<=1000;i++)
{
if(b[i]==a)jg++;
}
cout<<jg<<endl;
t--;
}
return 0;
}
by Libingyue2011 @ 2023-01-28 14:33:49
高精度结构体 + 重载运算符 + STL排序函数sort + STL二分查找函数upper_bound & lower_bound 快速统计排完序的数列的某个元素个数 , 代码如下:
#include<iostream>//C++风格
#include<cstdio>//C语言风格
#include<algorthm>//STL函数库
using namespace std;
struct bigint{//高精结构体
int a[3000],len;
int &operator [] (int i){
return a[i];
}
bigint(int x=0){
memset(a,0,sizeof a);
for(len=1;x;len++){
a[len]=x%10,x/=10;
}
len--;
}
void bigset(int x){
memset(a,0,sizeof a);
for(len=1;x;len++){
a[len]=x%10,x/=10;
}
len--;
}
void f(int l){
len=l;
for(int i=1;i<=len;i++){
a[i+1]+=a[i]/10,a[i]%=10;
}
for( ;!a[len]; ){
len--;
}
}
};
bigint operator * (bigint a,int b){
bigint c;
for(int i=1;i<=a.len;i++){
c[i]=a[i]*b;
}
c.f(a.len+11);
return c;
}
void print(bigint x){
for(int i=x.len;i>=1;i--){
cout<<x[i];
}
printf("\n");
}
int jctj(bigint a,int t){
sort(a.a+1,a.a+a.len+1);//二分统计
int ans=upper_bound(a.a+1,a.a+a.len+1,t)-lower_bound(a.a+1,a.a+a.len+1,t);
return ans;
}
int t;
bigint ans(1);
int main() {
scanf("%d",&t);//输入
for(int i=1;i<=t;i++){
int n,p;
cin>>n>>p;
ans.bigset(1);
for(int j=2;j<=n;j++){
ans=ans*j;
}
cout<<jctj(ans,p)<<"\n";
}
return 0;
}