您的位置:首页 > 其它

UVA 729 The Hamming Distance Problem

2012-09-24 17:58 405 查看
手写的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){
for( int i = 0; i < N; i ++)
printf( "%d", A[i]);
printf( "\n");
}
else for( int i = 0; i < N; i ++)
if( !i || P[i] != P[i - 1])
{
int c1 = 0, c2 = 0;
for( int j = 0; j < cur; j ++) if( A[j] == P[i]) c1 ++;
for( int 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);
for( int 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: