HELP!!!!90分

P1591 阶乘数码

sunxiaofan @ 2019-04-02 22:59:02

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector>
#include<stack>
using namespace std;
int geshu,t;
struct node1 
{
    int n,a,num,ans1;
}x[15];
int ans[3500];

bool mm1(node1 v1,node1 v2)
{
    return v1.n <v2.n;
}

void sear(int v)
{
    bool flag=0;
    for(int i=v*3;i>0;i--)
    {
        if(ans[i])flag=1;
        if(flag&&ans[i]==x[geshu].a )
        {
            x[geshu].ans1++;
        }
    }
    geshu++;
}

bool mm2(node1 v1,node1 v2)
{
    return v1.num<v2.num ;
}

void gaojing(int z)
{
    for(int i=1;i<=3000;i++)
    {
        ans[i]*=z;
    }
    for(int i=1;i<=3000;i++)
    {
        ans[i+1]+=ans[i]/10;
        ans[i]%=10;
    }
}

int main()
{      
    //freopen("1.in","r",stdin);
    //freopen("1.out","w",stdout);
    scanf("%d",&t);
    for(int i=1;i<=t;i++)
    {
        scanf("%d%d",&x[i].n,&x[i].a);
        //printf("%d",x[i].n );
        x[i].num =i;
    }
    sort(x+1,x+1+t,mm1);
    geshu=1;
    ans[1]=1;
    for(int i=1;i<=x[t].n+5;i++)
    {
        gaojing(i);
        if(i==x[geshu].n)
        {
            //printf("#");
            sear(i);
        }
    }
    sort(x+1,x+t+1,mm2);
    /*bool flag=0;
    for(int i=3*t;i>0;i--)
    {
        if(ans[i])flag=1;
        if(flag)printf("%d",ans[i]);
    }
    printf("\n");*/
    for(int i=1;i<=t;i++)
    {
        printf("%d\n",x[i].ans1);
    }
    return 0;
}

请问大佬,为何90分?


|