1.Link:http://poj.grids.cn/practice/2819/
2.content
- 總時間限制:
- 1000ms
- 內存限制:
- 65536kB
- 描述
- 加密一條信息需要三個整數碼, k1, k2 和 k3。字符[a-i] 組成一組, [j-r] 是第二組, 其它所有字符 ([s-z] 和下劃線)組成第三組。 在信息中屬於每組的字符將被循環地向左移動ki個位置。 每組中的字符只在自己組中的字符構成的串中移動。解密的過程就是每組中的字符在自己所在的組中循環地向右移動ki個位置。
例如對於信息 the_quick_brown_fox 以ki 分別為 2, 3 和 1藹進行加密。加密後變成 _icuo_bfnwhoq_kxert。下圖顯示了右旋解密的過程。
觀 察在組[a-i]中的字符,我們發現{i,c,b,f,h,e}出現在信息中的位置為{2,3,7,8,11,17}。當k1=2右旋一次後, 上述位置中的字符變成{h,e,i,c,b,f}。下表顯示了經過所有第一組字符旋轉得到的中間字符串,然後是所有第二組,第三組旋轉的中間字符串。在一 組中變換字符將不影響其它組中字符的位置。
所有輸入字符串中只包含小寫字母和下劃線(_)。所有字符串最多有償服務0個字符。ki 是1-100之間的整數。- 輸入
- 輸入包括一到多組數據。每個組前面一行包括三個整數 k1, k2 和 k3,後面是一行加密信息。輸入的最後一行是由三個0組成的。
- 輸出
- 對於每組加密數據,輸出它加密前的字符串。
- 樣例輸入
2 3 1 _icuo_bfnwhoq_kxert 1 1 1 bcalmkyzx 3 7 4 wcb_mxfep_dorul_eov_qtkrhe_ozany_dgtoh_u_eji 2 4 3 cjvdksaltbmu 0 0 0- 樣例輸出
the_quick_brown_fox abcklmxyz the_quick_brown_fox_jumped_over_the_lazy_dog ajsbktcludmv
3.code
#include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> MAX = map[] = ks[ sum = ( i = ; i < ; i++ cin>> sum += cin. cin>> length = ( i = ; i < ; i++ k = ( j = ; j < length; j++ ch = (ch == ) ch = ch - + + (i == (map[ch - ] - outstr[k++] = instr2[outstr[(( + ks[i]) % k)]] = instr[outstr[ ( j = ; j < k; j++ instr2[outstr[j]] = instr[outstr[(j - ks[i] + k*ks[i]) % instr2[length] = cout<<instr2<< sum = ( i = ; i < ; i++ cin>> sum += }
4.method
1. bad code
2.need the new array to save result
3.didn't say the string length,so I guess less than 10000