zoukankan      html  css  js  c++  java
  • noip2005循环

    题解:

    迭代,一次次k累加计算

    代码:

    #include<bits/stdc++.h>
    using namespace std;  
    const int N=10005;  
    int n,a[N],b[N],c[2][N],ans[N];  
    char s[N];  
    bool same(int p[],int q[],int x)  
    {  
          for(int i=1;i<=x;i++)
         if(p[i]!=q[i])return 0;  
          return 1;  
    }  
    void multi_1(int x)  
    {  
          int last=0;  
          for(int i=1;i<=ans[0];i++)  
         {  
              ans[i]=ans[i]*x+last;  
             last=ans[i]/10;ans[i]%=10;  
         }  
          if(last>0)ans[++ans[0]]=last;  
    }  
    void multi_2(int w[],int p[],int q[])  
    {  
          int i,last=0;  
          w[0]=min(p[0]+q[0]-1,n);  
          for(int k=1;k<=w[0];k++)  
            {  
             for(w[k]=last,i=1;i<=p[0];i++)  
             if(k+1-i>=1&&k+1-i<=q[0])w[k]+=p[i]*q[k+1-i];  
              last=w[k]/10,w[k]%=10;  
            }  
          if(last)w[++w[0]]=last;  
    }  
    int get(int x)  
    {  
          memcpy(c[0],b,sizeof(b));  
          for(int i=1;i<=10;i++)  
            {  
             multi_2(c[i&1],c[i&1^1],b);  
              if(same(c[i&1],b,x))  
                {  
                  multi_2(c[i&1],c[i&1^1],a);  
                  if(!same(c[i&1],a,x))goto d1;  
                  memcpy(b,c[i&1^1],sizeof(c[0]));  
                  return i;  
                }  
            }  
          d1:puts("1");  
          exit(0);  
    }  
    int main()  
    {  
          scanf("%s%d",s,&n);  
          a[0]=strlen(s),n=min(a[0],n);  
          for(int i=1;i<=n;i++)a[i]=s[a[0]-i]-'0';  
          memcpy(b,a,sizeof(a));
          ans[0]=1;ans[1]=1;  
          for(int i=1;i<=n;i++)multi_1(get(i));  
        ans[1]++;
        int j=1;
        while (ans[j]==10)
         {
             ans[j+1]++;
             ans[j]=0;
             j++;
         }
        if (ans[ans[0]+1])ans[0]++; 
         for(int i=ans[0];i;i--)printf("%d",ans[i]);   
    }  
  • 相关阅读:
    docker学习网址
    ubantu安装docker
    ssh查看自己的公钥
    Ubuntu 桥接设置 (在ubantu 18.04.5 之前好用 ,,,,18.04.5 就不好用了)
    学习地址
    MANO官网
    centos7 的防火墙 开放端口
    centos7安装arp-sacn (./configure make makeinstall)
    yum源-postgresql
    行拆分,列合并
  • 原文地址:https://www.cnblogs.com/xuanyiming/p/7603517.html
Copyright © 2011-2022 走看看