提交时间:2024-11-07 18:36:28

运行 ID: 34398

#include<bits/stdc++.h> using namespace std; #define N 1000006 int n,m,c; char tmp; int a[N]; int read(){ int res=0; char ch='0'; while (isdigit(ch)) { res<<=1; res|=(ch-'0'); ch=getchar(); } return res; } set<int>s; int dp[N]; int cal(int x,int y){ int tmp2=(x^y),ans=0; while (tmp2) { ans+=(tmp2&1); tmp2>>=1; } return ans; } int main(){ cin>>n>>m>>c; getchar(); for(int i=1;i<=n;i++){ a[i]=read(); } //cout<<cal(a[2],a[1])<<endl<<a[2]<<' '<<a[1]<<endl; if(c==1){ cout<<n<<endl; return 0; } if(c==2){ int cnt=0; for(int i=1;i<=n;i++){ if(s.find(a[i])==s.end()) s.insert(a[i]); else cnt++; } cout<<2*(n-cnt)<<endl; return 0; }else{ for(int i=1;i<=n;i++){ dp[i]=c; for(int j=1;j<i;j++){ dp[i]=min(dp[i],1+cal(a[i],a[j])); } //cout<<dp[i]<<' '; dp[i]+=dp[i-1]; } cout<<dp[n]<<endl; } //cout<<cal(a[2],a[1])<<endl<<a[2]<<' '<<a[1]; return 0; }