Decoding time Limit:2 Seconds Memory limit:65536 KB
Chip and Dale have devised a encryption method to hide their (written) text messages. They first agree secretly on both numbers that would be used as the number of rows (R) and columns (C) in a matrix. The sender encodes an intermediate format using the following rules:
1.
The text is formed with uppercase letters [A-z] and <space>.
2.
Each text character is represented by decimal values as follows:
<space> = 0, A = 1, B = 2, C = 3, ..., Y = 5, Z = The sender enters the digit binary representation of the CHA Racters ' values in a spiral pattern along the matrix as shown below. The matrix is padded out with zeroes (0) to fill the matrix completely. For example, if the text to encode is: "ACM" and r=4 and c=4, the matrix would being filled in as follows:
A = 00001, C = 00011, M = 01101 (one extra 0) the bits in the matrix is then concatenated together in row major order and Sent to the receiver. The example above would be encoded as:0000110100101100
Input
The first line of input contains a single integer n, (1 <= N <=) which are the number of datasets that follow.
Each dataset consists of a single line of input containing R (1 <= R <=), a space, C (1 <= C <=), a SPAC E, and a string of binary digits that represents the contents of the Matrix (R * cbinary digits). The binary digits is in row major order.
Output
For each dataset, you should generate one line of output with the following values:the dataset number as a decimal intege R (start counting at one), a space, and the decoded text message. You should throw away any trailing spaces and/or partial characters found while decoding.
Sample Input
4
4 4 0000110100101100
5 2 0110000010
2 6 010000001001
5 5 0100001000011010110000010
Sample Output
1 ACM
2 HI
3 HI
4 HI HO
Test instructions: input r c Str. Insert the STR string into R*c by line. Then, in the order of the image, convert it into a string of characters. Then convert each five binary number to a-Z letter, five consecutive 0 is a space. To output letters or spaces. But the trailing space to be removed, and if no letters are all spaces, then it is not output.
#include <stdio.h> #include <string> #include <iostream> #include <map> #include <string.h
> Using namespace std;
int mp[30][30];
Char bol[1000];
int dir[4][2]={0,1,1,0,0,-1,-1,0};
int main () {int t;
String str;
int Cas=1;
int r,c;
scanf ("%d", &t);
while (t--) {scanf ("%d%d", &r,&c);
cin>>str;
int pos=0;
for (int i=0;i<r;i++) {for (int j=0;j<c;j++) {mp[i][j]=str[pos++]-' 0 ';
}} int x=0,y=0;
int xx,yy;
int ff=0;
int tem=0;
int bin=0;
int ling=0;
printf ("%d", cas++);
for (int i=0;i<r*c;i++) {tem*=2;
Tem+=mp[x][y];
Mp[x][y]=-1;
if ((i+1)%5==0) {if (tem==0) ling++;
else {for (int j=0;j<ling;j++) {printf ("");
} ling=0;
printf ("%c", ' A ' +tem-1);
tem=0;
}} Xx=x+dir[ff][0];
YY=Y+DIR[FF][1];
if (xx>=0&&xx<r&&yy>=0&&yy<c&&mp[xx][yy]!=-1) {int a=1; } ElSE {ff= (ff+1)%4;
XX=X+DIR[FF][0];
YY=Y+DIR[FF][1];
} x=xx;
Y=yy;
} puts ("");
} return 0; }