标签:插入 else 逆波兰式 字符串 str har read blank 波兰式
如今有两种操作:1)在任何位置加入随意类型的字符(数字或者星号) 2)交换字符串中的随意两个字符
求:最少操作多少次,使得得到的串是一个合法的逆波兰式
const int maxn = 1100; char s[maxn]; int n; vector<int> v; int main() { int T; RI(T); while (T--) { v.clear(); RS(s); n = strlen(s); int num = 0, sig = 0; REP(i, n) { if (s[i] == ‘*‘) sig++; else { v.push_back(i); num++; } } int ans = 0; int preadd = 0; if (!sig) { ans = 0; } else { if (num < sig + 1) { preadd = sig + 1 - num; ans += preadd; } int sig_num = 0; for (int i = 0; i < n; i++) { if (s[i] == ‘*‘) { sig_num++; if (preadd < sig_num + 1) { int sz = v.size(); int id = v[sz - 1]; v.pop_back(); swap(s[i], s[id]); sig_num--; preadd++; ans++; } } else preadd++; } if (s[n - 1] != ‘*‘) ans++; } printf("%d\n", ans); } return 0; }
标签:插入 else 逆波兰式 字符串 str har read blank 波兰式
原文地址:http://www.cnblogs.com/jzssuanfa/p/6755039.html