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 }

你可能感兴趣的:(number)