codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#include <iostream> #include <cmath> #include <algorithm> using namespace std; int minans; void solve(int * box,bool * status,int number,int bits,int min){//p=led number=number int p,q; int * box1 = new int[number]; for(int ans=bits-1,k=0;ans>=0&&k<bits;--ans,++k){ for(int i=0;i<number;++i){ if(status[k]){ q=pow(2,ans); p=box[i]; p&=~q; box1[i]=p; } } sort(box1,box1+number); if(number==unique(box1,box1+number)-box1){//recursive min--; status[k]=0; if(min<=minans&&min>=log2(number)){ minans=min; } solve(box1,status,number,bits,min); } } delete [] box1 ; } int main(){ int test,number,temp,bits,min; cin>>test; while(test--){ cin>>bits>>number; minans=min=bits; if(!(number==1)){ int * box = new int[number]; bool * status = new bool[bits]; for(int i=0;i<number;++i){ box[i]=0; for(int j=0;j<bits;++j){ cin>>temp; status[j]=1; box[i]+=temp*pow(2,bits-1-j); } } solve(box,status,number,bits,min); cout<<minans<<endl; delete [] box ; } else{ for(int j=0;j<bits;++j) cin>>temp; cout<<"0"<<endl; } } return 0; }
Private
[
?
]
Run code
Submit