UVA 729 The Hamming Distance Problem

手写的next_permutation比库函数写的高了一倍的时间额。

 

CODE:

 

#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <cstdio>
#include <cstring>
using  namespace std;

int main()
{
     int T;
    scanf( " %d ", &T);
     while(T--)
    {
         int N, H;
         char s[ 20] = { ' \0 '};
        scanf( " %d%d ", &N, &H);
         for( int i = N- 1; i >=  0 ; i--)
        {
             if(H)
            {
                s[i] =  ' 1 ';
                H--;
            }
             else s[i] =  ' 0 ';
        }
         do
        {
            printf( " %s\n ", s);
        } while(next_permutation(s, s+N));
         if(T >  0) printf( " \n ");
    }
     return  0;
}

 

CODE:

 

#include<cstdio>
#include<cstring>
#include<cstdlib>
#define MAXN 20

int P[MAXN], A[MAXN], N, H;

void print_permutation(  int N,  int *P,  int *A,  int cur)
{
     if( cur == N){
         forint i =  0; i < N; i ++)
            printf(  " %d ", A[i]);
    printf(  " \n ");
    }
     else  forint i =  0; i < N; i ++)
         if( !i || P[i] != P[i -  1])
        {
             int c1 =  0, c2 =  0;
             forint j =  0; j < cur; j ++)  if( A[j] == P[i]) c1 ++;
             forint j =  0; j < N; j ++)  if( P[i] == P[j]) c2 ++;
             if( c1 < c2)
            {
                A[cur] = P[i];
                print_permutation( N, P, A, cur +  1);
            }
        }
}

int main()
{
     int T;
    scanf(  " %d ", &T);
     while( T --)
    {
        scanf(  " %d%d ", &N, &H);
         forint i =  0; i < N; i ++)
        {
             if( i < N - H) P[i] =  0;
             else P[i] =  1;
        }
        print_permutation( N, P, A,  0);
         if( T >  0) printf(  " \n ");
    }
     return  0;
}

 

你可能感兴趣的:(uva)