提交时间:2024-11-08 08:34:04

运行 ID: 34443

#include<bits/stdc++.h> using namespace std; const int N=2e6+10; #define int long long //f[i]:要转成i的最小代价 int n,m,c,a[N],f[N],ans,h,t; string s; struct Que{int id,x;}q[N]; void bfs(int i){ // cout<<"!"<<i<<endl; h=t=1;q[1]={i,1};f[i]=1; while(h<=t){ Que now=q[h];int nxt;h++; // cout<<now.id<<" "<<now.x<<endl; for(int j=1;j<(1<<20);j=(j<<1)){ nxt=now.id^j; if(f[nxt]>now.x+1){ f[nxt]=now.x+1; q[++t]={nxt,now.x+1}; } } } } signed main(){ scanf("%lld%lld%lld",&n,&m,&c); for(int i=1;i<=n;i++){ cin>>s; for(int j=0;j<s.length();j++){a[i]=(a[i]<<1)+s[j]-'0';} } for(int i=0;i<(1<<20);i++)f[i]=c; for(int i=1;i<=n;i++){ // cout<<f[a[i]]<<endl; ans+=f[a[i]]; bfs(a[i]); } printf("%lld",ans); return 0; }