HDU 3711 Binary Number

题目链接: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 }
原文地址:https://www.cnblogs.com/GBRgbr/p/2623898.html