P1928 外星密码题解
思路:
起初是想模拟,但是要处理很多层,并不好做,然后想到递归,但是如果整个串一起处理有些复杂,我在题解里看到一种巧妙的方法。我们每次碰到’[’,就说明遇到一个压缩串,然后这个‘[’之后必然会跟一个数字,我们可以单独把它提出来,再看后面那个串,最后把需要加的加上去就行了。
下面是三组测试用例:
AC[3AC[3FUN]]FUN
ACACFUNFUNFUNACFUNFUNFUNACFUNFUNFUNFUN
AC[3FUN]
ACFUNFUNFUN
AC[3TLE][4MLE]WA
ACTLETLETLEMLEMLEMLEMLEWA
注意
这里特别需要注意的是:递归函数的变量,要想放在全局区一定要慎重!在递归函数里声明变量,与将变量声明在全局区是不一样的,放在全局区里会MLE!
原因:你的函数在读入d后会进行递归,如果d作为全局变量,每次递归所改动的都是同一个d,这会导致后面的循环得到错误的次数。
#include <bits/stdc++.h>
using namespace std;
string expand() {
int d;
char x;
string s;
while (cin >> x) {
if (x == '[') {
cin >> d;
string t = expand();
while (d--) s += t;
} else if (x == ']')
return s;
else s += x;
}
return s;
}
int main() {
cout << expand();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2013-07-19 java连接mysql批量写入数据