专栏文章

P12197 Hash Killer I 题解

P12197题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minghles
此快照首次捕获于
2025/12/02 02:01
3 个月前
此快照最后确认于
2025/12/02 02:01
3 个月前
查看原文
很有意思的一道题,考虑只用 ab 来卡他。当 base 为偶数时,因为是自然溢出即模 2642^{64},所以只要长度超过 6464 就可以完美卡掉这个代码。当 base 为奇数时,考虑使用 Thue Morse 序列。这个序列的定义是,第一个字符为 00 然后不断复制自己然后按位取反加到最后面,比如说这样:
CPP
0
01
0110
01101001
0110100110010110
当这样重复到一定次数,自然溢出就被卡掉了!
代码:
CPP
#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

int main()
{
	cout << (1 << 12) << " " << (1 << 11) << endl;
	for (int i = 1; i <= (1 << 12); i ++ ) putchar('a' + (__builtin_popcount(i) & 1));
	return 0;
}


其中 __builtin_popcount(i) & 1 便是一种生成这个序列第 ii 项的方法。

评论

0 条评论,欢迎与作者交流。

正在加载评论...