Sicily/1512. Encoding
2011-07-12 23:05 Min·zc 阅读(152) 评论(0) 编辑 收藏 举报对于数字一层一层来填充
如果有某一个边长是奇数,那么最后会剩下一行或者一列,需要特殊处理一下
1 #include <iostream>
2 #include <memory.h>3 #include <cstdio>
4 #include <string.h>
5 using namespace std;
6 int gid[22][22];
7 char w[100];
8 int ans[500];
9 int main()
10 {
11 int t;
12 cin>>t;
13 for(int j=1;j<=t;j++)
14 {
15 int r,l;
16 cin>>r>>l;
17 memset(ans,0,sizeof(ans));
18 memset(w,0,sizeof(w));
19 gets(w);
20 int len=strlen(w);
21 int k=0;
22 for(int i=1;i<len;i++)
23 {
24 int lt=0;
25 if(w[i]>='A'&&w[i]<='Z')
26 lt=w[i]-'A'+1;
27 for(int i=4;i>-1;i--)
28 {
29 ans[k+i]=lt%2;
30 lt/=2;
31 }
32 k+=5;
33 }
34 int px=0;
35 int py=0;
36 int pw=0;
37 int tr=r;
38 int tl=l;
39 while(r>0&&l>0)
40 {
41 if(r==1)
42 for(int i=0;i<l;i++)
43 gid[px][py++]=ans[pw++];
44 else if(l==1)
45 for(int i=0;i<r;i++)
46 gid[px++][py]=ans[pw++];
47 else
48 {
49 for(int i=0;i<(l-1);i++)
50 gid[px][py++]=ans[pw++];
51 for(int i=0;i<(r-1);i++)
52 gid[px++][py]=ans[pw++];
53 for(int i=0;i<(l-1);i++)
54 gid[px][py--]=ans[pw++];
55 for(int i=0;i<(r-1);i++)
56 gid[px--][py]=ans[pw++];
57 }
58 r-=2;
59 l-=2;
60 px++;
61 py++;
62
63 }
64 cout<<j<<" ";
65 for(int i=0;i<tr;i++)
66 {
67 for(int j=0;j<tl;j++)
68 cout<<gid[i][j];
69 }
70 cout<<endl;
71 }
72 }