HDU-1274 展开字符串
生活随笔
收集整理的這篇文章主要介紹了
HDU-1274 展开字符串
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Problem Description 在紡織CAD系統開發過程中,經常會遇到紗線排列的問題。
該問題的描述是這樣的:常用紗線的品種一般不會超過25種,所以分別可以用小寫字母表示不同的紗線,例如:abc表示三根紗線的排列;重復可以用數字和括號表示,例如:2(abc)表示abcabc;1(a)=1a表示a;2ab表示aab;如果括號前面沒有表示重復的數字出現,則就可認為是1被省略了,如:cd(abc)=cd1(abc)=cdabc;這種表示方法非常簡單緊湊,也易于理解;但是計算機卻不能理解。為了使計算機接受,就必須將簡單緊湊的表達方式展開。某ACM隊接受了此項任務。現在你就是該ACM隊的一員,請你把這個程序編寫完成。
已知條件:輸入的簡單緊湊表達方式的長度不超過250個字符;括號前表示重復的數不超過1000;不會出現除了數字、括號、小寫字母以外的任何其他字符;不會出現括號不配對等錯誤的情況(錯誤處理已由ACM其他隊員完成了)。
該問題的描述是這樣的:常用紗線的品種一般不會超過25種,所以分別可以用小寫字母表示不同的紗線,例如:abc表示三根紗線的排列;重復可以用數字和括號表示,例如:2(abc)表示abcabc;1(a)=1a表示a;2ab表示aab;如果括號前面沒有表示重復的數字出現,則就可認為是1被省略了,如:cd(abc)=cd1(abc)=cdabc;這種表示方法非常簡單緊湊,也易于理解;但是計算機卻不能理解。為了使計算機接受,就必須將簡單緊湊的表達方式展開。某ACM隊接受了此項任務。現在你就是該ACM隊的一員,請你把這個程序編寫完成。
已知條件:輸入的簡單緊湊表達方式的長度不超過250個字符;括號前表示重復的數不超過1000;不會出現除了數字、括號、小寫字母以外的任何其他字符;不會出現括號不配對等錯誤的情況(錯誤處理已由ACM其他隊員完成了)。
?
Input 本題有多個測試數據組,第一行輸入的就是數據組數N,接著就是N行表達式,表達式是按照前面介紹的意義書寫的。?
Output 輸出時含有N行,每行對應一個輸入的表達式。?
Sample Input 2 1(1a2b1(ab)1c) 3(ab2(4ab))?
Sample Output abbabc abaaaabaaaababaaaabaaaababaaaabaaaab AC代碼,僅供參考 1 #include<iostream>2 #include<string>3 #include<stack>4 using namespace std;5 string process(string s)6 {7 string ans;8 stack<char> x;9 for(int i=0;i<s.size();++i) 10 { 11 if(s[i]>='0'&&s[i]<='9'||s[i]=='(')//是數字或左括號,直接入棧。 12 x.push(s[i]); 13 else if(s[i]>='a'&&s[i]<='z')//是字母。 14 { 15 if(x.top()<='9'&&x.top()>='0') //此時棧頂是數字。 16 { 17 int num=x.top()-'0'; 18 x.pop(); 19 while(num--) 20 x.push(s[i]); 21 } 22 else //此時棧頂是左括號或其他字母。 23 x.push(s[i]); 24 } 25 else if(s[i]==')')//是右括號。 26 { 27 string temp; 28 while(x.top()!='(') 29 { 30 temp.insert(temp.begin(),x.top()); 31 x.pop(); 32 } 33 x.pop(); //彈出左括號。 34 int num; 35 if(x.empty()||!(x.top()>='0'&&x.top()<='9'))//彈出左括號后棧為空,或者棧頂不是數字。 36 num=1; 37 else 38 { 39 num=x.top()-'0';//取出棧頂數字。 40 x.pop(); 41 } 42 while(num--) 43 { 44 for(int j=0;j<temp.size();++j) 45 x.push(temp[j]); 46 } 47 } 48 } 49 while(!x.empty()) 50 { 51 ans.insert(ans.begin(),x.top()); 52 x.pop(); 53 } 54 return ans; 55 } 56 int main() 57 { 58 int test; 59 string s; 60 cin>>test; 61 while(test--) 62 { 63 cin>>s; 64 cout<<process(s)<<endl; 65 } 66 return 0; 67 } View Code?
轉載于:https://www.cnblogs.com/Aa948766160/p/5749751.html
總結
以上是生活随笔為你收集整理的HDU-1274 展开字符串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: application.xml定时
- 下一篇: HDU 2722 Here We Go(