洛谷P2320 鬼谷子的钱袋
P2320 06湖南 鬼谷子的钱袋
- 171通过
- 480提交
- 题目提供者xmyzwls
- 标签各省省选
- 难度普及+/提高
提交该题 讨论 题解 记录
最新讨论
- 题目有误
- 数据需要特判
- 评测系统太神了
题目描述


输入输出格式
输入格式:

输出格式:

输入输出样例
3
2
1 2
分析:首先要把题目读懂,即可以用n个1,1个2~m的数,通过加法组合成1~m的所有整数,当然,这所有的数字加起来要等于m,似乎有点复杂,该怎么处理呢?
显然,不好直接处理本题,那么先假设一下m=10,如果想要组成1~m的所有整数,那么1是必须要的,因为如果不要1就不能组成1了,然后想,如果有一部分数通过加上一个数等于另外一部分数该多好!
那么可以想到把10个数分成1~5和6~10,那么显然,1~5的数字加上5就能够组成6~10,所以取5,然后可以发现这就是不断地求子问题,那么递归,但是5是奇数怎么办?因为c++中的除法向下取整,所以分成1~2,3~5,1~2必须加上3才能组成3~5,那么把3取上,3又分成1和2,3显然1必须加上2才能取2,3,那么取2,因为1是必须取的,所以取1.
透过现象看本质,可以发现求解的过程很像倍增,每一次可以取的数目都*2,那么如果2^n > m,那么n即为所求的袋子数,如何求每个袋子装的金币呢?根据之前模拟的过程记录答案即可.
通过这道题要明白,一些用字母表示的数不好直接处理,可以设特殊值,从现象看本质,最后想到求解的方法!
代码可以缩成1个循环!
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; int m,tot,cnt,ans[]; int main()
{
scanf("%d", &m);
for (int i = ; ; i = i * )
{
tot++;
if (i > m)
{
printf("%d\n", tot - );
break;
}
}
printf("1 "); //1是肯定要选的
while (m / != )
{
++cnt;
if (m % == )
ans[cnt] = m / ;
if (m % == )
ans[cnt] = m / + ;
m /= ;
}
for (int i = cnt; i >= ; i--) //因为要从小到大输出,所以逆序输出
printf("%d ", ans[i]); return ;
}
洛谷P2320 鬼谷子的钱袋的更多相关文章
- 洛谷P2320鬼谷子的钱袋.
题目 这个题考察二进制分解. \(Code\) #include <bits/stdc++.h> #pragma GCC optimize(2) #pragma GCC optimize( ...
- 【洛谷·P2320】鬼谷子的钱袋
这道题很神奇 我们举一个例子,m=12 那么我们可以把它分成两部分,L和R: (1,2,,6)(7,8,,12) 我们可以发现R中的数都可以由12/2和左边的数组合得到 那么我们对L再分------ ...
- 洛谷P2320 [HNOI2006]鬼谷子的钱袋
https://www.luogu.org/problem/show?pid=2320#sub 题目描述全是图 数学思维,分治思想 假设总数为n 从n/2+1到n的数都可以用1~n的数+n/2表示出来 ...
- 洛谷 P2320 [HNOI2006]鬼谷子的钱袋
题目传送门 解题思路: 对于每一个数i,我们都可以用i/2来表示,而对于i/2我们可以用i/4表示......(以此类推) 举个例子,对于10,我们可以用5 + 5来表示,而5可以用 3 + 2表示, ...
- P2320鬼谷子的钱袋(分治)
------------恢复内容开始------------ 描述:https://www.luogu.com.cn/problem/P2320 m个金币,装进一些钱袋.钱袋中大于1的钱互不相同. 问 ...
- 洛谷2320 bzoj1192 鬼谷子的钱袋
题目链接 题意概述:把正整数n分为m个正整数,m个正整数中不允许出现复数个非1的正整数,保证所有小于n的正整数都可以用一部分正整数的和表示,并且使m尽量小. 这道题不知道为啥bzoj上没有要求输出方案 ...
- P2320 [HNOI2006]鬼谷子的钱袋
洛谷2320 06湖南 鬼谷子的钱袋 来源 题目描述 鬼谷子非常聪明,正因为这样,他非常繁忙,经常有各诸侯车的特派员前来向他咨询时政.有一天,他在咸阳游历的时候,朋友告诉他在咸阳最大的拍卖行(聚宝商行 ...
- p2320&bzoj1192 鬼谷子的钱袋
传送门(洛谷) 传送门(bzoj) 题目 鬼谷子非常聪明,正因为这样,他非常繁忙,经常有各诸侯车的特派员前来向他咨询时政.有一天,他在咸阳游历的时候,朋友告诉他在咸阳最大的拍卖行(聚宝商行)将要举行一 ...
- 题解 P2320 【[HNOI2006]鬼谷子的钱袋】
P2320 [HNOI2006]鬼谷子的钱袋 挺有趣的一道题,之所以发这篇题解是因为感觉思路的更清晰一点qwq 此题主要有两种方法: 一.分治思想 例如要凑出1~20,假如我们已经能凑出1~10了,那 ...
随机推荐
- SQL中CONVERT()转化函数的用法 字符串转日期
SELECT CONVERT(varchar(), GETDATE(), ): :57AM SELECT CONVERT(varchar(), GETDATE(), ): // SELECT CONV ...
- ADF_Starting系列1_JDeveloper IDE开发环境简介
2013-05-01 Created By BaoXinjian
- 有关C,C++,C#, Java的图形图像处理类库 整理(未完待续)
1.Java相关 1.1 Jzy3D Jzy3D 是一个Java的类库,用来绘制各种各样的三维图形,如下图所示: 下载地址:jzy3d-api,官网 1.2 Proscene 是一个用于创建交互式3D ...
- Javascript函数声明与函数表达式
在定义函数时,我们一般使用下面这两种方法: 使用函数声明定义: function sum (a, b) { return a + b; } 使用函数表达式定义: var sum = function ...
- db2删除数据库
1.断开所有连接 db2 stop application all force 2.停止数据库 db2stop 3.删除数据库(系统管理员权限下)db2 drop 数据库name
- i++与++i 辨析
i++:先赋值在自加: ++i:先自加在赋值: 备注:在赋值运算中有区别,单独使用没有区别 ( 例子1:单独使用 for(int i=0;i<10;i++){ } for(int i=0;i&l ...
- Objective-C: 字符串NSString与NSMutableString
字符串算是OC中非常重要和常用的一部分内容,OC中的字符串与我之前在学习C,C++,Java中的字符串有一定的不同,它非常类似于C++中容器的概念,但用法却与之还是有很大的不同,也许是因为OC的语法就 ...
- 无侵入方面编程-用HttpModule+SoapExtension监视页面执行参数(二)
上一篇文章 "无侵入方面编程-用HttpModule+SoapExtension监视页面执行参数(一)"中,我们实现了监视每个页面的执行情况和调用WebService的简单信息. ...
- Collection集合List、Set
Collection集合,用来保存一组数据的数据结构. Collection是一个接口,定义了所有集合都应该包含的特征和行为 Collection派生出了两类集合 List和Set List接口:Li ...
- nginx 反向代理(Reverse Proxy)与耗时记录
反向代理服务器位于实际的服务器之前,他能够缓存服务器响应,加速访问,同时也启到了负载均衡服务器的效果.反向代理服务器解析客户端请求,根据负载均衡算法转发到不同的后台服务器上.用户和后台服务器之间不再有 ...