Steganography
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 373 Accepted Submission(s): 140
Problem Description
In cryptography, the goal is to encrypt a message so that, even if the the message is intercepted, only the intended recipient can decrypt it. In steganography, which literally means "hidden writing", the goal is to hide
the fact that a message has even been sent. It has been in use since 440 BC. Historical methods of steganography include invisible inks and tatooing messages on messengers where they can't easily be seen. A modern method is to encode a message using the least-significant bits of the RGB color values of pixels in a digital image.
For this problem you will uncover messages hidden in plain text. The spaces within the text encode bits; an odd number of consecutive spaces encodes a 0 and an even number of consecutive spaces encodes a 1. The
four texts in the example input below (terminated by asterisks) encode the following bit strings: 11111, 000010001101101, 01, and 000100010100010011111. Each group of five consecutive bits represents a
binary number in the range 0–31, which is converted to a character according to the table below. If the last group contains fewer than five bits, it is padded on the right with 0's.
" " (space) 0
"A" – "Z" 1–26
"'" (apostrophe) 27
"," (comma) 28
"-" (hyphen) 29
"." (period) 30
"?" (question mark) 31
The first message is 11111 2 = 31 10 = "?". The second message is (00001, 00011, 01101) 2 = (1, 3, 13) 10 =
"ACM". The third message is 01000 2 = 8 10 = "H", where the underlined 0's are padding bits. The fourth message is (00010, 00101, 00010, 01111, 10000) 2 = (2, 5, 2, 15, 16) 10 = "BEBOP".
the fact that a message has even been sent. It has been in use since 440 BC. Historical methods of steganography include invisible inks and tatooing messages on messengers where they can't easily be seen. A modern method is to encode a message using the least-significant bits of the RGB color values of pixels in a digital image.
For this problem you will uncover messages hidden in plain text. The spaces within the text encode bits; an odd number of consecutive spaces encodes a 0 and an even number of consecutive spaces encodes a 1. The
four texts in the example input below (terminated by asterisks) encode the following bit strings: 11111, 000010001101101, 01, and 000100010100010011111. Each group of five consecutive bits represents a
binary number in the range 0–31, which is converted to a character according to the table below. If the last group contains fewer than five bits, it is padded on the right with 0's.
" " (space) 0
"A" – "Z" 1–26
"'" (apostrophe) 27
"," (comma) 28
"-" (hyphen) 29
"." (period) 30
"?" (question mark) 31
The first message is 11111 2 = 31 10 = "?". The second message is (00001, 00011, 01101) 2 = (1, 3, 13) 10 =
"ACM". The third message is 01000 2 = 8 10 = "H", where the underlined 0's are padding bits. The fourth message is (00010, 00101, 00010, 01111, 10000) 2 = (2, 5, 2, 15, 16) 10 = "BEBOP".
Input
The input consists of one or more texts. Each text contains one or more lines, each of length at most 80 characters, followed by a line containing only "*" (an asterisk) that signals the end of the text. A line containing only "#" signals the end of the input. In addition to spaces, text lines may contain any ASCII letters, digits, or punctuation, except for "*" and "#", which are used only as sentinels.
Output
For each input text, output the hidden message on a line by itself. Hidden messages will be 1–64 characters long.
Note: Input text lines and output message lines conform to all of the whitespace rules listed in item 7 of Notes to Teams except that there may be consecutive spaces within a line. There will be no spaces at the beginning or end of a line.
Note: Input text lines and output message lines conform to all of the whitespace rules listed in item 7 of Notes to Teams except that there may be consecutive spaces within a line. There will be no spaces at the beginning or end of a line.
Sample Input
Programmer, I would like to see a question mark. * Behold, there is more to me than you might think when you read me the first time. * Symbol for hydrogen? * A B C D E F G H I J K L M N O P Q R S T U V * #
Sample Output
? ACM H BEBOP/* 题目大意:给你一篇文章,文章中有空格,空格数为奇数时为'0',空格数为偶数为'1', 例如: Programmer, I would like to see a question mark. 它的序列就是"11111",再根据题目给的转化方式就是"?"; 思路:我的思路很简单,直接将序列找出来,然后每5位转化成十进制, 按题目给的转化方式输出,我刚刚开始讲“-”看成“_”wa了一次,真坑爹, 这什么眼神啊!!!! */ #include<iostream> using namespace std; int main(void) { char a[35]={" ABCDEFGHIJKLMNOPQRSTUVWXYZ',-.?"}; char s[102]; char b[350]; int k=0; memset(b,'0',sizeof(b)); while(gets(s)&&strcmp(s,"#")){ int len=strlen(s),i; if(!strcmp(s,"*")){ for(i=0;i<k;i+=5){ int sum=0; sum=(b[i]-'0')*16+(b[i+1]-'0')*8+(b[i+2]-'0')*4+(b[i+3]-'0')*2+(b[i+4]-'0'); cout<<a[sum]; } cout<<endl; memset(b,'0',sizeof(b)); k=0; } for(i=0;i<len;){ int count=0; while(s[i]==' '&&s[i]!='\0'){ count++; i++; } if(s[i]!='\0') i++; if(count!=0){ if(count%2==0) b[k++]='1'; else b[k++]='0'; } } } return 0; }