题意:

一开始有n个糖果,每一次操作,你可以选择一堆x将其分成两堆,x//2,x-x//2

直到一堆的糖果数量=1就不能进行操作了。

然后现在给你m堆糖果a[1..m],问你能不从n个通过任意操作变成当前的局面

解析:

官方题解:

我们维护当前堆的集合和⽬标集合,每次拿出当前个数最多的⼀堆,和⽬标中个数最多的⼀堆⽐较。如果当前的较 少,那么就是不能。如果相等,就把选出的这两堆扔掉,否则就对当前个数最多的那⼀堆进⾏⼀次操作。 如果操作次数⼤于 或者操作完之后当前堆的集合或⽬标集合还有剩余就是不能,否则就是能。

做的时候大佬发现只要a里面的数都可以通过n变换到,并且a[]的和=sum,那么就是可以的

#include <cstdio>
#include <cstring>
#include<algorithm>
#include<set>
using namespace std;typedef long long ll;
const int MAXN = 1e5+100;
ll a[MAXN];
ll c[200];
int lnum[2];
ll lval[2];
int vis[2];
set<int> mm;int main()
{ll n;int m;scanf("%lld%d",&n,&m);int maxx=0;int cnt=0;c[cnt++]=-n;ll yu=n;mm.insert(yu);while(n){c[cnt++]=-n/2;n/=2;mm.insert(n);mm.insert(n+1);}mm.insert(2);mm.insert(1);//sort(c,c+cnt);ll sum=0;int flag=1;for(int i=1;i<=m;i++){scanf("%lld",&a[i]);sum+=a[i];if(mm.count(a[i])==0){flag=0;}}if(!flag||sum!=yu){printf("ham\n");}else{printf("misaka\n");}}

本来想在题解里面找证明的,但是发现这个直接暴力就可以做。

用dfs遍历这个操作得到的树,如果在遍历这棵树的时候,可以把a[]里面的数对应到每一个树的结点上,那么就是可以的

那么复杂度最多只会遍历树上的m条链,并且一旦你通过一条链遍历到叶子结点,那么肯定是不行的,这条链上没有点、

可以对应a[]中的数

dfs复杂度为O(m*logn)

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <iostream>
#include <map>
#define pb push_back
#define mk make_pair
typedef long long ll;
using namespace std;
typedef pair<int,int> PII;
const int MAXN = 1e5+10;
const ll MOD = 998244353;
ll n,m;
map<ll,int> mp;int f;void dfs(ll x)
{if(!f) return ;if(mp[x]){mp[x]--;return ;}if(x==1) {f=0;return;}ll tmp=x/2;dfs(tmp);dfs(x-tmp);
}int main()
{cin>>n>>m;ll v,sum=0;for(int i=1;i<=m;i++)cin>>v,mp[v]++,sum+=v;f=1;if(sum!=n) f=0;if(f) dfs(n);if(f){for(auto v:mp){if(v.second>0){f=0;break;}}}if(!f) cout<<"ham"<<endl;else cout<<"misaka"<<endl;}

Wannafly挑战赛29 A御坂美琴(思维题+dfs)相关推荐

  1. 牛客Wannafly挑战赛29 A 御坂美琴 思维题

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

  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挑战赛29A御坂美琴

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

  8. 牛客21477 御坂美琴

    链接 点击跳转 题解 这个题是个思维题 首先如果所要求的数字之和不等于n,就直接判为无解.这一点很重要,可以保证后面算法的复杂度. 然后不停的把最大的分成两半,随时把符合条件的堆删掉,如果要求的堆的最 ...

  9. 牛客NC21477 御坂美琴

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

最新文章

  1. 谷歌论文:使用深度强化学习的芯片布局
  2. linux 0.11根文件系统,linux内核与根文件系统之间的关联的理解
  3. java not found_java_home not found in your enviroment 问题解决方法
  4. 实验报告类与对象水井问题_物业设施设备巡检检查对象、周期和频次
  5. 自定义控件_水平滑动的View 自定义属性
  6. java语言基础教程课后答案,积累总结
  7. 开源云平台 CloudStack 4.1.0 安装详解 - 3、vCenter
  8. linux java mysql 乱码_Linux下MySQL的字符集乱码问题总结
  9. 硬件创业者们,如何避免掉到供应链的大坑里爬不出来
  10. Unity3D基础38:角色控制器组件
  11. 网上图书商城项目学习笔记-034订单管理
  12. 请求的资源不可用html,“HTTP状态404请求的资源不可用”
  13. 用循环队列模拟滑动窗口动态求最值及峰峰值
  14. matlab2017b安装之后点桌面图标黑框闪退
  15. Windows-dos命令
  16. SAR舰船数据集----SSDD
  17. java数组总结及键盘输入方法
  18. Linux Glibc幽灵漏洞紧急修补方案
  19. 实验四:201571030116/201571030106《小学四则运算练习软件需求说明》结对项目报告...
  20. 新时达工业机器人技术储备_建成年产万台机器人工厂后, 新时达在想些什么?...

热门文章

  1. 深入理解Callback函数
  2. 2020年Python最新面试题(五):数据库相关(一)
  3. 华为修改优先级命令_华为交换机STP 根ID优先级设置
  4. 荣耀es什么时候支持鸿蒙,华为手机明年将全面支持鸿蒙!
  5. mysql报错2_mysql 启动报错--发现系统错误2,系统找不到指定的文件。?报错-问答-阿里云开发者社区-阿里云...
  6. java web实现锁屏操作_javaWeb锁屏的简单实现
  7. HttpClient内外访问外网,添加代理(二)
  8. html 判断页面加载完成,Javascript判断页面是否加载完成
  9. 七、完善:飞机生命值和子弹杀伤力(雷霆战机)
  10. 万字逐行解析与实现Transformer,并进行德译英实战(一)