开始,你只有一个数字 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点数解答]
- [字节豆包] ssd_send(0x11,ff,03,98,81,03); //gip_1 ssd_send(0x11,01,01,00); ssd_send(0x11,02,01,00); ssd_send(0x11,03,01,53); ssd_send(0x11,04,01,13); ssd_send(0x11,05,01,00); ssd_send(0x11,06,01,04); ssd_send(0x11,07,01,00); ssd_send(0x11,08,01,00); ssd_send(0x11,09,01,22); ssd_send(0x11,0a,01,22); ssd_send(0x11,0b,01,00); ssd_send(0x11,0c,01,01); ssd_send(0x11,0d,01,00); ssd_send(0x11,0e,01,00); ssd_send(0x11,0f,01,25);(64点数解答 | 2024-11-06 16:52:19)358
- [字节豆包] ssd_send(0x11,ff,03,98,81,03); //gip_1 ssd_send(0x11,01,01,00); ssd_send(0x11,02,01,00); ssd_send(0x11,03,01,53); ssd_send(0x11,04,01,13); ssd_send(0x11,05,01,00); ssd_send(0x11,06,01,04); ssd_send(0x11,07,01,00); ssd_send(0x11,08,01,00); ssd_send(0x11,09,01,22); ssd_send(0x11,0a,01,22); ssd_send(0x11,0b,01,00); ssd_send(0x11,0c,01,01); ssd_send(0x11,0d,01,00); ssd_send(0x11,0e,01,00); ssd_send(0x11,0f,01,25); 转换为sunxi_lcd_dsi_dcs_write_1para(657点数解答 | 2025-10-15 16:21:12)103
- [阿里通义] 开始,你只有一个数字 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(1171点数解答 | 2026-01-08 17:17:21)20
- [字节豆包] 在一组数的编码中,若任意两个相邻(首尾也视为相邻)的代码只有一位二进制数不同,则称这种编码为格雷码。如四位格雷码: 0000 0001 0011 0010 0110 0111 0101 0100 1100 1101 1111 1110 1010 1011 1001 1000 本题需要你打印 位格雷码的字典序最小的解。(格雷码的解是不唯一的) 输入 读入一个整数 输出 打印 位格雷码的字典序最小的解。(格雷码的解是不唯一的) 样例输入 复制 2 样例输出 复制 00 01 11 10 来源/分类 位运算(361点数解答 | 2026-01-23 19:47:19)23
- [DeepSeek] 有n个灯( 1 ≤ 𝑛 ≤ 10 9 ),编号为1,2,……n,同时有n个人,依次对灯进行操作。 开始时,所有灯是关闭状态。 第1人操作:将所有灯打开 第2人操作:将2及2的倍数的灯,状态取反,即开状态变为关状态,其状态变为开状态。 第3人操作:将3及3倍数的灯状态取反。 …… 第i人操作:将i及i的倍数的灯状态取反(1≤i≤n),当所有操作完成之后,计算出所有开状态灯的编号之和。 例如:n=6, 0—关状态,1—开状态 开始 0 0 0 0 0 0 第1人操作之后:变成 1 1 1 1 1 1 第2人操作之后:变成 1 0 1 0 1 0 第3人操作之后:变成 1 0 0 0 1 1 第4人操作之后:变成 1 0 0 1 1 1 第5人操作之后:变成 1 0 0 1 0 1 第6人操作之后:变成 1 0 0 1 0 0 所有开状态灯编号之和为 1+4=5 输入 一个整数 𝑛 输出 一个整数,即操作后所有开状态的灯编号之和。 样例输入 复制 6 样例输出 复制 5 来源/分类 数论 筛法(271点数解答 | 2026-01-18 12:41:43)53
- [讯飞星火] 输入一个非负数和正整数n,3<=n<=9,生成一张输入数的乘方表。 输入格式: 在一行输入一个非负数和正整数n。 输出格式: 按照幂的递增顺序输出n+1行,计算结果保留2位小数。 输入样例1: 2.5 3 放大 全屏 复制 输出样例1: 2.5**0=1.00 2.5**1=2.50 2.5**2=6.25 2.5**3=15.62 收起 放大 全屏 复制 输入样例2: 4 6 放大 全屏 复制 输出样例2: 4.0**0=1.00 4.0**1=4.00 4.0**2=16.00 4.0**3=64.00 4.0**4=256.00 4.0**5=1024.00 4.0**6=4096.00 收起 放大 全屏 复制 (204点数解答 | 2025-10-28 23:00:11)74
- [字节豆包] 救援争先 内存限制: 256 Mb时间限制: 1000 ms 题目描述 某地出现了灾害,各地派出了 n n 只救援队。这些救援队是在同一天出发的,但出发时间不一样,路程也有长有短,所以达到时间有先有后。 给定每个队伍的出发时间,以及每只队伍的路程,请按照到达时间为这些队伍排序,如果多只队伍的到达时间正好相等,则出发时间靠前的队伍排在前列,如果出发时间仍然相等,则编号较小的队伍排在前列。 输入格式 第一行:单个整数 n n,表示救援队数量。 第二行到第 n + 1 n+1 行:在第 i + 1 i+1 行,有两个时间,表示第 i i 只救援队的出发时间和路程,数据格式均为 hh:mm: hh 表示小时,在 00 到 23 之间; mm 表示分钟,在 00 到 59 之间。 输出格式 共 n n 行,每行一个整数,按救援队到达的先后顺序输出它们的编号。 数据范围 1 ≤ n ≤ 1000 1≤n≤1000。 样例数据 输入: 3 19:00 01:00 15:00 05:00 15:00 05:00 输出: 2 3 1 说明: 3只队伍同时到达,2号和3号出发较早,所(693点数解答 | 2025-08-07 10:56:54)201
- [DeepSeek] 救援争先 内存限制: 256 Mb时间限制: 1000 ms 题目描述 某地出现了灾害,各地派出了 n n 只救援队。这些救援队是在同一天出发的,但出发时间不一样,路程也有长有短,所以达到时间有先有后。 给定每个队伍的出发时间,以及每只队伍的路程,请按照到达时间为这些队伍排序,如果多只队伍的到达时间正好相等,则出发时间靠前的队伍排在前列,如果出发时间仍然相等,则编号较小的队伍排在前列。 输入格式 第一行:单个整数 n n,表示救援队数量。 第二行到第 n + 1 n+1 行:在第 i + 1 i+1 行,有两个时间,表示第 i i 只救援队的出发时间和路程,数据格式均为 hh:mm: hh 表示小时,在 00 到 23 之间; mm 表示分钟,在 00 到 59 之间。 输出格式 共 n n 行,每行一个整数,按救援队到达的先后顺序输出它们的编号。 数据范围 1 ≤ n ≤ 1000 1≤n≤1000。 样例数据 输入: 3 19:00 01:00 15:00 05:00 15:00 05:00 输出: 2 3 1 说明: 3只队伍同时到达,2号和3号出发较早,所(432点数解答 | 2025-08-07 10:58:12)163
- [字节豆包] 救援争先 内存限制: 256 Mb时间限制: 1000 ms 题目描述 某地出现了灾害,各地派出了 n n 只救援队。这些救援队是在同一天出发的,但出发时间不一样,路程也有长有短,所以达到时间有先有后。 给定每个队伍的出发时间,以及每只队伍的路程,请按照到达时间为这些队伍排序,如果多只队伍的到达时间正好相等,则出发时间靠前的队伍排在前列,如果出发时间仍然相等,则编号较小的队伍排在前列。 输入格式 第一行:单个整数 n n,表示救援队数量。 第二行到第 n + 1 n+1 行:在第 i + 1 i+1 行,有两个时间,表示第 i i 只救援队的出发时间和路程,数据格式均为 hh:mm: hh 表示小时,在 00 到 23 之间; mm 表示分钟,在 00 到 59 之间。 输出格式 共 n n 行,每行一个整数,按救援队到达的先后顺序输出它们的编号。 数据范围 1 ≤ n ≤ 1000 1≤n≤1000。 样例数据 输入: 3 19:00 01:00 15:00 05:00 15:00 05:00 输出: 2 3 1 说明: 3只队伍同时到达,2号和3号出发较早,所(964点数解答 | 2025-08-11 16:27:09)218
- [字节豆包] 题目描述 计算两个矩阵的乘法。n×m 阶的矩阵 A 乘以 m×k 阶的矩阵 B 得到的矩阵 C 是 n×k 阶 的,且 C[i][j]=A[i][0]×B[0][j]+A[i][1]×B[1][j]+......+A[i][m−1]×B[m−1][j](C[i][j] 表示 C 矩阵中第 i 行第 j 列元素)。 输入格式 第一行为 n,m,k,表示 A 矩阵是 n 行 m列,B 矩阵是 m行 k列,n,m,k均小于 100。 然后先后输入 A 和 B 两个矩阵,A 矩阵 n 行 m 列,B 矩阵 m 行 k列,矩阵中每个元 素的绝对值不会大于 1000。 输出格式 输出矩阵 C,一共 n 行,每行 k个整数,整数之间以一个空格分开。 输入输出样例 输入 323 11 11 11 111 111 输出 222 222 222 用c++语言(381点数解答 | 2025-12-03 19:20:23)66
- [字节豆包] 3414 数字游戏 题目内容 全部提交 我的提交 题目统计 简单 时间限制: 1000ms 内存限制: 256mb 分数:100 oi排行榜得分:12(0.1*分数+2*难度) 字符串 第五讲(level1-2) 描述 小 k 同学向小 p 同学发送了一个长度为 8 的 01 字符串来玩数字游戏,小 p 同学想要知道字符串中究竟有多少个 1。 注意:01 字符串为每一个字符是 0 或者 1 的字符串,如“101”(不含双引号)为一个长度为 3 的 01 字符串。 输入描述 一个长度为 8 的 01 字符串 s。 输出描述 一个整数,即 01 字符串中字符 1 的个数。(106点数解答 | 2024-10-27 14:23:27)399
- [DeepSeek] 小核桃准备使用 a 数组,存储战力为1~10的守卫各有多少个。 即:a[1] 存储战斗力为1的守卫数量,a[2] 存储战斗力为 2 的守卫数量,... 依次类推,a[10] 存储战斗力为 10 的守卫数量。 请你编写程序,使用数组依次存储战力1~10的守卫数量,并按数组下标顺序(从小到大),依次输出每个守卫的战力。 样例1解释: 样例1 输入数据依次表示:战力为1 的守卫有 3 个,战力为3的守卫有 1 个,战力 为4 的守卫有 2 个,战力为 8 的守卫有 2 个,其余战力为2.5.6.7.9.10的守卫数量都为 0。 所以依次输出 三 个 1,一个 3,两个 4,两个 8。 输入: 十个整数,即1~10中每个数的个数。 输出: 一行若干个整数,为从小到大排好序的数,相邻数字之间用空格隔开。 c++(130点数解答 | 2026-01-17 14:11:22)30