链接:http://uoj.ac/problem/82

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

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

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

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

输入格式
第一行一个正整数 nn。 第二行一个正整数 mm。保证 ≤m≤n!≤m≤n!。 输出格式
不超过 nn 行,每行一个正整数 dd,表示你每次告诉水题生成器的难度值。 输出的每个难度值都必须是 n!n! 的约数,且难度值之和恰为 mm。 如果有多组解,输出任意一组均可。如果无解请直接输出卖萌表情 “>w<”(不含引号) 样例一
input output explanation !=××××=!=××××=。 和 都是 的约数,且 ++=++=。 样例二
input output 限制与约定
测试点编号 nn的规模
, , , , , n≤5n≤
, , , , , , , n≤9n≤
, , , , , n≤20n≤
时间限制:1s1s
空间限制:256MB

题干

其实我也不会看了题解。。。
还是直接看题接的解释吧:

        

水题生成器
from taorunz 算法一 对于前6个数据n≤5n≤,!=!=,只有1616个约数。 我们直接用165165枚举这些子集,找到一个和等于mm的集合即可。 当然,由于nn很小,你还可以用分类讨论之类的方法乱搞。 期望得分:30分 算法二 对于前14个数据n≤9n≤. 我们可以将本问题看成一个背包问题来解。 时间复杂度是O(d(n!)∗m)O(d(n!)∗m)的, 其中d(x)d(x)表示xx的约数。 期望得分:70分 算法三 本题与阶乘紧密相关,说到把不超过n!n!的数分解成nn个数的和,最容易想到的就是阶乘进位制。(就是分解成 ∑kak⋅k!∑kak⋅k! 且 ak≤kak≤k) 然而在本题里,用阶乘进位制分解得到的数不一定是n!n!的约数。 (例如样例一,阶乘进位制分解为100=+=×!+×!=+=×!+×!,96却不是120约数) 怎么办呢? 把阶乘进位制倒过来! 我们令新的进位制的第kk位的位值为 n(n−)⋯(n−k)n(n−)⋯(n−k)
然后将mm分解,我们发现分解出来的数都是形如n(n−)⋯(n−k)akn(n−)⋯(n−k)ak的数。而akak是小于(n−k)(n−k)的! 这样n(n−)⋯(n−k)akn(n−)⋯(n−k)ak就一定是n!n!的约数,本题圆满解决啦! 期望得分:100分 算法四 不知道阶乘进位制?没关系!我们可以直接贪心! 我们先算出n!n!的所有约数(n=20n=20时有4104041040个),然后从大到小依次尝试减去当前数,直到减为零为止。 有趣的是,用这种方法,一定可以在不超过nn步内减到零! 为什么呢?我们参考算法三,对于当前剩余要造题的难度值之和m′m′ ,我们可以将它表示成反阶乘进位制后,取出最高位的数。这样就可以使得m′m′降低一个(反阶乘进位制的)数量级。而算法四所取出来的数不会比算法三取出的低,所以算法四也可以保证每次使得m′m′降低一个(反阶乘进位制的)数量级。而总共数量级最多为nn,一定能够在nn次内减到零。 期望得分:100分

题解

#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
#define LL unsigned long long
LL n,tot=,m;
int main()
{
cin>>n>>m;
for(int i=;i<=n;i++) tot*=i; for(int i=;i<=n;i++)
{
tot/=i;
if(tot<=m)
{
printf("%lld ",tot*(m/tot));
m-=tot*(m/tot);
}
}
return ;
}

代码

#82. 【UR #7】水题生成器的更多相关文章

  1. 【UOJ#82】【UR #7】水题生成器(贪心)

    [UOJ#82][UR #7]水题生成器(贪心) 题面 UOJ 题解 把\(n!\)的所有约数搜出来,这个个数不会很多. 然后从大往小能选则选就好了. #include<iostream> ...

  2. 【UR #7】水题走四方

    题目描述 今天是世界水日,著名的水题资源专家蝈蝈大臣发起了水题走四方活动,向全世界发放成千上万的水题. 蝈蝈大臣是家里蹲大学的教授,当然不愿意出门发水题啦!所以他委托他的助手欧姆来发. 助手欧姆最近做 ...

  3. URAL 1136 Parliament 二叉树水题 BST后序遍历建树

    二叉树水题,特别是昨天刚做完二叉树用中序后序建树,现在来做这个很快的. 跟昨天那题差不多,BST后序遍历的特型,找到最后那个数就是根,向前找,比它小的那块就是他的左儿子,比它大的那块就是右儿子,然后递 ...

  4. Identity Card(水题)

    Identity Card Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  5. HDOJ 2317. Nasty Hacks 模拟水题

    Nasty Hacks Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota ...

  6. ACM :漫漫上学路 -DP -水题

    CSU 1772 漫漫上学路 Time Limit: 1000MS   Memory Limit: 131072KB   64bit IO Format: %lld & %llu Submit ...

  7. ytu 1050:写一个函数,使给定的一个二维数组(3×3)转置,即行列互换(水题)

    1050: 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 154  Solved: 112[ ...

  8. [poj2247] Humble Numbers (DP水题)

    DP 水题 Description A number whose only prime factors are 2,3,5 or 7 is called a humble number. The se ...

  9. gdutcode 1195: 相信我这是水题 GDUT中有个风云人物pigofzhou,是冰点奇迹队的主代码手,

    1195: 相信我这是水题 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 821  Solved: 219 Description GDUT中有个风云人 ...

随机推荐

  1. 【C/C++】计算两个整数的最大公约数和最小公倍数

    算法一 任何>1的整数都可以写成一个或多个素数因子乘积的形式,且素数乘积因子以非递减序出现. 则整数x,y可以分别标记为:x=p1x1p2x2...pmxm y=p1y1p2y2...pmym ...

  2. BeginPaint/EndPaint(CPaintDC)与GetDC(CClientDC)的区别

    在OnPaint函数中,用CClientDC dc(this)代替CPaintDC(this)后,界面不断闪烁. 说明:CClientDC是对GetDC的使用封装, CPaintDC是对BeginPa ...

  3. bootstrap 学习笔记(4)---- 按钮

    平常我们自己写按钮,这次不用我们自己写 了,直接应用bootstrap中的按钮样式,就能设计出很漂亮的按钮样式.接下来就让我们一起学习吧. 1.可以作为按钮使用的标签或元素:<a>< ...

  4. 将linux系统用户导入mysql表

    下面这个程序实现的一个很简单的功能,读取passwd文件,将里面的用户信息写入到mysql里面, 具体代码如下: #!/usr/bin/python import pymysql import tim ...

  5. BZOJ_4809_皇后_爆搜

    BZOJ_4809_皇后_爆搜 Description 众所不知,rly现在不会玩国际象棋.但是,作为一个OIer,rly当然做过八皇后问题.这里再啰嗦几句,皇后可以攻击到同行同列同对角线,在n*n的 ...

  6. php之上传图片及传数据到mysql

    index.html <form action="php.php" method="post" enctype="multipart/form- ...

  7. 基于aspect实现AOP——xml配置的其他操作

    将上方配置中的前置通知,可换成环绕通知

  8. 二、myeclipse中配置mybatis中xml的自动提示

    以mybatis中mapper.xml为例 方法一: 步骤一:在mybatis-3.3.0.jar包中寻找mybatis-3-mapper.dtd文件. 可以用360压缩打开mybatis-3.3.0 ...

  9. U盘安装 Linux 显示 “Faild to copy file from CD-ROM”

    解决方案 使用 UltraISO 刻录 U盘做镜像时,出现这种情况.查阅别人的 blog,尝试手动挂载发现还是不能成功.然后使用 win32diskimager 重新刻录,再次安装时未出现该情况. 参 ...

  10. python读写mysql总结

    一.MySQLdb包的安装 1. 在win环境下,下载MySQL-python-1.2.3,有两种方式: (1) 下载src源码.tar.gz(这个源码需要build编译再安装.egg包(当于.jar ...