UOJ #82 [UR #7] 水题生成器

来源:互联网 发布:免费视频vip破解软件 编辑:程序博客网 时间:2024/05/19 20:58

今天是世界水日,著名的水题资源专家蝈蝈大臣向世界宣布了他的一项新发明 —— 水题生成器。

每道题目都有一个正整数的难度值。水题生成器虽然强大但是功能有限。水题生成器内部有一个参数 nn,你可以告诉水题生成器一个能整除 n!n! 的正整数 dd,水题生成器就会产生一道难度值恰为 dd 的水题。这里 n!n! 表示 nn 的阶乘。

现在蝈蝈大臣的助手欧姆想用水题生成器产生不超过 nn 道水题,且难度值之和恰为 mm。保证 1mn!1≤m≤n!

欧姆当然知道怎么做啦!但是他想考考你。请你给出一组合法方案或输出无解。

输入格式

第一行一个正整数 nn

第二行一个正整数 mm。保证 1mn!1≤m≤n!

输出格式

不超过 nn 行,每行一个正整数 dd,表示你每次告诉水题生成器的难度值。

输出的每个难度值都必须是 n!n! 的约数,且难度值之和恰为 mm

如果有多组解,输出任意一组均可。如果无解请直接输出卖萌表情 “>w<”(不含引号)

样例一

input

5100

output

404020

explanation

5!=1×2×3×4×5=1205!=1×2×3×4×5=1202020 和 4040 都是 120120 的约数,且 40+40+20=10040+40+20=100

样例二

input

103628800

output

3628800

限制与约定

测试点编号nn的规模1, 2, 3, 4, 5, 6n5n≤57, 8, 9, 10, 11, 12, 13, 14n9n≤915, 16, 17, 18, 19, 20n20n≤20

时间限制:1s1s

空间限制:256MB256MB

下载

样例数据下载

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

贪心+思路~

从大到小枚举n!/i!的值now判断能否加进答案里,能就直接输出now*(m/now),再从m中减去这个数。这样,m/now的值一定小于i,也就是说now*(m/now)一定是n!的因子,这样做符合要求。


#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;#define ll long longint n;ll m,now;int main(){scanf("%d%lld",&n,&m);now=1; for(int i=1;i<=n;i++) now*=i;for(int i=1;i<=n;i++){now/=i;if(m>=now){printf("%lld\n",now*(m/now));m-=now*(m/now);}}return 0;}

原创粉丝点击