--- tags: 卓越盃程式競賽 --- # pA.Ccucomber's annoyance about safe.3 ### 題目敘述: - 怎麼辦!黃瓜學長已經連續三天三夜三小時三十三分鐘三十三秒睡不著覺了,因為他有一個非常嚴重的煩惱,這個煩惱有多嚴重呢?想像一下,如果你三天三夜三小時三十三分鐘三十三秒沒有辦法睡覺,那麼你會有多煩惱?而黃瓜學長的煩惱程度正是這個的三百三十三點三三倍,而且他的煩惱程度每過三分鐘就會多三倍。 - 我們假設他原先的煩惱程度為$x$,經過過$y$分鐘後的煩惱程度為$z$,根據數學的推導,我們可以知道$z$=$x\times 3^{\frac{y} {3}+1}$,$x,y,z\in \mathbb{N}$。那麼請問,如果我只給你$z$,並且告訴你$x+y=k$,其中$k$為任意數,你有辦法告訴我$x,y$是多少嗎? - 如果不會,那也沒關係,因為本題不是要考這個東西。我們先來談談黃瓜的煩惱來源,最主要是,他實在有太多*安珍與清姬*(kiyohime)的海報了,為了要保存這些無價之寶,他想要買一批保險箱來儲存。 - 然而,市面上的保險箱品質參差不齊,許多黑心商人的存在也打破了**一分錢一分貨**的真理,變成了**一分錢一分禍**,為了要避免陷入坑中,黃瓜學長利用他強大的資訊能力進入各大保險箱公司的網站中,統計了一份保險箱的品質列表。假設共有$N$個保險箱,他們的價格分別為$P_1,P_2,...,P_n$,品質分別為$Q_1,Q_2,...,Q_n$,在只有$S$元的情形下,他能夠買到的最高品質為何呢? - 先不要擔心,因為這一題是動態規劃的經典入門問題,我們還沒有上到動態規劃,所以也不會考你這個。這種經典問題對於黃瓜學長這樣的大大大大大電神而言簡直是小菜裡面的紅蘿蔔,不值一提。他僅僅花了不到零點三三秒就算出來了,並且手刀下單,買了$N$個保險箱。 - 接下來就是他最主要的煩惱了,為了避免將雞蛋放在同一個籃子裡面,他在每一個保險箱中放了一張*安珍與清姬*的海報,並且都設定了不同的密碼。但但但但是,這麼多的密碼他實在是記不太起來,因此他決定要用一種特別的方式記錄下這些密碼。 - $Step1$,定義`a=1,b=2,...,z=26` - $Step2$,利用加法的方式記錄下這些密碼。假設有一組的密碼提示為`a+b+c`,則根據他原先的定義,我們可以知道`a+b+c=1+2+3=6`,而六的代號是`f`,因此當他看到`a+b+c`時他就知道密碼為`f`了。 - $Step3$,如果密碼超過了$26$怎麼辦?沒有第$27$個英文字母阿。聰明絕頂的黃瓜學長僅僅花了不到零點零三秒就想到了解決方法:假設各個字母的總和為$27$,黃瓜學長會將他拆解成$26+1$,就會變成`z+a`,他將其記錄成$za$,該保險箱的密碼則為`za`。 - $Step4$假設密碼中有$m$個重複的字母($m\ge2$),他就會將數字$m$代換成相對應的英文字母,舉例而言,假設密碼為`aaabbdffggzzza`,等同於`3a2sd2f2g3za`,會變成`cabbdbfbgcza`,其中兩個`b`已經無法再重新組合,因此維持原狀。為了避免換算時太麻煩,黃瓜學長想要寫一個程式來進行轉換。但是他實在是太忙了,所以請你幫忙寫。 - 請注意,密碼提示只會出現小寫字母以及加法符號,密碼由小寫字母組成 - 密碼提示可能很長,請記得開`IO`加速 ### 輸入說明: - 本題為多筆測資輸入,每行為一個字串$a+b+...$ - 輸入直到**EOF**結束 ### 輸出說明: - 對於每一筆輸入,請輸出對應的密碼 ### Example Input: ``` a+b+c a+b+c+d+e+f+g+h a+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z ``` ### Example Output: ``` f zj pza ``` ### 配分說明 - a+b+c+...$\le26$ $\;\;\,$ $20\%$ - a+b+c+...$\le51$ $\;\;\,$ $30\%$ - a+b+c+...$\le$ $10^4 \;\;\;50\%$ ### code ``` cpp #include<bits/stdc++.h> #define ll long long using namespace std; vector<int> v,v1; inline void func(){ int cnt=1;v1.emplace_back(v[0]); for(int i=1;i<v.size();++i){ if(v[i]==v[i-1])++cnt; else{ if(cnt==1)v1.emplace_back(v[i]); else { v1.emplace_back(cnt),cnt=1; v1.emplace_back(v[i]); } } } if(cnt!=1){ // cout<<cnt<<'\n'; v1.emplace_back(cnt); } } int main(){ ios::sync_with_stdio(0),cin.tie(0); freopen("plus_00.in","r",stdin); freopen("plus_00.out","w",stdout); string s;int tmp=0; while(cin >>s){ tmp=0; v.clear(),v1.clear(); for(int i=0;i<s.size();++i){ if(s[i]!='+') tmp+=s[i]-'a'+1; } int ttmp=1; while(tmp>=26){ if(tmp%26)v.emplace_back(tmp%26); v.emplace_back(26); tmp/=26; } if(tmp>1)v.emplace_back(tmp); func(); for(int i=v1.size()-1;i>=0;--i){ cout<<(char)(v1[i]+'a'-1); } cout<<'\n'; } cerr<<"the end\n"; } ```