[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;
}
posted @ 2018-05-28 22:09  Wolfycz  阅读(137)  评论(0编辑  收藏  举报