HDU4712+随机算法

2014-11-23 22:19:40 ? 作者: ? 浏览: 2
随机算法
求n个20位的2进制串的MinDist。
Dist:两个串的异或结果中1的个数
/* 
随机算法 
*/  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
using namespace std;  
typedef long long int64;  
//typedef __int64 int64;  
typedef pair PII;  
#define MP(a,b) make_pair((a),(b))   
const int inf = 0x3f3f3f3f;  
const double pi=acos(-1.0);  
const int dx[]={1,-1,0,0};  
const int dy[]={0,0,1,-1};  
const double eps = 1e-8;  
const int maxm = 100000+10;  
const int maxn = 105;  
  
char str[ maxm ][ 6 ];  
int num1[ 22 ],num2[ 22 ];  
  
int GetId( char aim ){  
    int ans ;  
    if( aim>='0'&&aim<='9' ) ans = aim - '0';  
    else if( aim>='A'&&aim<='Z' ) ans = aim - 'A' + 10;  
    return ans;  
}  
  
int solve( int x,int y ){  
    int cnt = 0;  
    int cc ;  
    for( int i=0;i<5;i++ ){  
        int aim = GetId( str[x][i] );  
        cc = 4;  
        while( cc ){  
            num1[ cnt++ ] = aim%2;  
            aim /= 2;  
            cc -- ;  
        }  
    }  
    //printf("cnt = %d\n",cnt);  
    cnt = 0;  
    for( int i=0;i<5;i++ ){  
        int aim = GetId( str[y][i] );  
        cc = 4;  
        while( cc ){  
            num2[ cnt++ ] = aim%2;  
            aim /= 2;  
            cc -- ;  
        }  
    }  
    //printf("cnt = %d\n",cnt);  
    cnt = 0;  
    for( int i=0;i<20;i++ ){  
        if( num1[i]!=num2[i] )  
            cnt ++ ;  
    }  
    return cnt ;  
}  
      
int main(){  
    int T;  
    scanf("%d",&T);  
    while( T-- ){  
        int n;  
        scanf("%d",&n);  
        for( int i=0;i 
  


-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: