标签:高斯消元 turn count() 技术 使用 div getc ima through
对于 20%的数据,满足 N=M≤20;
对于 40%的数据,满足 N=M≤500;
对于 70%的数据,满足 N≤500,M≤1,000;
对于 100%的数据,满足 N≤1,000,M≤2,000。
==========================================================
请不要提交!
1 //It is made by wfj_2048~ 2 #include <algorithm> 3 #include <iostream> 4 #include <cstring> 5 #include <cstdlib> 6 #include <cstdio> 7 #include <bitset> 8 #include <vector> 9 #include <cmath> 10 #include <queue> 11 #include <stack> 12 #include <map> 13 #include <set> 14 #define inf (1<<30) 15 #define il inline 16 #define RG register 17 #define ll long long 18 #define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout) 19 20 using namespace std; 21 22 bitset <1010> a[2010],c; 23 int b[2010],ans[1010],n,m,k; 24 char s[1010]; 25 26 il int gi(){ 27 RG int x=0,q=1; RG char ch=getchar(); while ((ch<‘0‘ || ch>‘9‘) && ch!=‘-‘) ch=getchar(); 28 if (ch==‘-‘) q=-1,ch=getchar(); while (ch>=‘0‘ && ch<=‘9‘) x=x*10+ch-48,ch=getchar(); return q*x; 29 } 30 31 il void gauss(){ 32 for (RG int i=1;i<=m;++i){ 33 RG int id; for (id=i;id<=m;++id) if (a[id][i]) break; k=max(k,id); 34 if (id==m+1){ printf("Cannot Determine"); return; } 35 if (i!=id) swap(a[i],a[id]),swap(b[i],b[id]); c.reset(); 36 for (RG int j=1;j<=m;++j) if (i!=j && a[j][i]) a[j]^=a[i],b[j]^=b[i]; 37 for (RG int j=1;j<=i;++j){ if (a[j].count()!=1) continue; c^=a[j]; } 38 if (c.count()==(unsigned int)n){ 39 for (RG int j=1;j<=i;++j) 40 if (a[j].count()==1){ 41 for (RG int p=1;p<=n;++p) 42 if (a[j][p]) ans[p]=b[j]; 43 } 44 printf("%d\n",k); 45 for (RG int j=1;j<=n;++j) puts(ans[j] ? "?y7M#" : "Earth"); 46 return; 47 } 48 } 49 return; 50 } 51 52 il void work(){ 53 n=gi(),m=gi(); 54 for (RG int i=1;i<=m;++i){ 55 scanf("%s",s+1); b[i]=gi(); 56 for (RG int j=1;j<=n;++j) a[i][j]=(s[j]==‘1‘); 57 } 58 gauss(); return; 59 } 60 61 int main(){ 62 File("thousand"); 63 work(); 64 return 0; 65 }
标签:高斯消元 turn count() 技术 使用 div getc ima through
原文地址:http://www.cnblogs.com/wfj2048/p/6536109.html