Mei20 @ 2024-09-16 17:33:15
#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;
}