首页 > 代码库 > 【HDOJ】1274 展开字符串
【HDOJ】1274 展开字符串
栈的应用,需要注意括号前可能没有数字的情况。
1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <iostream> 5 #include <stack> 6 #include <string> 7 using namespace std; 8 9 #define MAXN 30010 #define isdigit(c) (c>=‘0‘ && c<=‘9‘)11 #define islower(c) (c>=‘a‘ && c<=‘z‘)12 char str[MAXN];13 14 void solve() {15 string ans = "";16 stack<char> ops;17 stack<int> cnts;18 stack<string> strs;19 int cnt;20 int i = 0;21 22 while (str[i]) {23 bool found = false;24 cnt = 0;25 while (isdigit(str[i])) {26 cnt = 10*cnt + str[i]-‘0‘;27 ++i;28 found = true;29 }30 if (str[i] == ‘(‘) {31 if (!found)32 cnt = 1;33 ops.push(‘(‘);34 cnts.push(cnt);35 strs.push(ans);36 ans = "";37 } else if (str[i] == ‘)‘) {38 cnt = cnts.top();39 cnts.pop();40 ops.pop();41 int r = cnt;42 string bk = ans;43 ans = strs.top();44 strs.pop();45 while (r) {46 if (r & 1)47 ans += bk;48 bk += bk;49 r >>= 1;50 }51 } else {52 if (found) {53 string bk(cnt, str[i]);54 ans += bk;55 } else {56 ans += str[i];57 }58 }59 ++i;60 }61 62 cout <<ans<<endl;63 }64 65 int main() {66 int t;67 #ifndef ONLINE_JUDGE68 freopen("data.in", "r", stdin);69 freopen("data.out", "w", stdout);70 #endif71 scanf("%d", &t);72 while (t--) {73 scanf("%s", str);74 solve();75 }76 77 return 0;78 }
【HDOJ】1274 展开字符串
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。