[POI2009]Tab
Description
2个n\(\times\)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
这题随便乱搞即可
找到第一个矩阵中的每一行应该对应第二个矩阵的某一行,然后求出置换序列,最后判断每一行的置换序列是否一样即可
然后找到对应的行数我就是sort+hash……反正巨蠢……
/*program from Wolfycz*/
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define inf 0x7f7f7f7f
using namespace std;
typedef long long ll;
typedef unsigned int ui;
typedef unsigned long long ull;
inline int read(){
int x=0,f=1;char ch=getchar();
for (;ch<'0'||ch>'9';ch=getchar()) if (ch=='-') f=-1;
for (;ch>='0'&&ch<='9';ch=getchar()) x=(x<<1)+(x<<3)+ch-'0';
return x*f;
}
inline void print(int x){
if (x>=10) print(x/10);
putchar(x%10+'0');
}
const int N=1e3,p=1e9+7,digit=233,limit=1e6;
int A[N+10][N+10],B[N+10][N+10],_A[N+10][N+10],_B[N+10][N+10];
int cnt[(limit<<1)+10],pol[N+10];
struct S1{
int hash,ID;
void insert(int a,int b){hash=a,ID=b;}
bool operator <(const S1 &x)const{return hash<x.hash;}
}HA[N+10],HB[N+10];
int n,m;
int Hash(int *a){
int res=0;
for (int i=1;i<=m;i++) res=(1ll*res*digit+a[i])%p;
return res;
}
void work(){
n=read(),m=read();
for (int i=1;i<=n;i++){
for (int j=1;j<=m;j++) A[i][j]=_A[i][j]=read()+limit;
sort(_A[i]+1,_A[i]+1+m);
HA[i].insert(Hash(_A[i]),i);
}
for (int i=1;i<=n;i++){
for (int j=1;j<=m;j++) B[i][j]=_B[i][j]=read()+limit;
sort(_B[i]+1,_B[i]+1+m);
HB[i].insert(Hash(_B[i]),i);
}
sort(HA+1,HA+1+n),sort(HB+1,HB+1+n);
for (int i=1;i<=n;i++) if (HA[i].hash!=HB[i].hash){printf("NIE\n");return;}
for (int i=1;i<=m;i++) cnt[B[HB[1].ID][i]]=i;
for (int i=1;i<=m;i++) pol[i]=cnt[A[HA[1].ID][i]];
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
if (A[HA[i].ID][j]!=B[HB[i].ID][pol[j]]){printf("NIE\n");return;}
printf("TAK\n");
}
int main(){
for (int Data=read();Data;Data--) work();
return 0;
}
[POI2009]Tab的更多相关文章
- BZOJ 1142: [POI2009]Tab
1142: [POI2009]Tab Time Limit: 40 Sec Memory Limit: 162 MBSubmit: 213 Solved: 80[Submit][Status][D ...
- bzoj 1142 [POI2009]Tab 最小表示
[POI2009]Tab Time Limit: 40 Sec Memory Limit: 162 MBSubmit: 373 Solved: 167[Submit][Status][Discus ...
- bzoj1142:[POI2009]Tab
传送门 考虑每次交换都不会改变每个数所在的行和列(不是指编号,而是指和它在同一行或者同一列的数不会发生变化) 由于每个数互不相同,所以记录下每个数所在的行和列,暴力判断就好了 代码: #include ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- android 使用Tabhost 发生could not create tab content because could not find view with id 错误
使用Tabhost的时候经常报:could not create tab content because could not find view with id 错误. 总结一下发生错误的原因,一般的 ...
- 谈谈一些有趣的CSS题目(八)-- 纯CSS的导航栏Tab切换方案
开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...
- GooglePlay 首页效果----tab的揭示效果(Reveal Effect) (1)
GooglePlay 首页效果----tab的揭示效果(Reveal Effect) (1) 前言: 无意打开GooglePlay app来着,然后发现首页用了揭示效果,连起来用着感觉还不错. 不清楚 ...
- 通过easyui tab添加的子页面JS脚本必须放在body才生效
通过easyui tab添加的子页面JS脚本必须放在body才生效 可通过Chrome查看元素时,head标签是否含有你自己写的JS代码
- jQuery的DOM操作实例(1)——选项卡&&Tab切换
一.原生JavaScript编写tab切换 二.jQuery编写tab切换 在用jQuery编写选项卡过程中,重要的事搞清楚 .eq() 和 .index() 的使用方法. .eq()是jQuery遍 ...
随机推荐
- nexus3.1私服搭建
原文:http://blog.csdn.net/qqqqq210/article/details/52993337 1.简介 近期公司需要搭建jenkins自动化构建部署,需要搭建nexus私服环境, ...
- 安装和配置Apache-tomcat
https://tomcat.apache.org/download-90.cgi 我随便下载了一个,而且解压了 我把路径:G:\php\apache-tomcat-9.0.6\bin 放入path, ...
- MySQL Study之--MySQL用户及权限管理
MySQL Study之--MySQL用户及权限管理 MySQLserver通过MySQL权限表来控制用户对数据库的訪问.MySQL权限表存放在mysql数据库里.由mysql_install ...
- C语言 字符串操作 笔记
/* C语言字符串的操作笔记 使用代码和注释结合方式记录 */ # include <stdio.h> # include <string.h> int main(void) ...
- 【bzoj1015】【JSOI2008】【星球大战】【并查集+离线】
Description 非常久曾经.在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器.并攻下了星系中差点儿全部的星球.这些星球 ...
- showModalDialog参数问题
showModalDialog传递参数: 1.参数拼接放在url中,参数过长或带特殊字符时,容易出现问题. 2.参数放在showModalDialog属性里 <script type=" ...
- 队列,管道,manager模块
###生产者消费者关系### 主要是解耦(高内聚,低耦合),借助队列来实现生产者消费者 模型 栈:先进后出(First In Last Out 简称:FILO) 队列:先进先出(First In Fi ...
- 【bzoj1071】[SCOI2007]组队
sum= A*h+B*s排序 然后枚举height和speed的最小值 然后用两个指针:先枚举speed最小值,然后一边枚举v的最小值一边查询符合条件的人数. #include<algorith ...
- and or 逻辑组合
SELECT * FROM ordertest_error_temp WHERE FROM_UNIXTIME(create_time,'%Y-%m-%d ')= CURDATE()AND( INST ...
- 替换Android自带apk【转】
本文转载自:http://www.voidcn.com/article/p-gonowdjh-vz.html 安卓自带的app放在/system/app/下,当我们想要替换这些应用时可以参考如下步骤: ...