T139631 T3 阶乘之和
题目描述 给定一个非负整数 n,请你判断 n 是否可以由一些非负整数的阶乘相加得到。 输入格式 有若干组数据。每行一个整数 n,保证 n<1000000。 以负数结束输入。 输出格式 对于每组数据输出一行,若可以则输出‘YES’,否则输出‘NO’。 输入输出样例 输入 #1复制 9 -1 输出 #1复制 YES 7/20 校内测模拟T3 差点就离 (l ì ) 开 (k ǎi) 这个右袖的湍堆了 四道题两道模拟可是还是只特么100分WDNMD 话不多说这篇博客是为了UOJ题解水的 我的想法是枚举全排列 我们通过计算 (打表) 可得 1! = 1 2! = 2 3! = 6 4! = 24 5! = 120 6! = 720 7! = 5040 8! = 40320 9! = 362880 10! = 3628800 最后别忘了0! = 1(惨死于此 等一下... 这数据范围... n<1000000 我直接疑天下之大惑 那就是说数据只可能由0到9的阶乘构成 那我们考虑用一个10位二进制数表示选择情况 那只有1024种可能 同时用桶排思想开个420000(这十个阶乘加起来不超过420000)的布尔数组 将这1024种情况与处理出来便可以完成O(1)查询了 代码如下 #include <iostream> #include <cstdio> #include <cstring>