Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
34424 daimo 【S】T2 C++ 解答错误 30 2997 MS 31560 KB 1330 2024-11-07 19:04:03

Tests(3/10):


#include<bits/stdc++.h> #define int long long using namespace std; int n,m,c; int num[2000010]; bool flag[30]; bool app[2000010]; int cost[2000010]; 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,int n){ if(step-1>n)return; app2[x]=1; 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,n); use[i]=0; } } } signed main(){ //freopen("code.in","r",stdin); //freopen("code.out","w",stdout); ios::sync_with_stdio(0); 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; } if(n>=10010){ cout<<1<<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)); for(int j=0;ans==c+1;j++)dfs2(num[i],1,j); app[num[i]]=1; sum+=ans; } cout<<sum<<endl; return 0; }


测评信息: