解题:POI 2009 TAB

题面

这也算是个套路题(算吗)?发现换来换去每行每列数的组成是不变的,那么就把每行每列拎出来哈希一下,复杂度$O(Tn^2log$ $n)$有点卡时=。=。

然而正解似乎不需要哈希,就像这样↓

 1  for(int i=1;i<=n;i++)
 2             for(int j=1;j<=m;j++){
 3                 int xxx=read();
 4                 x[xxx+A]=i;
 5                 y[xxx+A]=j;
 6             }
 7         bool b=true;
 8         for(int i=1;i<=n;i++){
 9             for(int j=1;j<=m;j++){
10                 a[i][j]=read();
11                 if(x[a[i][j]+A]!=x[a[i][1]+A]||x[a[i][j]+A]==0)b=false;
12                 if(y[a[i][j]+A]!=y[a[1][j]+A]||y[a[i][j]+A]==0)b=false;
13             }
14         }

(来自洛谷题解,侵删)

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #define ull unsigned long long
 5 using namespace std;
 6 const int N=1005,P=1e6;
 7 const long long bas=2332333;
 8 ull tmp[N],hsh[2][2*N];
 9 int mapp[N][N],n,m,T;
10 int main ()
11 {
12     register int i,j,k;
13     scanf("%d",&T);
14     while(T--)
15     {
16         scanf("%d%d",&n,&m);
17         memset(hsh,0,sizeof hsh);
18         for(k=0;k<=1;k++)
19         {
20             for(i=1;i<=n;i++)
21                 for(j=1;j<=m;j++)
22                     scanf("%d",&mapp[i][j]),mapp[i][j]+=P;
23             for(i=1;i<=n;i++)    
24             {
25                 for(j=1;j<=m;j++)
26                     tmp[j]=mapp[i][j];
27                 sort(tmp+1,tmp+1+m);
28                 for(j=1;j<=m;j++)
29                     hsh[k][i]=hsh[k][i]*bas+tmp[j];
30             }
31             for(i=1;i<=m;i++)
32             {
33                 for(j=1;j<=n;j++)
34                     tmp[j]=mapp[j][i];
35                 sort(tmp+1,tmp+1+n);
36                 for(j=1;j<=n;j++)
37                     hsh[k][i+n]=hsh[k][i+n]*bas+tmp[j];
38             }
39         }
40         sort(hsh[0]+1,hsh[0]+1+n+m);    
41         sort(hsh[1]+1,hsh[1]+1+n+m);
42         bool f=true;    
43         for(i=1;i<=n+m&&f;i++)
44             if(hsh[0][i]!=hsh[1][i]) f=false;
45         f?printf("TAK
"):printf("NIE
"); 
46     }
47     return 0;
48 } 
View Code
原文地址:https://www.cnblogs.com/ydnhaha/p/9925977.html