In the fourth chapter of the algorithm competition primer, the topic of function and recursion, the application of custom function and binary related content are investigated. (Individuals think that the study of binary related knowledge accounted for more).
Test instructions: To a knitting dock and a string of code (code can be wrapped), the encoding header according to the following rules corresponding encoding {consider the following 01 strings: 0,00,01,10,000,001,010,101,110,0000,0001 ... first is a string of length 1, then a string of length two And so on And each length of the number from 0 to (1<<n)-1 (nth) arrangement, that is, the title does not include all 1 strings.
The encoded text consists of several subsections, the first three digits of each bar representing the length of each encoding in the subsection (example 010 for the encoding length of 2), followed by the encoding of each character, ending with a full 1 bar. Example the first subsection: 00101.
Your task is to write a decoding program that converts the input encoding into a sentence output corresponding to the characters in the encoded header.
Another: Putchar (character ASCII) output character.
Code:
#include <bits/stdc++.h>using namespacestd;intcode[8][1<<8];intReadchar () {//reading encoded strings across rows while(1){ intCh=GetChar (); if(ch!='\ r'&&ch!='\ n') returnch; }}intReadintintLen) {//reading the encoded string and converting it to a decimal number intv=0; while(len--) v=v*2+readchar ()-'0'; returnv;}intReadcode () {//read the encoder header and correspond to the code arraymemset (Code,0,sizeof(code)); code[1][0]=Readchar (); for(intlen=2; len<=7; len++) for(intI=0;i< (1<<len)-1; i++) {//not every bit is 1, (1<<len)-1. Note the position of parentheses. intCh=GetChar (); if(ch==eof)return 0; if(ch=='\ n'|| ch=='\ r')return 1; Code[len][i]=ch; } return 1;//read to EOF return 0, end input, otherwise return 1 continue to enter the encoding. }intMain () { while(Readcode ()) { while(1){ intLen=readint (3); if(len==0) Break; while(1){ intv=Readint (len); if(v== (1<<len)-1) Break; Putchar (Code[len][v]); }} putchar ('\ n'); } return 0;}
UVA213 Information decoding