1. 程式人生 > >Codeforce Round #546(Div2)

Codeforce Round #546(Div2)

有環 給定 ack orz 兩個 clas 最長 include ...

  這次開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最長路...然後發現有環最長路會無限循環?(這東西都忘了,我真是個弟弟...)

  牛批網友:

  

Codeforce Round #546(Div2)