牛客Wannafly挑战赛29 A 御坂美琴 思维题
链接: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 御坂美琴 思维题相关推荐
- Wannafly挑战赛29 A御坂美琴(思维题+dfs)
题意: 一开始有n个糖果,每一次操作,你可以选择一堆x将其分成两堆,x//2,x-x//2 直到一堆的糖果数量=1就不能进行操作了. 然后现在给你m堆糖果a[1..m],问你能不从n个通过任意操作变成 ...
- Wannafly挑战赛29 御坂美琴(递归,模拟)
链接:https://ac.nowcoder.com/acm/contest/271/A 来源:牛客网 御坂美琴 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语 ...
- Wannafly挑战赛29-A御坂美琴 (dfs+map)
链接:https://ac.nowcoder.com/acm/contest/271/A 来源:牛客网 御坂美琴 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语 ...
- 解读御坂美琴みさか的菱形打印程序——谈如何学习算法
百度C语言吧主御坂美琴みさか的<C语言循环的小艺术>很久以前我就复制下来收藏了,不过一直没有研究.昨天Uval的AOAPC I: Beginning Algorithm Contests ...
- SCU-4396 麦野沉利与御坂美琴的战斗
4396: 麦野沉利与御坂美琴的战斗 Submit your solution Discuss this problem Best solutions 描述 麦姐辛苦建立的实验室被入侵 ...
- 御坂美琴(入门bfs+STL)
御坂美琴 misaka是呱太爷爷的小粉丝,呱太爷爷有一句话说的好:"一尺之棰,日取其半,万世不竭". misaka现在有 n 个呱太玩偶放在一堆,每一次操作,misaka会选择当前 ...
- 牛客Wannafly挑战赛10 A.小H和迷宫
链接:https://www.nowcoder.com/acm/contest/72/A 来源:牛客网 题目描述 小H陷入了一个迷宫中,迷宫里有一个可怕的怪兽,血量有N点,小H有三瓶魔法药水,分别可以 ...
- nowcoder (牛客)Wannafly挑战赛26 B: 冥土追魂 (思维)
链接:https://www.nowcoder.com/acm/contest/212/B 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语言104 ...
- 牛客小白月赛9: F. 暴力出奇迹(思维题)
链接:https://ac.nowcoder.com/acm/contest/275/F 来源:牛客网 题目描述 给定一个序列,寻找一对l,r,满足1 ≤ l ≤ r ≤ n 最大化的值 其中表示将a ...
最新文章
- 融合了距离矢量和链路状态两种路由选择协议的优点
- 计算机网络:大小端存储
- C++中const用法总结
- 后台原理_从浏览器如何进入路由器后台【详细介绍】
- Cloud for Customer里点了Opportunity ID的超链接到进入overview page,背后发生了什么事?
- 类型缩放Google map 地图类型
- oracle 11g重新安装配置,Oracle 11g数据库安装和卸载教程
- sqlserver中自定义函数+存储过程实现批量删除
- eclipse svn新增文件不显示在文件列表,只有修改文件可以提交!
- vs2015软件系统开源_特别版:2015年开源新闻
- Vue练习(修改为自定义事件)
- java ldap tls_ldap之tls 双向认证要我命
- css单行文本和多行文本溢出实现省略号显示
- 大写数字时钟屏保下载
- Docker安装及使用
- C语言教学模式 教学方法改革,C语言教学模式改革探究.docx
- 冈萨雷斯:数字图像处理(一):第一章绪论
- 解决GoLand上面出现的Couldn‘t copy unpacked SDK问题
- Android Studio 实现桌面小组件(APPWidget)
- JQuery实现表单验证(注册页面)
热门文章
- SQL中常见的几种连接方法-(内连接,左连接,右连接)
- 利用Web玩转树莓派
- Assembly Manifest
- oracle怎么自定义排序,ORACLE自定义顺序排序
- python教程-数据分析-matplotlib绘制折线图2 +总结(搭建网格,加上图例,修改图片的颜色和线条,脑图总结)
- 牛视系统源码。抖音矩阵系统。llllllllll
- tmall.product.spec.get( 根据产品规格的Id号获取当个的规格信息 )
- linux 添加spi 驱动,Linux下SPI和IIC驱动免在设备树上添加设备信息的编写方法
- Oracle与MySQL的分页查询sql语句格式
- RHCSA学习第六天