链接:https://ac.nowcoder.com/acm/contest/271/A
来源:牛客网

题目描述

misaka是呱太爷爷的小粉丝,呱太爷爷有一句话说的好:"一尺之棰,日取其半,万世不竭"。

misaka现在有 n 个呱太玩偶放在一堆,每一次操作,misaka会选择当前个数 > 1 的一堆呱太玩偶。并将这一堆呱太玩偶分成 x/2和 x−x/2两堆,x 是当前这一堆玩偶的个数。现在 misaka 想将玩偶分成 m 堆,其中第 i 堆呱太玩偶的个数是 ai ,你需要告诉 misaka 是否能通过若干次操作将玩偶分成指定的这 m 堆。如果可以输出 misaka,否则输出 ham 。

输入描述:

第一行两个数 n, m 。
接下来一行 m 个数 ai 。

输出描述:

输出共一个字符串 misaka/ham,表示 misaka 能否将玩偶分成指定的 m 堆。

示例1

输入

4 1
5

输出

ham

备注:

1 ≤ n ≤ 10^18, 1 ≤ m ≤ 10^5, 1 ≤ ai ≤ 10^18。

题解:

首先,我想的是将m个数字放在优先队列里,每次弹出两个小的数字,如果两个数字相差小于等于1,那么就将这两个数字的和入队列,否则结束。但是这样是错误的,因为合并的方式不唯一。

因为将一个数字分下去的方案唯一,那么用map标记n可以分成哪些数字,如果这m个数字的和等于n并且都被标记过,那么存在这个方案。我想不到为什么都被标记过,那么这m个数字就能同时存在,但是我也举不出反例。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+5;
map<ll,bool> flag;
ll n,m;
ll a[maxn];
void dfs(ll x){if(flag[x]) return;flag[x]=true;dfs(x/2);dfs(x-x/2);
}
int main(){scanf("%lld%lld",&n,&m);ll sum=0;for(int i=0;i<m;i++){scanf("%lld",a+i);if(a[i]<=n) sum+=a[i];}if(sum!=n) puts("ham");else {dfs(n);bool f=true;for(int i=0;i<m;i++) if(!flag[a[i]]){ f=false;break;}if(f) puts("misaka");else puts("ham");}return 0;
}

牛客Wannafly挑战赛29 A 御坂美琴 思维题相关推荐

  1. Wannafly挑战赛29 A御坂美琴(思维题+dfs)

    题意: 一开始有n个糖果,每一次操作,你可以选择一堆x将其分成两堆,x//2,x-x//2 直到一堆的糖果数量=1就不能进行操作了. 然后现在给你m堆糖果a[1..m],问你能不从n个通过任意操作变成 ...

  2. Wannafly挑战赛29 御坂美琴(递归,模拟)

    链接:https://ac.nowcoder.com/acm/contest/271/A 来源:牛客网 御坂美琴 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语 ...

  3. Wannafly挑战赛29-A御坂美琴 (dfs+map)

    链接:https://ac.nowcoder.com/acm/contest/271/A 来源:牛客网 御坂美琴 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语 ...

  4. 解读御坂美琴みさか的菱形打印程序——谈如何学习算法

    百度C语言吧主御坂美琴みさか的<C语言循环的小艺术>很久以前我就复制下来收藏了,不过一直没有研究.昨天Uval的AOAPC I: Beginning Algorithm Contests ...

  5. SCU-4396 麦野沉利与御坂美琴的战斗

    4396: 麦野沉利与御坂美琴的战斗 Submit your solution     Discuss this problem     Best solutions 描述 麦姐辛苦建立的实验室被入侵 ...

  6. 御坂美琴(入门bfs+STL)

    御坂美琴 misaka是呱太爷爷的小粉丝,呱太爷爷有一句话说的好:"一尺之棰,日取其半,万世不竭". misaka现在有 n 个呱太玩偶放在一堆,每一次操作,misaka会选择当前 ...

  7. 牛客Wannafly挑战赛10 A.小H和迷宫

    链接:https://www.nowcoder.com/acm/contest/72/A 来源:牛客网 题目描述 小H陷入了一个迷宫中,迷宫里有一个可怕的怪兽,血量有N点,小H有三瓶魔法药水,分别可以 ...

  8. nowcoder (牛客)Wannafly挑战赛26 B: 冥土追魂 (思维)

    链接:https://www.nowcoder.com/acm/contest/212/B 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语言104 ...

  9. 牛客小白月赛9: F. 暴力出奇迹(思维题)

    链接:https://ac.nowcoder.com/acm/contest/275/F 来源:牛客网 题目描述 给定一个序列,寻找一对l,r,满足1 ≤ l ≤ r ≤ n 最大化的值 其中表示将a ...

最新文章

  1. 融合了距离矢量和链路状态两种路由选择协议的优点
  2. 计算机网络:大小端存储
  3. C++中const用法总结
  4. 后台原理_从浏览器如何进入路由器后台【详细介绍】
  5. Cloud for Customer里点了Opportunity ID的超链接到进入overview page,背后发生了什么事?
  6. 类型缩放Google map 地图类型
  7. oracle 11g重新安装配置,Oracle 11g数据库安装和卸载教程
  8. sqlserver中自定义函数+存储过程实现批量删除
  9. eclipse svn新增文件不显示在文件列表,只有修改文件可以提交!
  10. vs2015软件系统开源_特别版:2015年开源新闻
  11. Vue练习(修改为自定义事件)
  12. java ldap tls_ldap之tls 双向认证要我命
  13. css单行文本和多行文本溢出实现省略号显示
  14. 大写数字时钟屏保下载
  15. Docker安装及使用
  16. C语言教学模式 教学方法改革,C语言教学模式改革探究.docx
  17. 冈萨雷斯:数字图像处理(一):第一章绪论
  18. 解决GoLand上面出现的Couldn‘t copy unpacked SDK问题
  19. Android Studio 实现桌面小组件(APPWidget)
  20. JQuery实现表单验证(注册页面)

热门文章

  1. SQL中常见的几种连接方法-(内连接,左连接,右连接)
  2. 利用Web玩转树莓派
  3. Assembly Manifest
  4. oracle怎么自定义排序,ORACLE自定义顺序排序
  5. python教程-数据分析-matplotlib绘制折线图2 +总结(搭建网格,加上图例,修改图片的颜色和线条,脑图总结)
  6. 牛视系统源码。抖音矩阵系统。llllllllll
  7. tmall.product.spec.get( 根据产品规格的Id号获取当个的规格信息 )
  8. linux 添加spi 驱动,Linux下SPI和IIC驱动免在设备树上添加设备信息的编写方法
  9. Oracle与MySQL的分页查询sql语句格式
  10. RHCSA学习第六天