酷代码 AI
菜单

开始,你只有一个数字 0 或者 1,接下来,你需要将这个数字扩张 n 轮,最后变成一个 2^n×2^n 的矩阵,每轮的扩张规则如下: 原矩阵中的每个 0 将变成 00 01 原矩阵中的每个 1 将变成 11 10 输入 两个整数分别表示 n 与 s 输出 2^n×2^n 的矩阵表示答案,中间不含空格 样例输入 复制 2 0 样例输出 复制 0000 0101 0011 0110 提示 s=0 或 1 0≤n≤11

你给的问题是一个递归矩阵生成问题。 --- 🔍 题意解析 - 初始时,你有一个数字 `s`(0 或 1) - 进行 `n` 轮扩张 - 每轮中: - `0` 变成: ``` 00 01 ``` - `1` 变成: ``` 11 10 ``` - 最终得到一个 $2^n \times 2^n$ 的字符矩阵 - 输出这个矩阵,每行连续输出,不加空格 --- ✅ 样例分析:`n=2, s=0` 初始:`0` 第1轮: ``` 0 → 00 01 ``` 当前矩阵: ``` 00 01 ``` 第2轮:对每个元素应用规则 - 左上 `0` → ``` 00 01 ``` - 右上 `0` → ``` 00 01 ``` - 左下 `0` → ``` 00 01 ``` - 右下 `1` → ``` 11 10 ``` 组合起来: ``` [0→] [0→] => 00 00 => 0000 01 01 0101 [0→] [1→] => 00 11 => 0011 01 10 0110 ``` 最终输出: ``` 0000 0101 0011 0110 ``` ✔️ 匹配样例输出 --- 🧠 解法思路:递归构造 or 迭代扩张 我们可以用 迭代方式,从一个 `1×1` 矩阵开始,每轮扩张为原来的 2 倍大小。 --- ✅ C++ 实现代码 ```cpp #include <iostream> #include <vector> #include <string> using namespace std; int main() { int n, s; cin >> n >> s; // 初始矩阵:1x1 vector<string> mat(1, string(1, '0' + s)); // 扩张 n 轮 for (int round = 0; round < n; ++round) { int size = mat.size(); vector<string> newMat(2 * size, string(2 * size, '0')); for (int i = 0; i < size; ++i) { for (int j = 0; j < size; ++j) { char c = mat[i][j]; if (c == '0') { newMat[2*i][2*j] = '0'; newMat[2*i][2*j+1] = '0'; newMat[2*i+1][2*j] = '0'; newMat[2*i+1][2*j+1] = '1'; } else { // c == '1' newMat[2*i][2*j] = '1'; newMat[2*i][2*j+1] = '1'; newMat[2*i+1][2*j] = '1'; newMat[2*i+1][2*j+1] = '0'; } } } mat = move(newMat); } // 输出结果 for (const string& row : mat) { cout << row << endl; } return 0; } ``` --- 📌 关键点说明 | 特性 | 说明 | |------|------| | `move(newMat)` | 提高性能,避免复制大矩阵 | | `vector<string>` | 表示字符矩阵,方便操作 | | 每轮翻倍 | 尺寸从 $1 \to 2 \to 4 \to \dots \to 2^n$ | | 字符处理 | 使用 `'0' + s` 转为字符,按字符构造 | --- 🧪 测试样例 输入: ``` 2 0 ``` 输出: ``` 0000 0101 0011 0110 ``` ✅ 正确 --- ⚙️ 复杂度 - 时间:$O(4^n)$,因为最终有 $2^n \times 2^n = 4^n$ 个字符 - 空间:$O(4^n)$ - $n \leq 11$ → $2^{11} = 2048$,总字符数约 400 万,可接受 --- ✅ 这道题本质是分形构造,类似“克罗内克积”或“分形展开”。 你只需记住: > 每个 `0` 和 `1` 按固定模板替换成 2×2 块,迭代 `n` 次即可。 提交上述代码,可通过所有测试点。 [2026-01-08 17:17:21 | AI问答 | 1171点数解答]

服务商
相关提问
发财导航,免费问AI
实用工具查看更多