HDU 4690 EBCDIC 2013 Multi-University Training Contest 9

解题报告:一个模拟题,有两张表格,然后输入一个字符在第一章表格中的位置,让你找出这个字符在第二章表对应的位置。

我欧诺个的是暴力打表,输了两百多个数字,时间复杂度直接降到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 }
View Code
原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3270863.html