2 条题解
-
0
#include <bits/stdc++.h> using namespace std; const int N=110; int n, m, u[N], ans, Ans[N],sum[N]; char str[N][N]; void dfs(int k) { if(k > n) { bool flag=True; int s=0; for(int i=1; i<=m; i++) { s=0;for(int j=1; j<=n; j++)if(str[i][j]=='1')s+=u[j]; if(s!=sum[i]){flag=False;break;} } if(flag) { ans++; if(ans>1){printf("NOT UNIQUE");exit(0);} for(int i=1; i<=n; i++) Ans[i]=u[i]; } return ; } dfs(k+1); u[k]=1; dfs(k+1); u[k]=0; } int main() { scanf("%d%d", &n, &m); for(int i=1; i<=m; i++) scanf("%s%d", str[i]+1, &sum[i]); dfs(1); if(ans==0) printf("IMPOSSIBLE"); else for(int i=1; i<=n; i++) printf("%d", Ans[i]); return 0; } -
0
#include<bits/stdc++.h> using namespace std; const int N=110; int n, m, u[N], ans, Ans[N],sum[N]; char str[N][N]; void dfs(int k) { if(k>n) { bool flag=True; int s=0; for(int i=1; i<=m; i++) { s=0;for(int j=1; j<=n; j++)if(str[i][j]=='1')s+=u[j]; if(s!=sum[i]){flag=False;break;} } if(flag) { ans++; if(ans>1){printf("NOT UNIQUE");exit(0);} for(int i=1; i<=n; i++) Ans[i]=u[i]; } return ; } dfs(k+1); u[k]=1; dfs(k+1); u[k]=0; } int main() { scanf("%d%d", &n, &m); for(int i=1; i<=m; i++) scanf("%s%d", str[i]+1, &sum[i]); dfs(1); if(ans==0) printf("IMPOSSIBLE"); else for(int i=1; i<=n; i++) printf("%d", Ans[i]); return 0; }
- 1
信息
- ID
- 1573
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 5
- 标签
- 递交数
- 29
- 已通过
- 15
- 上传者