Artifact 053f4255282269322f67482123f7fd8d9c056208:
0000: 23 69 6e 63 6c 75 64 65 20 3c 76 65 63 74 6f 72 #include <vector
0010: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 >.#include <stri
0020: 6e 67 3e 0a 75 73 69 6e 67 20 6e 61 6d 65 73 70 ng>.using namesp
0030: 61 63 65 20 73 74 64 3b 0a 0a 73 74 72 75 63 74 ace std;..struct
0040: 20 42 69 6e 61 72 79 43 6f 64 65 0a 7b 0a 09 76 BinaryCode.{..v
0050: 65 63 74 6f 72 3c 73 74 72 69 6e 67 3e 20 64 65 ector<string> de
0060: 63 6f 64 65 28 20 73 74 72 69 6e 67 20 6d 65 73 code( string mes
0070: 73 61 67 65 20 29 0a 09 7b 0a 09 09 76 65 63 74 sage )..{...vect
0080: 6f 72 3c 73 74 72 69 6e 67 3e 20 61 6e 73 3b 0a or<string> ans;.
0090: 09 09 61 6e 73 2e 70 75 73 68 5f 62 61 63 6b 28 ..ans.push_back(
00a0: 20 64 65 63 6f 64 65 28 30 2c 20 6d 65 73 73 61 decode(0, messa
00b0: 67 65 29 20 29 3b 0a 09 09 61 6e 73 2e 70 75 73 ge) );...ans.pus
00c0: 68 5f 62 61 63 6b 28 20 64 65 63 6f 64 65 28 31 h_back( decode(1
00d0: 2c 20 6d 65 73 73 61 67 65 29 20 29 3b 0a 09 09 , message) );...
00e0: 72 65 74 75 72 6e 20 61 6e 73 3b 0a 09 7d 0a 0a return ans;..}..
00f0: 09 73 74 72 69 6e 67 20 64 65 63 6f 64 65 28 69 .string decode(i
0100: 6e 74 20 63 2c 20 73 74 72 69 6e 67 20 51 29 0a nt c, string Q).
0110: 09 7b 0a 09 09 73 74 72 69 6e 67 20 50 3b 20 50 .{...string P; P
0120: 20 2b 3d 20 63 68 61 72 28 27 30 27 2b 63 29 3b += char('0'+c);
0130: 0a 09 09 66 6f 72 28 69 6e 74 20 69 3d 30 3b 20 ...for(int i=0;
0140: 69 3c 51 2e 73 69 7a 65 28 29 2d 31 3b 20 2b 2b i<Q.size()-1; ++
0150: 69 29 0a 09 09 09 69 66 28 20 27 30 27 20 3c 3d i)....if( '0' <=
0160: 20 51 5b 69 5d 2d 63 20 26 26 20 51 5b 69 5d 2d Q[i]-c && Q[i]-
0170: 63 3c 3d 27 31 27 20 29 0a 09 09 09 09 50 20 2b c<='1' ).....P +
0180: 3d 20 63 68 61 72 28 51 5b 69 5d 2d 63 29 2c 0a = char(Q[i]-c),.
0190: 09 09 09 09 63 20 3d 20 50 5b 50 2e 73 69 7a 65 ....c = P[P.size
01a0: 28 29 2d 32 5d 2d 27 30 27 20 2b 20 50 5b 50 2e ()-2]-'0' + P[P.
01b0: 73 69 7a 65 28 29 2d 31 5d 2d 27 30 27 3b 0a 09 size()-1]-'0';..
01c0: 09 09 65 6c 73 65 0a 09 09 09 09 72 65 74 75 72 ..else.....retur
01d0: 6e 20 22 4e 4f 4e 45 22 3b 0a 09 09 72 65 74 75 n "NONE";...retu
01e0: 72 6e 20 63 3d 3d 51 5b 51 2e 73 69 7a 65 28 29 rn c==Q[Q.size()
01f0: 2d 31 5d 2d 27 30 27 20 3f 20 50 20 3a 20 22 4e -1]-'0' ? P : "N
0200: 4f 4e 45 22 3b 0a 09 7d 0a 7d 3b 0a ONE";..}.};.