1. 程式人生 > >外星密碼

外星密碼

題目描述

有了防護傘,並不能完全避免 2012 的災難。地球防衛小隊決定去求助外星種族的幫 助。經過很長時間的努力,小隊終於收到了外星生命的回信。但是外星人發過來的卻是一 串密碼。只有解開密碼,才能知道外星人給的準確回覆。解開密碼的第一道工序就是解壓 縮密碼,外星人對於連續的若干個相同的子串“X”會壓縮為“[DX]”的形式(D 是一個整 數且 1≤D≤99),比如說字串“CBCBCBCB”就壓縮為“[4CB]”或者“[2[2CB]]”,類 似於後面這種壓縮之後再壓縮的稱為二重壓縮。如果是“[2[2[2CB]]]”則是三重的。現 在我們給你外星人傳送的密碼,請你對其進行解壓縮。

 

 1
#include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cmath> 6 using namespace std; 7 const int maxn=2e7+7; 8 string s,tmp,ret; 9 int ptp,pos[maxn]; 10 int main(){ 11 cin>>s; 12 for(int i=0;i<s.length();i++){ 13 if
(s[i]=='[') pos[++ptp]=i; 14 } 15 for(int i=ptp;i>=1;i--){ 16 int p=pos[i],j,en=2;int num=0;tmp.clear();ret.clear(); 17 for(j=p+1;s[j]!=']';j++){ 18 if(s[j]>='0'&&s[j]<='9'){ 19 num=num*10+s[j]-'0'; 20 } 21 else{ 22 tmp+=s[j]; 23 } 24 en++;
25 } 26 while(num--) ret+=tmp; 27 s.erase(p,en); 28 s.insert(p,ret); 29 } 30 cout<<s<<endl; 31 return 0; 32 }