zoukankan      html  css  js  c++  java
  • 汉明距离——世纪大暴力

    description

    两个数的海明距离定义为:这两个数异或所得结果中(1)的个数.给定(n)个数,求最短海明距离

    solution

    又是一场世纪大暴力.我们构造一数组(v),其值域为((1<<20)).异或是可逆的,根据这一性质,我们可以反过来枚举异或后的值v,v最多有2^20种情况,然后将(v)数组按1的个数从小到大排序,进行最优性剪枝即可完美通过此题.

    code

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<queue>
    #include<ctime>
    #define R register
    #define next MabLcdG
    #define mod 1
    #define debug puts("mlg")
    #define Mod(x) ((x%mod+mod)%mod)
    using namespace std;
    typedef long long ll;
    typedef long double ld;
    typedef unsigned long long ull;
    inline ll read();
    inline void write(ll x);
    inline void writesp(ll x);
    inline void writeln(ll x);
    const ll maxn=1e5+10;
    ll T; 
    ll n;
    ll vocabulary[200]; 
    ll c[maxn];
    ll ans;
    ll v[(1<<20)],h,rem[(1<<20)];
    ll cnt[(1<<20)];
    inline ll lowbit(ll x){return x&-x;}
    
    inline void make_v();
    
    inline ll calc(ll x){
    	ll sum=0;
    	for(;x;x-=lowbit(x)) ++sum;
    	return sum;
    } 
    bool vis[(1<<20)];
    int main(){
    	for(R ll i='0';i<='9';i++) vocabulary[i]=i-'0'+1;
    	for(R ll i='A';i<='F';i++) vocabulary[i]=i-'A'+11;
    	make_v();
    	T=read();
    	while(T--){
    		memset(vis,0,sizeof vis);
    		memset(c,0,sizeof c);
    		n=read();
    		ans=((ull)1<<63)-1;
    		for(R ll i=1;i<=n;i++){
    			for(R ll j=4;j>=0;j--){
    				char wn=getchar();
    				while(!vocabulary[wn]) wn=getchar();
    				c[i]+=(vocabulary[wn]-1)*(1<<(j<<2));
    			}
    			for(R ll j=1;j<=h&&rem[j]<ans;j++){
    				if(vis[(v[j]^c[i])]){
    					ans=rem[j];break;
    				}
    			}
    			vis[c[i]]=true;
    		}
    		writeln(ans);
    	}
    } 
    inline ll read(){ll x=0,t=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') t=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*t;}
    inline void write(ll x){if(x<0){putchar('-');x=-x;}if(x<=9){putchar(x+'0');return;}write(x/10);putchar(x%10+'0');}
    inline void writesp(ll x){write(x);putchar(' ');}
    inline void writeln(ll x){write(x);putchar('
    ');}
    inline void make_v(){
    	for(R ll i1=19;i1>=0;i1--){
    		v[++h]=(1<<i1);
    		rem[h]=1;
    	}
    	for(R ll i1=19;i1>=0;i1--){
    		for(R ll i2=i1-1;i2>=0;i2--){
    			v[++h]=(1<<i1)+(1<<i2);
    			rem[h]=2;
    		}
    	}
    	for(R ll i1=19;i1>=0;i1--){
    		for(R ll i2=i1-1;i2>=0;i2--){
    			for(R ll i3=i2-1;i3>=0;i3--){
    				v[++h]=(1<<i1)+(1<<i2)+(1<<i3);
    				rem[h]=3;
    			}
    		}
    	}
    	for(R ll i1=19;i1>=0;i1--){
    		for(R ll i2=i1-1;i2>=0;i2--){
    			for(R ll i3=i2-1;i3>=0;i3--){
    				for(R ll i4=i3-1;i4>=0;i4--){
    					v[++h]=(1<<i1)+(1<<i2)+(1<<i3)+(1<<i4);
    					rem[h]=4;
    				}
    			}
    		}
    	}
    	for(R ll i1=19;i1>=0;i1--){
    		for(R ll i2=i1-1;i2>=0;i2--){
    			for(R ll i3=i2-1;i3>=0;i3--){
    				for(R ll i4=i3-1;i4>=0;i4--){
    					for(R ll i5=i4-1;i5>=0;i5--){
    						v[++h]=(1<<i1)+(1<<i2)+(1<<i3)+(1<<i4)+(1<<i5);
    						rem[h]=5;
    					}
    				}
    			}
    		}
    	}
    	for(R ll i1=19;i1>=0;i1--){
    		for(R ll i2=i1-1;i2>=0;i2--){
    			for(R ll i3=i2-1;i3>=0;i3--){
    				for(R ll i4=i3-1;i4>=0;i4--){
    					for(R ll i5=i4-1;i5>=0;i5--){
    						for(R ll i6=i5-1;i6>=0;i6--){
    							v[++h]=(1<<i1)+(1<<i2)+(1<<i3)+(1<<i4)+(1<<i5)+(1<<i6);
    							rem[h]=6;
    						}
    					}
    				}
    			}
    		}
    	}
    	for(R ll i1=19;i1>=0;i1--){
    		for(R ll i2=i1-1;i2>=0;i2--){
    			for(R ll i3=i2-1;i3>=0;i3--){
    				for(R ll i4=i3-1;i4>=0;i4--){
    					for(R ll i5=i4-1;i5>=0;i5--){
    						for(R ll i6=i5-1;i6>=0;i6--){
    							for(R ll i7=i6-1;i7>=0;i7--){
    								v[++h]=(1<<i1)+(1<<i2)+(1<<i3)+(1<<i4)+(1<<i5)+(1<<i6)+(1<<i7);
    								rem[h]=7;
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    	for(R ll i1=19;i1>=0;i1--){
    		for(R ll i2=i1-1;i2>=0;i2--){
    			for(R ll i3=i2-1;i3>=0;i3--){
    				for(R ll i4=i3-1;i4>=0;i4--){
    					for(R ll i5=i4-1;i5>=0;i5--){
    						for(R ll i6=i5-1;i6>=0;i6--){
    							for(R ll i7=i6-1;i7>=0;i7--){
    								for(R ll i8=i7-1;i8>=0;i8--){
    									v[++h]=(1<<i1)+(1<<i2)+(1<<i3)+(1<<i4)+(1<<i5)+(1<<i6)+(1<<i7)+(1<<i8);
    									rem[h]=8;
    								}
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    	for(R ll i1=19;i1>=0;i1--){
    		for(R ll i2=i1-1;i2>=0;i2--){
    			for(R ll i3=i2-1;i3>=0;i3--){
    				for(R ll i4=i3-1;i4>=0;i4--){
    					for(R ll i5=i4-1;i5>=0;i5--){
    						for(R ll i6=i5-1;i6>=0;i6--){
    							for(R ll i7=i6-1;i7>=0;i7--){
    								for(R ll i8=i7-1;i8>=0;i8--){
    									for(R ll i9=i8-1;i9>=0;i9--){
    										v[++h]=(1<<i1)+(1<<i2)+(1<<i3)+(1<<i4)+(1<<i5)+(1<<i6)+(1<<i7)+(1<<i8)+(1<<i9);
    										rem[h]=9;
    									}
    								}
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    	for(R ll i1=19;i1>=0;i1--){
    		for(R ll i2=i1-1;i2>=0;i2--){
    			for(R ll i3=i2-1;i3>=0;i3--){
    				for(R ll i4=i3-1;i4>=0;i4--){
    					for(R ll i5=i4-1;i5>=0;i5--){
    						for(R ll i6=i5-1;i6>=0;i6--){
    							for(R ll i7=i6-1;i7>=0;i7--){
    								for(R ll i8=i7-1;i8>=0;i8--){
    									for(R ll i9=i8-1;i9>=0;i9--){
    										for(R ll i10=i9-1;i10>=0;i10--){
    											v[++h]=(1<<i1)+(1<<i2)+(1<<i3)+(1<<i4)+(1<<i5)+(1<<i6)+(1<<i7)+(1<<i8)+(1<<i9)+(1<<i10);
    											rem[h]=10;
    										}
    									}
    								}
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    	for(R ll i1=19;i1>=0;i1--){
    		for(R ll i2=i1-1;i2>=0;i2--){
    			for(R ll i3=i2-1;i3>=0;i3--){
    				for(R ll i4=i3-1;i4>=0;i4--){
    					for(R ll i5=i4-1;i5>=0;i5--){
    						for(R ll i6=i5-1;i6>=0;i6--){
    							for(R ll i7=i6-1;i7>=0;i7--){
    								for(R ll i8=i7-1;i8>=0;i8--){
    									for(R ll i9=i8-1;i9>=0;i9--){
    										for(R ll i10=i9-1;i10>=0;i10--){
    											for(R ll i11=i10-1;i11>=0;i11--){
    												v[++h]=(1<<i1)+(1<<i2)+(1<<i3)+(1<<i4)+(1<<i5)+(1<<i6)+(1<<i7)+(1<<i8)+(1<<i9)+(1<<i10)+(1<<i11);
    												rem[h]=11;
    											}
    										}
    									}
    								}
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    	for(R ll i1=19;i1>=0;i1--){
    		for(R ll i2=i1-1;i2>=0;i2--){
    			for(R ll i3=i2-1;i3>=0;i3--){
    				for(R ll i4=i3-1;i4>=0;i4--){
    					for(R ll i5=i4-1;i5>=0;i5--){
    						for(R ll i6=i5-1;i6>=0;i6--){
    							for(R ll i7=i6-1;i7>=0;i7--){
    								for(R ll i8=i7-1;i8>=0;i8--){
    									for(R ll i9=i8-1;i9>=0;i9--){
    										for(R ll i10=i9-1;i10>=0;i10--){
    											for(R ll i11=i10-1;i11>=0;i11--){
    												for(R ll i12=i11-1;i12>=0;i12--){
    													v[++h]=(1<<i1)+(1<<i2)+(1<<i3)+(1<<i4)+(1<<i5)+(1<<i6)+(1<<i7)+(1<<i8)+(1<<i9)+(1<<i10)+(1<<i11)+(1<<i12);
    													rem[h]=12;
    												}
    											}
    										}
    									}
    								}
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    	for(R ll i1=19;i1>=0;i1--){
    		for(R ll i2=i1-1;i2>=0;i2--){
    			for(R ll i3=i2-1;i3>=0;i3--){
    				for(R ll i4=i3-1;i4>=0;i4--){
    					for(R ll i5=i4-1;i5>=0;i5--){
    						for(R ll i6=i5-1;i6>=0;i6--){
    							for(R ll i7=i6-1;i7>=0;i7--){
    								for(R ll i8=i7-1;i8>=0;i8--){
    									for(R ll i9=i8-1;i9>=0;i9--){
    										for(R ll i10=i9-1;i10>=0;i10--){
    											for(R ll i11=i10-1;i11>=0;i11--){
    												for(R ll i12=i11-1;i12>=0;i12--){
    													for(R ll i13=i12-1;i13>=0;i13--){
    														v[++h]=(1<<i1)+(1<<i2)+(1<<i3)+(1<<i4)+(1<<i5)+(1<<i6)+(1<<i7)+(1<<i8)+(1<<i9)+(1<<i10)+(1<<i11)+(1<<i12)+(1<<i13);
    														rem[h]=13;
    													}
    												}
    											}
    										}
    									}
    								}
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    //14
    	for(R ll i1=19;i1>=0;i1--){
    		for(R ll i2=i1-1;i2>=0;i2--){
    			for(R ll i3=i2-1;i3>=0;i3--){
    				for(R ll i4=i3-1;i4>=0;i4--){
    					for(R ll i5=i4-1;i5>=0;i5--){
    						for(R ll i6=i5-1;i6>=0;i6--){
    							for(R ll i7=i6-1;i7>=0;i7--){
    								for(R ll i8=i7-1;i8>=0;i8--){
    									for(R ll i9=i8-1;i9>=0;i9--){
    										for(R ll i10=i9-1;i10>=0;i10--){
    											for(R ll i11=i10-1;i11>=0;i11--){
    												for(R ll i12=i11-1;i12>=0;i12--){
    													for(R ll i13=i12-1;i13>=0;i13--){
    														for(R ll i14=i13-1;i14>=0;i14--){
    															v[++h]=(1<<i1)+(1<<i2)+(1<<i3)+(1<<i4)+(1<<i5)+(1<<i6)+(1<<i7)+(1<<i8)+(1<<i9)+(1<<i10)+(1<<i11)+(1<<i12)+(1<<i13)+(1<<i14);
    															rem[h]=14;
    														}
    													}
    												}
    											}
    										}
    									}
    								}
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    //15
    	for(R ll i1=19;i1>=0;i1--){
    		for(R ll i2=i1-1;i2>=0;i2--){
    			for(R ll i3=i2-1;i3>=0;i3--){
    				for(R ll i4=i3-1;i4>=0;i4--){
    					for(R ll i5=i4-1;i5>=0;i5--){
    						for(R ll i6=i5-1;i6>=0;i6--){
    							for(R ll i7=i6-1;i7>=0;i7--){
    								for(R ll i8=i7-1;i8>=0;i8--){
    									for(R ll i9=i8-1;i9>=0;i9--){
    										for(R ll i10=i9-1;i10>=0;i10--){
    											for(R ll i11=i10-1;i11>=0;i11--){
    												for(R ll i12=i11-1;i12>=0;i12--){
    													for(R ll i13=i12-1;i13>=0;i13--){
    														for(R ll i14=i13-1;i14>=0;i14--){
    															for(R ll i15=i14-1;i15>=0;i15--){
    																v[++h]=(1<<i1)+(1<<i2)+(1<<i3)+(1<<i4)+(1<<i5)+(1<<i6)+(1<<i7)+(1<<i8)+(1<<i9)+(1<<i10)+(1<<i11)+(1<<i12)+(1<<i13)+(1<<i14)+(1<<i15);
    																rem[h]=15;
    															}
    														}
    													}
    												}
    											}
    										}
    									}
    								}
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    	//16
    	for(R ll i1=19;i1>=0;i1--){
    		for(R ll i2=i1-1;i2>=0;i2--){
    			for(R ll i3=i2-1;i3>=0;i3--){
    				for(R ll i4=i3-1;i4>=0;i4--){
    					for(R ll i5=i4-1;i5>=0;i5--){
    						for(R ll i6=i5-1;i6>=0;i6--){
    							for(R ll i7=i6-1;i7>=0;i7--){
    								for(R ll i8=i7-1;i8>=0;i8--){
    									for(R ll i9=i8-1;i9>=0;i9--){
    										for(R ll i10=i9-1;i10>=0;i10--){
    											for(R ll i11=i10-1;i11>=0;i11--){
    												for(R ll i12=i11-1;i12>=0;i12--){
    													for(R ll i13=i12-1;i13>=0;i13--){
    														for(R ll i14=i13-1;i14>=0;i14--){
    															for(R ll i15=i14-1;i15>=0;i15--){
    																for(R ll i16=i15-1;i16>=0;i16--){
    																	v[++h]=(1<<i1)+(1<<i2)+(1<<i3)+(1<<i4)+(1<<i5)+(1<<i6)+(1<<i7)+(1<<i8)+(1<<i9)+(1<<i10)+(1<<i11)+(1<<i12)+(1<<i13)+(1<<i14)+(1<<i15)+(1<<i16);
    																	rem[h]=16;
    																}
    															}
    														}
    													}
    												}
    											}
    										}
    									}
    								}
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    //17
    	for(R ll i1=19;i1>=0;i1--){
    		for(R ll i2=i1-1;i2>=0;i2--){
    			for(R ll i3=i2-1;i3>=0;i3--){
    				for(R ll i4=i3-1;i4>=0;i4--){
    					for(R ll i5=i4-1;i5>=0;i5--){
    						for(R ll i6=i5-1;i6>=0;i6--){
    							for(R ll i7=i6-1;i7>=0;i7--){
    								for(R ll i8=i7-1;i8>=0;i8--){
    									for(R ll i9=i8-1;i9>=0;i9--){
    										for(R ll i10=i9-1;i10>=0;i10--){
    											for(R ll i11=i10-1;i11>=0;i11--){
    												for(R ll i12=i11-1;i12>=0;i12--){
    													for(R ll i13=i12-1;i13>=0;i13--){
    														for(R ll i14=i13-1;i14>=0;i14--){
    															for(R ll i15=i14-1;i15>=0;i15--){
    																for(R ll i16=i15-1;i16>=0;i16--){
    																	for(R ll i17=i16-1;i17>=0;i17--){
    																		v[++h]=(1<<i1)+(1<<i2)+(1<<i3)+(1<<i4)+(1<<i5)+(1<<i6)+(1<<i7)+(1<<i8)+(1<<i9)+(1<<i10)+(1<<i11)+(1<<i12)+(1<<i13)+(1<<i14)+(1<<i15)+(1<<i16)+(1<<i17);
    																		rem[h]=17;
    																	}
    																}
    															}
    														}
    													}
    												}
    											}
    										}
    									}
    								}
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    //18
    	for(R ll i1=19;i1>=0;i1--){
    		for(R ll i2=i1-1;i2>=0;i2--){
    			for(R ll i3=i2-1;i3>=0;i3--){
    				for(R ll i4=i3-1;i4>=0;i4--){
    					for(R ll i5=i4-1;i5>=0;i5--){
    						for(R ll i6=i5-1;i6>=0;i6--){
    							for(R ll i7=i6-1;i7>=0;i7--){
    								for(R ll i8=i7-1;i8>=0;i8--){
    									for(R ll i9=i8-1;i9>=0;i9--){
    										for(R ll i10=i9-1;i10>=0;i10--){
    											for(R ll i11=i10-1;i11>=0;i11--){
    												for(R ll i12=i11-1;i12>=0;i12--){
    													for(R ll i13=i12-1;i13>=0;i13--){
    														for(R ll i14=i13-1;i14>=0;i14--){
    															for(R ll i15=i14-1;i15>=0;i15--){
    																for(R ll i16=i15-1;i16>=0;i16--){
    																	for(R ll i17=i16-1;i17>=0;i17--){
    																		for(R ll i18=i17-1;i18>=0;i18--){
    																			v[++h]=(1<<i1)+(1<<i2)+(1<<i3)+(1<<i4)+(1<<i5)+(1<<i6)+(1<<i7)+(1<<i8)+(1<<i9)+(1<<i10)+(1<<i11)+(1<<i12)+(1<<i13)+(1<<i14)+(1<<i15)+(1<<i16)+(1<<i17)+(1<<i18);
    																			rem[h]=18;
    																		}	
    																	}
    																}
    															}
    														}
    													}
    												}
    											}
    										}
    									}
    								}
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    //19
    	for(R ll i1=19;i1>=0;i1--){
    		for(R ll i2=i1-1;i2>=0;i2--){
    			for(R ll i3=i2-1;i3>=0;i3--){
    				for(R ll i4=i3-1;i4>=0;i4--){
    					for(R ll i5=i4-1;i5>=0;i5--){
    						for(R ll i6=i5-1;i6>=0;i6--){
    							for(R ll i7=i6-1;i7>=0;i7--){
    								for(R ll i8=i7-1;i8>=0;i8--){
    									for(R ll i9=i8-1;i9>=0;i9--){
    										for(R ll i10=i9-1;i10>=0;i10--){
    											for(R ll i11=i10-1;i11>=0;i11--){
    												for(R ll i12=i11-1;i12>=0;i12--){
    													for(R ll i13=i12-1;i13>=0;i13--){
    														for(R ll i14=i13-1;i14>=0;i14--){
    															for(R ll i15=i14-1;i15>=0;i15--){
    																for(R ll i16=i15-1;i16>=0;i16--){
    																	for(R ll i17=i16-1;i17>=0;i17--){
    																		for(R ll i18=i17-1;i18>=0;i18--){
    																			for(R ll i19=i18-1;i19>=0;i19--){
    																				v[++h]=(1<<i1)+(1<<i2)+(1<<i3)+(1<<i4)+(1<<i5)+(1<<i6)+(1<<i7)+(1<<i8)+(1<<i9)+(1<<i10)+(1<<i11)+(1<<i12)+(1<<i13)+(1<<i14)+(1<<i15)+(1<<i16)+(1<<i17)+(1<<i18)+(1<<i19);
    																				rem[h]=19;
    																			}
    																		}	
    																	}
    																}
    															}
    														}
    													}
    												}
    											}
    										}
    									}
    								}
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    	for(R ll i1=19;i1>=0;i1--){
    		for(R ll i2=i1-1;i2>=0;i2--){
    			for(R ll i3=i2-1;i3>=0;i3--){
    				for(R ll i4=i3-1;i4>=0;i4--){
    					for(R ll i5=i4-1;i5>=0;i5--){
    						for(R ll i6=i5-1;i6>=0;i6--){
    							for(R ll i7=i6-1;i7>=0;i7--){
    								for(R ll i8=i7-1;i8>=0;i8--){
    									for(R ll i9=i8-1;i9>=0;i9--){
    										for(R ll i10=i9-1;i10>=0;i10--){
    											for(R ll i11=i10-1;i11>=0;i11--){
    												for(R ll i12=i11-1;i12>=0;i12--){
    													for(R ll i13=i12-1;i13>=0;i13--){
    														for(R ll i14=i13-1;i14>=0;i14--){
    															for(R ll i15=i14-1;i15>=0;i15--){
    																for(R ll i16=i15-1;i16>=0;i16--){
    																	for(R ll i17=i16-1;i17>=0;i17--){
    																		for(R ll i18=i17-1;i18>=0;i18--){
    																			for(R ll i19=i18-1;i19>=0;i19--){
    																				for(R ll i20=i19-1;i20>=0;i20--){
    																				v[++h]=(1<<i1)+(1<<i2)+(1<<i3)+(1<<i4)+(1<<i5)+(1<<i6)+(1<<i7)+(1<<i8)+(1<<i9)+(1<<i10)+(1<<i11)+(1<<i12)+(1<<i13)+(1<<i14)+(1<<i15)+(1<<i16)+(1<<i17)+(1<<i18)+(1<<i19)+(1<<i20);
    																				rem[h]=20;
    																				}
    																			}
    																		}	
    																	}
    																}
    															}
    														}
    													}
    												}
    											}
    										}
    									}
    								}
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    }
    
  • 相关阅读:
    struts 数据验证指定方法(使用xml文件)
    struts2.0简单页面 (不带拦截器和带拦截器案例)
    tomcat启动流程 和 struts 详解
    代理类Proxy------ WeakHashMap----ReferenceQueue---- Reference
    java 文件上传 struts2.0实现
    java struts xml文件设置----自定义日期转换器(局部,及全局类型转换器类)
    java request,response解析及中文编码 , jsp注释 xml中文编码,getsession()使用方法
    java jsp自定义标签
    Java 通讯录contact
    [Machine Learning for Trading] {ud501} Lesson 3: 01-02 Working with multiple stocks
  • 原文地址:https://www.cnblogs.com/ylwtsq/p/13453291.html
Copyright © 2011-2022 走看看