/*======================================================================== 25:螺旋加密 总时间限制: 1000ms 内存限制: 65536kB 描述 Chip和Dale发明了一种文本信息加密技术。他们事先秘密约定好矩阵的行数和列数。 接着,将字符按如下方式编码: 1. 所有文本只包含大写字母和空格。 2. 每个字符均赋予一个数值:空格=0,A=1,B=2,……,Y=25,Z=26。 从左上角开始,按顺时针旋转的方式,将每个字符对应数值的5位二进制数依次填入矩阵。 最后用0将矩阵补充完整。例如,对于信息“ACM”,行列数均为4时,矩阵将被填充为: 0000 1101 0010 1100 其中,A=00001,C=00011,M=01101. 矩阵中的数字按行连起来形成数字串,完成加密。 例子中的信息最终会被加密为:0000110100101100。 输入 一行。首先是两个整数R(1≤R≤20)和C(1≤C≤20),表示行数和列数。 之后是一个只包含大写字母和空格的字符串。字符串的长度≤(R*C)/5。 R和C之间以及C和字符串之间均用单个空格隔开。 输出 一行,为加密后的二进制串。注意你可能需要用0将矩阵补充完整。 样例输入 4 4 ACM 样例输出 0000110100101100 来源 Greater NY 2007 ==========================================================================*/
1 #include<stdio.h> 2 #include<string.h> 3 4 #define localTest 1 5 #define maxR 23 6 #define maxC 23 7 8 int main(int argc, char *argv[]) 9 { 10 int R,C,i,j,t,k; 11 char str[100]; 12 char a[maxR][maxC],dic[27][6],dic2[505]=""; 13 int len; 14 int R2,C2; 15 16 #ifdef localTest 17 freopen("25.in","r",stdin); 18 #endif 19 20 scanf("%d %d ",&R,&C); //注意这里的输入方式 21 gets(str); 22 //printf("%d %d%s ",R,C,str); 23 24 //初始化a[][]数组 25 for(i=0;i<maxR;i++) 26 for(j=0;j<maxC;j++) 27 { a[i][j]='0'; } 28 29 //提前准备好二进制数据和字母的映射表 30 for(i=0;i<27;i++) 31 { 32 t=i; 33 for(j=4;j>=0;j--) 34 { 35 dic[i][j]=t%2+'0'; 36 t=t/2; 37 } 38 dic[i][5]='