题目描述:

misaka是呱太爷爷的小粉丝,呱太爷爷有一句话说的好:"一尺之棰,日取其半,万世不竭"。
misaka现在有 n 个呱太玩偶放在一堆,每一次操作,misaka会选择当前个数 > 1 的一堆呱太玩偶。并将这一堆呱太玩偶分成 ⌊x/2⌋和 x−⌊x/2⌋ 两堆,x 是当前这一堆玩偶的个数。现在 misaka 想将玩偶分成 m 堆,其中第 i 堆呱太玩偶的个数是 ai ,你需要告诉 misaka 是否能通过若干次操作将玩偶分成指定的这 m 堆。如果可以输出 misaka ,否则输出 ham 。

思路:

先检验输入的数组之和是否等于n,如果等于就对n进行dfs,不断分成⌊x/2⌋和 x−⌊x/2⌋ 两堆,检验是否可以和数组中的数匹配。为了方便查找,数组中的数可以用map储存。

思路不难,写题解是因为看别人代码的时候发现很多人AC的算法是错误的,但是题目的样例并没有检测出来。

/* 至于看别人代码是因为我个菜狗一开始啥思路没有这件事暂且略过不提  */

错误的思路如下:先把n不断二分,所有能拆出的数字都记录下来。如果每一个输入的数字都能够从n中拆分出来,并且它们之和等于n,输出misaka。

//错误思路
#include <iostream>
#include <map>
using namespace std;map<long long,long long> a;void dfs(long long x)
{if(a[x]==1) return;a[x]=1;dfs(x/2);dfs(x-x/2);
}int main()
{int m;long long n;scanf("%lld%d",&n,&m);dfs(n);int flag=0;long long t,sum=0;for(int i=0;i<m;i++){scanf("%lld",&t);sum+=t;if(!a[t]) flag=1;}if(flag||sum!=n) printf("ham");else printf("misaka");return 0;
}

直觉上很有漏洞,这也太粗暴。

用样例进行检验。

14 4
1 3 3 7

这组样例明显是错误的,应该输出ham,但是按照上面的思路就会输出misaka。

/* 至于看着这个错误的思路理解了半小时为什么能够AC这件事也略过不提 */

正确代码如下:

//正确思路
#include<bits/stdc++.h>
using namespace std;map<long long,int>cnt;
void dfs(long long n)
{if(!n)return ;if(cnt[n]){--cnt[n];return ;}if(n==1){puts("ham");exit(0);}dfs(n/2);dfs(n-n/2);
}
int main()
{long long n;int m;cin>>n>>m;long long sum=n;while(m--){long long x;scanf("%lld",&x);++cnt[x];sum-=x;if(sum<0){puts("ham");exit(0);}}if(sum){puts("ham");exit(0);}dfs(n);puts("misaka");
}

牛客NC21477 御坂美琴相关推荐

  1. 牛客21477 御坂美琴

    链接 点击跳转 题解 这个题是个思维题 首先如果所要求的数字之和不等于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挑战赛29 A 御坂美琴 思维题

    链接:https://ac.nowcoder.com/acm/contest/271/A 来源:牛客网 题目描述 misaka是呱太爷爷的小粉丝,呱太爷爷有一句话说的好:"一尺之棰,日取其半 ...

  8. 11.22A 御坂美琴-优先队列模拟

    链接:https://ac.nowcoder.com/acm/contest/271/A 来源:牛客网 题目描述 misaka是呱太爷爷的小粉丝,呱太爷爷有一句话说的好:"一尺之棰,日取其半 ...

  9. Wannafly挑战赛29A御坂美琴

    传送门 这套题很有意思2333 蠢了--首先先判总共加起来等不等于\(n\),不是的话就不行 然后dfs记录\(n\)不断分下去能分成哪些数,用map记录一下,判断是否所有数都能被分出来就是了 //m ...

最新文章

  1. 数据结构_Search
  2. 简约代码表白_JS实现520 表白简单代码
  3. PyODPS学习:使用DataFrame实现SQL的IF判断
  4. 公积金买房有什么好处?
  5. java中使用什么来做错误处理_JAVA基础--如何通过异常处理错误
  6. java 虚拟内存不够,java虚拟内存不足
  7. 英特尔面向网络及边缘推出至强D系列处理器
  8. python应用:爬虫框架Scrapy系统学习第三篇——初识scrapy
  9. python免费教程视频-28岁想从零开始自学python,有哪些靠谱免费的视频?
  10. 将String 转换为byte[]数组
  11. [转]installshield for VC++6 如何使用
  12. 网络基础知识(黑马教程笔记)-7-异步编程和Promise
  13. error LNK2005: _sprintf 已经在 MSVCRTD.lib(MSVCR90D.dll) 中定义
  14. springboot整合quartz定时任务
  15. local variable xxx referenced before assignment
  16. 回应:“MJ广东开校之我见”
  17. 解决Jupyter notebook报错:AssertionError: wrong color format ‘var(--jp-mirror-editor-variable-color)‘
  18. 偏差,残差,方差在机器学习中的区别
  19. Windows下动态内存分配方式http://whx.tzgt.gov.cn/newOperate/html/7/71/711/3938.html
  20. 读书笔记:汇编语言 第三版 王爽 清华出版社 前言 章一 章二 章三 章四 章五

热门文章

  1. 安卓使用Glide加载图片使宽度充满手机屏幕,高度随宽度等比缩放
  2. WebGL学习笔记(4)
  3. jquery手风琴折叠菜单
  4. x86汇编知识以及应用详解
  5. Python中getopt函数用法
  6. 树莓派4B安装散热片和小风扇以及亚克力外壳安装
  7. 水军网严正声明:我们不是网络打手,可解决就业问题
  8. London Tube伦敦地铁全面图下载
  9. C#基础知识 Day28 数据库高阶 存储过程
  10. LaTeX学习经验分享