⑨要写信

1697 ⑨要写信

 

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold
 
 
 
题目描述 Description

琪露诺(冰之妖精)有操控冷气的能力。能瞬间冻结小东西,比普通的妖精更危险。一直在释放冷气的她周围总是非常寒冷。

由于以下三点原因……

  • 琪露诺的符卡 冰符“Icicle Fall”-Easy的弹幕有够蠢的,只要站在她的正前方就没任何弹幕会碰到你;
  • ZUN在《红魔乡》中介绍她时已经说她有点笨笨的了;
  • 在ZUN放出《东方花映冢》的介绍图时,在图中把琪露诺放在了⑨的位置上,并以“⑨笨蛋”简单带过,从此“⑨”及“笨蛋”就成为她的别名了……

所以琪露诺便得到了“笨蛋”的别称。

某日,琪露诺又2了……

她写了N封信要装到N个信封里面,却全都装错了……现在想知道有多少种装错的可能性。

输入描述 Input Description

信和信封的数量N。

输出描述 Output Description

装错的可能性的数量。

样例输入 Sample Input
 
样例输入1
 
2
 
样例输入2
 
4
 
样例输出 Sample Output
 
样例输出1
 
1
 
样例输出2
 
9
 
数据范围及提示 Data Size & Hint

1≤N≤100

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int f[101][1000000];
int len(int a)
{
    int i=100000-1;
    while(f[a][i]==0&&i>0) i--;
    return i;
}
int main()
{
    int n,i,j,l,lnow;
    scanf("%d",&n);
    f[2][0]=1;
    for(i=3; i<=n; i++)
    {
        l=len(i-1);
        for(j=0; j<=l; j++)
            f[i][j]=f[i-1][j]+f[i-2][j];
        for(j=0; j<=l; j++)
            if(f[i][j]>9)
               {
                f[i][j+1]+=f[i][j]/10;
                f[i][j]%=10;
            }
        lnow=len(i);
        for(j=0; j<=lnow; j++)
            f[i][j]*=i-1;
        for(j=0; j<=lnow; j++)
            if(f[i][j]>9)
            {
                   f[i][j+1]+=f[i][j]/10;
                f[i][j]%=10;
            }
    }
    l=len(n);
    for(i=l; i>=0; i--)
        printf("%d",f[n][i]);
    cout<<endl;
    return 0;
}
原文地址:https://www.cnblogs.com/dxy1174868024/p/5656513.html