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
1 #include <iostream> 2 #include <cstdlib> 3 #include <cstdio> 4 #include <cstring> 5 using namespace std; 6 const int MAX = 100000; 7 char map[28] = "000000000111111111222222222"; 8 int main() 9 { 10 //freopen("F:\\input.txt","r",stdin); 11 12 int ks[3]; 13 char instr[MAX],instr2[MAX]; 14 int outstr[MAX]; 15 16 int sum = 0; 17 for(int i = 0; i < 3; i++) 18 { 19 cin>>ks[i]; 20 sum += ks[i]; 21 } 22 23 while(sum) 24 { 25 26 cin.get(); 27 cin>>instr; 28 29 char ch; 30 int length = strlen(instr); 31 for(int i = 0; i < 3; i++) 32 { 33 34 int k = 0; 35 for(int j = 0; j < length; j++) 36 { 37 ch = instr[j]; 38 if(ch == '_') ch = ch - '_' + 'z' + 1; 39 40 if(i == (map[ch - 'a'] - '0')) 41 { 42 outstr[k++] = j; 43 } 44 } 45 46 47 if(k) 48 { 49 instr2[outstr[((0 + ks[i]) % k)]] = instr[outstr[0]]; 50 for(int j = 0; j < k; j++) 51 { 52 instr2[outstr[j]] = instr[outstr[(j - ks[i] + k*ks[i]) % k]]; 53 } 54 } 55 instr2[length] = '\0'; 56 } 57 58 59 cout<<instr2<<endl; 60 61 sum = 0; 62 for(int i = 0; i < 3; i++) 63 { 64 cin>>ks[i]; 65 sum += ks[i]; 66 } 67 } 68 69 70 return 0; 71 }
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