[POI2009]Tab

Time Limit: 40 Sec  Memory Limit: 162 MB
Submit: 373  Solved: 167
[Submit][Status][Discuss]

Description

  2个n*m矩阵,保证同一个矩阵中元素两两不同。问能否通过若干次交换两行或交换两列把第一个矩阵变成第二
个。

Input

第一行正整数T(1≤T≤10)表示数据组数.
每组数据包括:第一行nm(1≤n,m≤1000)2个n行m列的整数矩阵,
元素绝对值均在10^6以内

Output

每组数据输出“TAK”/“NIE”表示能/不能.

Sample Input

2
4 3
1 2 3
4 5 6
7 8 9
10 11 12
11 10 12
8 7 9
5 4 6
2 1 3
2 2
1 2
3 4
5 6
7 8

Sample Output

TAK
NIE

HINT

 

Source

鸣谢WangTianYi制作数据

题解:如果可以知道两个矩阵的最小表示就可以比较是否相同了,现将最小的数放到最左上角,因为每个数不同

   然后,按照行的开头,再按第一行的各列来排序,就可以了,这样二维的位置,就已经被二维关键字排过了,是唯一的。

   然后比较即可,时间复杂度貌似是n^3的,但是过了。

 #include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std; const int N=; int a[N][N],b[N][N],n,m; int read()
{
int x=,f=;char ch=getchar();
while (ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while (ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
} void work1()
{
int x,y,mn=1e7;
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
if (a[i][j]<mn) mn=a[i][j],x=i,y=j;
if (x!=) for (int i=;i<=m;i++) swap(a[x][i],a[][i]);
if (y!=) for (int i=;i<=n;i++) swap(a[i][y],a[i][]);
for (int i=;i<n;i++)
{
int mn=1e7,x;
for (int j=i;j<=n;j++)
if (a[j][]<mn) mn=a[j][],x=j;
if (i!=x) for (int j=;j<=m;j++) swap(a[i][j],a[x][j]);
}
for (int i=;i<m;i++)
{
int mn=1e7,x;
for (int j=i;j<=m;j++)
if (a[][j]<mn) mn=a[][j],x=j;
if (i!=x) for (int j=;j<=n;j++) swap(a[j][i],a[j][x]);
}
} void work2()
{
int x,y,mn=1e7;
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
if (b[i][j]<mn) mn=b[i][j],x=i,y=j;
if (x!=) for (int i=;i<=m;i++) swap(b[x][i],b[][i]);
if (y!=) for (int i=;i<=n;i++) swap(b[i][y],b[i][]);
for (int i=;i<n;i++)
{
int mn=1e7,x;
for (int j=i;j<=n;j++)
if (b[j][]<mn) mn=b[j][],x=j;
if (i!=x) for (int j=;j<=m;j++) swap(b[i][j],b[x][j]);
}
for (int i=;i<m;i++)
{
int mn=1e7,x;
for (int j=i;j<=m;j++)
if (b[][j]<mn) mn=b[][j],x=j;
if (i!=x) for (int j=;j<=n;j++) swap(b[j][i],b[j][x]);
}
} int main()
{
int T=read();
while (T--)
{
n=read(),m=read();
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
a[i][j]=read();
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
b[i][j]=read();
work1();work2();
int flag=;
for (int i=;i<=n;i++)
{
for (int j=;j<=m;j++)
if (a[i][j]!=b[i][j])
{
flag=;break;
}
if (flag) break;
}
if (flag) puts("NIE");
else puts("TAK");
}
return ;
}

bzoj 1142 [POI2009]Tab 最小表示的更多相关文章

  1. BZOJ 1142: [POI2009]Tab

    1142: [POI2009]Tab Time Limit: 40 Sec  Memory Limit: 162 MBSubmit: 213  Solved: 80[Submit][Status][D ...

  2. [BZOJ 1135][POI2009]Lyz

    [BZOJ 1135][POI2009]Lyz 题意 初始时滑冰俱乐部有 \(1\) 到 \(n\) 号的溜冰鞋各 \(k\) 双.已知 \(x\) 号脚的人可以穿 \(x\) 到 \(x+d\) 的 ...

  3. [BZOJ 2127] happiness 【最小割】

    题目链接:BZOJ - 2127 题目分析 首先,每个人要么学文科,要么学理科,所以可以想到是一个最小割模型. 我们就确定一个人如果和 S 相连就是学文,如果和 T 相连就是学理. 那么我们再来确定建 ...

  4. BZOJ.3532.[SDOI2014]LIS(最小割ISAP 退流)

    BZOJ 洛谷 \(LIS\)..经典模型? 令\(f_i\)表示以\(i\)结尾的\(LIS\)长度. 如果\(f_i=1\),连边\((S,i,INF)\):如果\(f_i=\max\limits ...

  5. BZOJ 2561 最小生成树 | 网络流 最小割

    链接 BZOJ 2561 题解 用Kruskal算法的思路来考虑,边(u, v, L)可能出现在最小生成树上,就是说对于所有边权小于L的边,u和v不能连通,即求最小割: 对于最大生成树的情况也一样.容 ...

  6. bzoj 1497 最大获利 - 最小割

    新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战.THU集团旗下的CS&T通讯公司在新一代通讯技术血战的前夜,需要做太多的准备工作,仅就站址选择一项,就需要完成前期市场研 ...

  7. bzoj 1119 [POI2009] SLO & bzoj 1697 牛排序 —— 置换+贪心

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1119 https://www.lydsy.com/JudgeOnline/problem.p ...

  8. BZOJ 1391: [Ceoi2008]order [最小割]

    1391: [Ceoi2008]order Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1509  Solved: 460[Submit][Statu ...

  9. BZOJ 1070: [SCOI2007]修车 [最小费用最大流]

    1070: [SCOI2007]修车 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 4936  Solved: 2032[Submit][Status] ...

随机推荐

  1. 181. Flip Bits【LintCode, by java】

    Description Determine the number of bits required to flip if you want to convert integer n to intege ...

  2. 【springmvc+mybatis项目实战】杰信商贸-5.生产厂家DAO+SERVICE+CONTROLLER+JSP+配置文件

    上一篇我们创建了工程和一个Factory的po对象(javaBean),我们也写好了Mapper的映射文件,接下来我们来完成生产厂家的DAO与SERVICE,以及CONTROLLER,还有做显示的JS ...

  3. 【Machine Learning】如何处理机器学习中的非均衡数据集?

    在机器学习中,我们常常会遇到不均衡的数据集.比如癌症数据集中,癌症样本的数量可能远少于非癌症样本的数量:在银行的信用数据集中,按期还款的客户数量可能远大于违约客户的样本数量.   比如非常有名的德国信 ...

  4. vscode开发智能合约

    开发工具 EOS 开发终极神器-vscode (你绝对找不到的干货) lome · 2018年04月19日 · 最后由 18636292520 回复于 2018年09月15日 · 15672 次阅读 ...

  5. pxe+kickstart无人值守安装

    常用软件安装及使用目录 第1章 以前是怎么安装系统的 l 光盘(ISO文件,光盘的镜像文件)===>每一台物理机都得给一个光驱,如果用外置光驱的话,是不是每台机器都需要插一下 l U盘:ISO镜 ...

  6. struts2之form标签theme属性详解

    struts2中theme属性包括xhtml,html,simple,ajax .默认是xhtml theme:设置struts2标签的主题,默认为xhtml. theme=xhtml时:会默认额外生 ...

  7. 自测之Lesson7:设备文件操作

    题目:请编写一个输入密码(不回显)的程序,要求通过设置终端来完成. 完成代码: #include <stdio.h> #include <unistd.h> #include ...

  8. .getClass()和.class的区别

    一直在想.class和.getClass()的区别,思索良久,有点思绪,然后有网上搜了搜,找到了如下的一篇文章,与大家分享. 原来为就是涉及到java的反射----- Java反射学习 所谓反射,可以 ...

  9. Swift-重写(Override)

    子类可以为继承来的实例方法(instance method),类方法(class method),实例属性(instance property),或附属脚本(subscript)提供自己定制的实现(i ...

  10. iOS开发allocWithZone介绍

    首先我们知道,我们需要保证单例类只有一个唯一的实例,而平时我们在初始化一个对象的时候, [[Class alloc] init],其实是做了两件事. alloc 给对象分配内存空间,init是对对象的 ...