【桶排序】御坂美琴

链接:https://ac.nowcoder.com/acm/problem/21477
来源:牛客网

在这里插入图片描述
示例1
输入
4 1
5

输出
ham

备注:
1 ≤ n ≤ 10^18,
1 ≤ m ≤ 10^5,
1 ≤ ai ≤ 10^18。

解题思路:
按照题意dfs,如果当前堆的size出现过了就return,不往下继续搜了,因为已被搜过。
然后dfs完之后,所有分堆的过程中出现的size都被存下来了。
遍历看看有没有出现过。

代码块:

void dfs(ll n){
	if(mp[n]) return;
	mp[n]=1;
	dfs(n/2);dfs(n-n/2);
}
int main(){
	read(n);read(m);
	for(int i=0;i<m;i++){
		read(a[i]);sum+=a[i];
	}
	if(sum!=n){
		puts("ham");
	}else{
		dfs(n);
		for(int i=0;i<m;i++){
			if(!mp[a[i]]){
				puts("ham");
				return 0;
			}
		}
		puts("misaka");
	}
	return 0;
}
发布了16 篇原创文章 · 获赞 0 · 访问量 113

猜你喜欢

转载自blog.csdn.net/weixin_44745441/article/details/104402789
今日推荐