1 条题解
-
0
#include<bits/stdc++.h> using namespace std; string s; // 存储输入的最终项链字符串 int main() { cin >> s; // 输入最终的项链字符串 int n = s.size(); // n:当前项链的长度 // [1] 倒推循环:当当前长度为偶数时,尝试拆分出更短的原始项链 while(n % 2 == 0) { string s_1 = "", s_2 = "", s_3 = ""; // 提取前半部分字符串 for(int i = 0; i < n / 2; i++) { s_1 += s[i]; } // 提取后半部分字符串 for(int i = n / 2; i < n; i++) { s_2 += s[i]; } // 生成后半部分的逆序字符串(模拟魔镜增加的反转部分) for(int i = n - 1; i >= n / 2; i--) { s_3 += s[i]; } // [2] 判断当前字符串是否可由更短字符串通过魔镜生成 // 条件1:前半 == 后半(对应魔镜操作中t的反转等于t的情况) // 条件2:前半 == 后半的逆序(对应魔镜操作t + reverse(t)) if(s_1 == s_2 || s_1 == s_3) { s = s_1; // 缩小为前半部分,作为新的当前项链 n = s.size(); // 更新当前项链长度 } else { break; // 无法继续拆分,退出循环 } } // [3] 输出倒推得到的最小初始项链长度 cout << n; return 0; }
- 1
信息
- ID
- 1211
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者