题解 | #小沙的hello world!#

需要一点点灵性。把第二个样例直接存到代码里再操作。顺便开了颗字典树。

#include <cstdio>
#include <cstring>
using namespace std;
const int N = 5e6 + 1;
const char cha[70] = "08 3+2&/DK(:)|14.5{,*-=<H$6FE]B@IL?GTQOXUJY\";M}N~WRPZ9#S`!V'^_7%\\[A>C";
const char s[5][346] = {
"#*********#####*****##*##*****#***####*#****#*#*###**#########**###*####*#####*######*****#***######*#*#*############*##*###*#***#***************##*******#*****#***#*#####***#*********************###**###*###*#*###*#*#*######*###*#***#*###*#*###*#*#**********#**********##*#*#****##*####*##*###*##**###*#######*******##***###***####*####*##*****",
"#*##**###*#########*##*##*###*#*#*###**#*###***###**#####*#####**##*###**####**######*#####*#########***######*****#*###*###**#*#**####*####*########**###******##*##*#######*#*######*##*###**###*#*#*#*###*###*##*#*#*#*####*##**#**###*#**##**#*#**#*#**###**###*###*#*###*******#######*###*##*###*###*##*#*##########***#*##**##*#####*#*####*#*####",
"#*##******#####**********###**##*#*##*##*###**####*#############*##*####*###*#*######*******##########*##*****#####*####*****#***#***************####*****#**#**##*##*######**#*#***##*##*#*#**###*##*##*###*###*###*############**#**###***#*#*###*#*#*#*****#****###*##*****#*#*##***########*###*#*####################*##*####**#*#####***#####**####",
"#*##**###*#########*##*####**##*#*##**##*###***###**#####*#####**##*####*##*****#########*#*######*##***######*****#*###*###*##*#**###**####*########**###******##*##*#########*#*#*##*##*##***###*#*#*#*###*#*#*###*#########*##*#*#*###*#*##**#####*#*#**#*##*#####*#######******####*###########*#*####################*#*#**###***####*###*###*#*####",
"#*********#####*****##*##*****#***##*###****#*#*###**#########**###*##*****###*###*##*****#***###**#*#*#*############*##*###*#***#******####*****##*******#*****#***#*****##*##*****##*##***********###******#***###*#########*##*#*#*#***#*###*######*#*#*##*#*####***********#*###***########*####*############*****####**##**####***###*###*##*##*****"
};

int tr[N][2], id;

char input[5][N];

int main(){
	for(int i = 0; i < 69; i++){
		int p = 0;
		for(int j = 0; j < 5; j++)
			for(int k = 0; k < 5; k++){
				p = tr[p][s[j][i * 5 + k] == '*'] ? tr[p][s[j][i * 5 + k] == '*'] : tr[p][s[j][i * 5 + k] == '*'] = ++id;
			}
		tr[p][0] = cha[i];
	}
	for(int i = 0; i < 5; i++)
		scanf("%s", input[i]);
	int n = strlen(input[0]) / 5;
	for(int i = 0; i < n; i++){
		int p = 0;
		for(int j = 0; j < 5; j++)
			for(int k = 0; k < 5; k++)
				p = tr[p][input[j][i * 5 + k] == '*'];
		putchar(tr[p][0]);
	}
	return 0;
}