代码改变世界

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 }