2
3
0 1 3
2 0 1
1 1 0
3
0 1 0
0 0 0
0 0 0
not exists
exists
比赛的时候,居然被卡,我的失误啊,,,都怪自己想太多。
其实只要某一行或者列全为零,那么必定不会转化为全非0的。仔细一想,行*列。
#include<stdio.h> #define MM 1005 int mat[MM][MM]; int main() { int T,n; scanf("%d",&T); while(T--) { scanf("%d",&n); int cnt,flag=0; for(int i=0;i<n;i++) { cnt=0; for(int j=0;j<n;j++) { scanf("%d",&mat[i][j]); if(mat[i][j]==0) cnt++; } if(cnt==n) flag=1; } if(flag){printf("exists\n");continue;} for(int i=0;i<n;i++) { cnt=0; for(int j=0;j<n;j++) { if(mat[j][i]==0) cnt++; } if(cnt==n) flag=1; } if(flag) printf("exists\n"); else printf("not exists\n"); } return 0; } /************************************************************** Problem: 1612 User: aking2015 Language: C++ Result: Accepted Time:176 ms Memory:4908 kb ****************************************************************/
比赛的时候是这样过的
#include <iostream> #include <stdio.h> #include <string.h> #include <stack> #include <queue> #include <map> #include <set> #include <vector> #include <math.h> #include <bitset> #include <algorithm> using namespace std; #define ls 2*i #define rs 2*i+1 #define up(i,x,y) for(i=x;i<=y;i++) #define down(i,x,y) for(i=x;i>=y;i--) #define mem(a,x) memset(a,x,sizeof(a)) #define w(a) while(a) #define LL long long const double pi = acos(-1.0); #define N 1000005 #define mod 19999997 const int INF = 0x3f3f3f3f; #define exp 1e-8 bitset<1005> a[1005]; int main() { int t,n,i,j,k,flag; cin>>t; w(t--) { cin>>n; up(i,1,n) { up(j,1,n) { cin>>k; a[i][j] = (k>0?1:0); } } up(i,1,n) { up(j,1,n) if(a[j][i]) a[j]|=a[i]; } flag = 0; up(i,1,n) { up(j,1,n) { if(i==j)continue; if(!a[i][j]) { flag=1; break; } } if(flag) break; } if(flag) printf("exists\n"); else printf("not exists\n"); } return 0; } /************************************************************** Problem: 1612 User: aking2015 Language: C++ Result: Accepted Time:916 ms Memory:1608 kb ****************************************************************/
是时候该开个专题攻攻组合数学了。