这次开VP做的..
C:
题意:给两个矩阵A,B;对A的每次变换可以选择A的任意一个正方形子矩阵T使其行列互换(Ti,j =>Tj,i)问A是否可以经过若凡此变换成为矩阵B
比赛的时候这题不会(当时只想着如何对主对角线操作了,还异或了一下看哪些是变化的...),赛后看题解发现,因为每次变换都是以主对角线为对称轴,那么无论怎么变换,同一条副对角线上的数只会改变顺序,不会改变数,所以对每条副对角线排序看一下变换前后是不是全等就OK,(牛批网友真是牛批orz....)
代码如下:
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,m; 4 const int maxn=5e2+5; 5 int a[maxn][maxn],b[maxn][maxn]; 6 int vis[maxn][maxn]; 7 vector<int>v1[maxn*2],v2[maxn*2]; 8 int main() 9 { 10 ios::sync_with_stdio(0); 11 cin>>n>>m; 12 for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) cin>>a[i][j]; 13 for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) cin>>b[i][j]; 14 for(int i=1;i<=n;++i) 15 { 16 for(int j=1;j<=m;++j) 17 { 18 v1[i+j].push_back(a[i][j]); 19 v2[i+j].push_back(b[i][j]); 20 } 21 } 22 for(int i=2;i<=n+m;++i) 23 { 24 sort(v1[i].begin(),v1[i].end()); 25 sort(v2[i].begin(),v2[i].end()); 26 for(int j=0;j<v1[i].size();++j) 27 { 28 if(v1[i][j]!=v2[i][j]) 29 { 30 cout<<"NO"; 31 return 0; 32 } 33 } 34 } 35 cout<<"YES"; 36 }
D:疯狂xjb理解错题意的一道题emmmm
正确题意:对于序列n给定1~n的一个全排列代表位置i有编号为ai的一个同学,已知小明在队伍的最后一个. 给你m个数对(u,v),表示编号为u和v的两个同学可以交换(只有两人相邻的时候才可以交换),
求:小明最多可以前进多少步
一开始写了个dij最长路...然后发现有环最长路会无限循环?(这东西都忘了,我真是个弟弟...)
牛批网友: