题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3711
分析:直接暴力
1 #include <cstdio> 2 #include <cstring> 3 4 const int MAXN = 100 + 10; 5 6 struct Set 7 { 8 int num; 9 char bi[25]; 10 }; 11 12 char str[25]; 13 int m, n; 14 char temp[25]; 15 Set S[MAXN]; 16 17 void Change( int num ) 18 { 19 memset( temp, '0', sizeof( temp ) ); 20 21 int a = num; 22 int r, k = 24; 23 24 while( a != 0 ) 25 { 26 r = a % 2; 27 temp[k--] = r + '0'; 28 a = a / 2; 29 } 30 31 // puts(temp); 32 return; 33 } 34 35 int CountDiff( char *a, char *b ) 36 { 37 int cnt = 0; 38 for ( int i = 0; i < 25; i++ ) 39 if ( a[i] != b[i] ) cnt++; 40 return cnt; 41 } 42 43 int FindMin() 44 { 45 int ans; 46 int min = 0x7fffffff, min_i, min_num; 47 48 for ( int i = 0; i < m; i++ ) 49 { 50 ans = CountDiff( S[i].bi, temp ); 51 if ( ans < min ) 52 { 53 min = ans; 54 min_i = i; 55 min_num = S[i].num; 56 } 57 else if ( ans == min ) 58 { 59 if ( S[i].num < min_num ) 60 { 61 min = ans; 62 min_i = i; 63 min_num = S[i].num; 64 } 65 } 66 } 67 68 return min_i; 69 } 70 71 int main() 72 { 73 int T; 74 scanf( "%d", &T ); 75 while ( T-- ) 76 { 77 scanf( "%d%d", &m, &n ); 78 for ( int i = 0; i < m; i++ ) 79 { 80 scanf("%d", &S[i].num); 81 Change( S[i].num ); 82 strcpy( S[i].bi, temp ); 83 } 84 int a; 85 for ( int j = 0; j < n; j++ ) 86 { 87 scanf( "%d", &a ); 88 Change( a ); 89 printf( "%d\n", S[FindMin()].num ); 90 } 91 } 92 return 0; 93 }