Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
34394 daimo 【S】T2 C++ 运行超时 20 2000 MS 6496 KB 1284 2024-11-07 18:34:53

Tests(2/10):


#include<bits/stdc++.h> #define int long long using namespace std; int n,m,c; int num[400010]; bool flag[30]; bool app[400010]; int cost[4000010]; void dfs(int x,int step){ if(cost[x])return; cost[x]=step; for(int i=0;i<m;i++){ if(!flag[i]){ flag[i]=1; dfs(x+(1<<i),step+1); flag[i]=0; } } } int ans; bool use[30]; bool app2[400010]; void dfs2(int x,int step){ app2[x]=1; if(step>8)return; if(app[x]){ ans=min(ans,step); return; } for(int i=0;i<m;i++){ if(!use[i]&&!app2[x^(1<<i)]){ use[i]=1; dfs2(x^(1<<i),step+1); use[i]=0; } } } signed main(){ //freopen("code.in","r",stdin); //freopen("code.out","w",stdout); cin>>n>>m>>c; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ char ch;cin>>ch; num[i]=num[i]*2+(ch-'0'); } } if(c==1){ cout<<n<<endl; return 0; } dfs(0,0); if(c==2){ ans=0; for(int i=1;i<=n;i++){ if(app[num[i]])ans++; else app[num[i]]=1,ans+=2; } cout<<ans<<endl; return 0; } int sum=c; app[num[1]]=1; for(int i=2;i<=n;i++){ ans=c+1; memset(app2,0,sizeof(app2)); dfs2(num[i],1); if(ans==c+1)for(int j=1;j<i;j++)ans=min(ans,cost[num[i]^num[j]]+1); app[num[i]]=1; sum+=ans; } cout<<sum<<endl; return 0; }


测评信息: