CF 632F Magic Matrix
2016-06-28 21:31
337 查看
You’re given a matrix A of size n × n.
Let’s call the matrix with nonnegative elements magic if it is symmetric (so ai,j = aj,i), ai,i = 0 and ai,j ≤ max(ai,k, aj,k)for all triples i, j, k. Note that i, j, k do not need to be distinct.
Determine if the matrix is magic.
论bitset的重要性
Let’s call the matrix with nonnegative elements magic if it is symmetric (so ai,j = aj,i), ai,i = 0 and ai,j ≤ max(ai,k, aj,k)for all triples i, j, k. Note that i, j, k do not need to be distinct.
Determine if the matrix is magic.
论bitset的重要性
#include<cmath> #include<queue> #include<stack> #include<cstdio> #include<bitset> #include<cstring> #include<complex> #include<iostream> #include<algorithm> #define pi acos(-1) #define inf (1<<30) #define INF (1<<62) #define fi first #define se second #define CLR(x,f) memset(x,f,sizeof(x)) #define CPY(x,y) memcpy(x,y,sizeof(x)) #define prt(x) cout<<#x<<": "<<x<<endl #define Har(x) printf("--------DEBUG(%d)--------\n",x) //#define TL using namespace std; const int M=2500; bitset<M>b[M]; typedef long long ll; int a[M][M],n; typedef pair<int,int> ii; typedef pair<int,ii> iii; iii dat[M*M]; bool judge(){ for(int i=0;i<n;i++)if(a[i][i])return 0; for(int i=0;i<n;i++)for(int j=0;j<n;j++)if(a[i][j]-a[j][i])return 0; int tot=0; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ dat[tot++]=iii(a[i][j],ii(i,j)); } } sort(dat,dat+tot); for(int j,i=0;i<tot;i++){ for(j=i;j<tot&&dat[j].fi==dat[i].fi;j++); for(int k=i;k<j;k++){ ii v=dat[k].se; if((b[v.fi]&b[v.se]).any())return false; } for(int k=i;k<j;k++){ ii v=dat[k].se; b[v.fi][v.se]=true; } i=j-1; } return true; } int main(){ #ifdef TL #endif scanf("%d",&n); for(int i=0;i<n;i++) for(int j=0;j<n;j++) scanf("%d",&a[i][j]); if(judge())puts("MAGIC"); else puts("NOT MAGIC"); return 0; }
相关文章推荐
- 关于bitset中低阶位与高阶位的理解
- 关于bitset中低阶位与高阶位的理解
- C++计算输入数据对应二进制中1的个数。
- C++习题整理(2)
- 讨论组12.20讲述内容笔记
- C++表达式
- cout的二进制输出实现
- C++标准库:bitset 用法整理 (来自网易 happyboy200032的博客)
- 位数组实现方法
- Java BitSet类
- DES加密解密 使用bitset编写...
- c++ bitset 用法
- bitset应用---产生1万个不重复的随机数
- 位图法排序
- 位图法查找算法
- 剑指Offer--010-二进制中1的个数
- 算法之旅,直奔<bitset>之三 test
- 算法之旅,直奔<bitset>之四 set
- 算法之旅,直奔<bitset>之五 count
- 算法之旅,直奔<bitset>之六 none