博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 632F Magic Matrix(bitset)
阅读量:4476 次
发布时间:2019-06-08

本文共 1178 字,大约阅读时间需要 3 分钟。

题目链接  

考虑第三个条件,如果不符合的话说明$a[i][k] < a[i][j]$ 或 $a[j][k] < a[i][j]$

于是我们把所有的$(a[i][j], i, j)$升序排序,然后检查当前的三元组$(a[i][j], i, j)$的时候,

先确保第一维值小于他的所有三元组$(x, y, z)$中$f[y][z]$已经设置成$1$

然后看$f[i]$和$f[j]$是否有交集,如果有则说明不符合题意。

#include 
using namespace std;#define rep(i, a, b) for (int i(a); i <= (b); ++i)#define dec(i, a, b) for (int i(a); i >= (b); --i)#define MP make_pair#define fi first#define se secondtypedef pair
> PII;const int N = 2510;int a[N][N];int cnt, now;int n;PII c[N * N];bitset
f[N], tmp;int main(){ scanf("%d", &n); rep(i, 1, n) rep(j, 1, n) scanf("%d", a[i] + j); rep(i, 1, n - 1) rep(j, i + 1, n) if (a[i][j] ^ a[j][i]) return 0 * puts("NOT MAGIC"); rep(i, 1, n) if (a[i][i]) return 0 * puts("NOT MAGIC"); rep(i, 1, n) rep(j, 1, n) c[++cnt] = MP(a[i][j], MP(i, j)); sort(c + 1, c + cnt + 1); now = 1; rep(i, 1, cnt){ for (; now < i && c[now].fi < c[i].fi; ){ f[c[now].se.fi][c[now].se.se] = 1; f[c[now].se.se][c[now].se.fi] = 1; ++now; } tmp = f[c[i].se.fi] & f[c[i].se.se]; if (tmp.any()) return 0 * puts("NOT MAGIC"); } return 0 * puts("MAGIC");}

 

转载于:https://www.cnblogs.com/cxhscst2/p/8040156.html

你可能感兴趣的文章
面试题
查看>>
DS博客作业08-课程总结
查看>>
利用Python爬虫刷店铺微博等访问量最简单有效教程
查看>>
浅谈软件测试与墨菲定律
查看>>
文件安全复制之 FastCopy
查看>>
强烈推荐美文之《从此刻起,我要》
查看>>
敏捷开发流程
查看>>
对Netflix Ribbon的Loadbalancer类源码设计合理性的一点质疑
查看>>
关于日历的算法
查看>>
[QT编程]QT实现的一个渐隐渐显窗体
查看>>
在Web工程中引入Jquery插件报错解决方案
查看>>
[myeclipse]@override报错问题
查看>>
超简单的listview单选模式SingleMode(自定义listview item)
查看>>
HDU 1199 - Color the Ball 离散化
查看>>
[SCOI2005]骑士精神
查看>>
Hibernate原理解析-Hibernate中实体的状态
查看>>
六时车主 App 隐私政策
查看>>
C语言常见问题 如何用Visual Studio编写C语言程序测试
查看>>
Web用户的身份验证及WebApi权限验证流程的设计和实现
查看>>
ECMAScript6-let与const命令详解
查看>>