解题报告:一个模拟题,有两张表格,然后输入一个字符在第一章表格中的位置,让你找出这个字符在第二章表对应的位置。
我欧诺个的是暴力打表,输了两百多个数字,时间复杂度直接降到O(1),这题觉得比较坑的就是题目里面没有给出数据范围,一开始数组开小了,一直WA,搞得我一直以为是表打错了,找了半个小时,结果确定正确,才怀疑是数组开小了。这题数组至少要开到10的七次方。
1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 using namespace std; 5 6 int map[25][25] = { 7 {0,1,2,3,0,9,0,127,0,0,0,11,12,13,14,15}, 8 {16,17,18,19,0,0,8,0,24,25,0,0,28,29,30,31}, 9 {0,0,0,0,0,10,23,27,0,0,0,0,0,5,6,7}, 10 {0,0,22,0,0,0,0,4,0,0,0,0,20,21,0,26}, 11 {32,0,0,0,0,0,0,0,0,0,0,46,60,40,43,124}, 12 {38,0,0,0,0,0,0,0,0,0,33,36,42,41,59,0}, 13 {45,47,0,0,0,0,0,0,0,0,0,44,37,95,62,63}, 14 {0,0,0,0,0,0,0,0,0,96,58,35,64,39,61,34}, 15 {0,97,98,99,100,101,102,103,104,105,0,0,0,0,0,0}, 16 {0,106,107,108,109,110,111,112,113,114,0,0,0,0,0,0}, 17 {0,126,115,116,117,118,119,120,121,122,0,0,0,0,0,0}, 18 {94,0,0,0,0,0,0,0,0,0,91,93,0,0,0,0}, 19 {123,65,66,67,68,69,70,71,72,73,0,0,0,0,0,0}, 20 {125,74,75,76,77,78,79,80,81,82,0,0,0,0,0,0}, 21 {92,0,83,84,85,86,87,88,89,90,0,0,0,0,0,0}, 22 {48,49,50,51,52,53,54,55,56,57,0,0,0,0,0,0}, 23 }; 24 25 char temp[17] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; 26 char str[10000000]; 27 int main() 28 { 29 while(scanf("%s",str)!=EOF) 30 { 31 int len = strlen(str); 32 for(int i = 0;i<len;i+=2) { 33 int x,y; 34 if(str[i] >= '0' && str[i] <= '9') 35 x = str[i] - '0'; 36 else x = str[i] - 'A'+10; 37 if(str[i+1] >= '0' && str[i+1] <= '9') 38 y = str[i+1] -'0'; 39 else y = str[i+1] - 'A'+10; 40 int d = map[x][y]; 41 int m = d / 16; 42 int n = d % 16; 43 printf("%c%c",temp[m],temp[n]); 44 } 45 puts(""); 46 } 47 return 0; 48 }