UOJ 41 矩陣變換

2022-06-03 15:12:10 字數 1626 閱讀 9362

discription

給出乙個 n 行 m 列的矩陣a, 保證滿足以下性質:

1.m>n。

2.矩陣中每個數都是 [0,n] 中的自然數。

3.每行中, [1,n] 中每個自然數都恰好出現一次。這意味著每行中 0 恰好出現 m−n 次。

4.每列中,[1,n] 中每個自然數至多出現一次。

現在我們要在每行中選取乙個非零數,並把這個數之後的數賦值為這個數。我們希望保持上面的性質4,即每列中,[1,n] 中每個自然數仍然至多出現一次。

input

第一行乙個正整數 t,表示資料組數。

後面包含 t 組資料,各組資料之間無空行。每組資料以兩個正整數 n,m 開始,接下來 n 行,每行 m 個用空格隔開的整數,意義如題所述。

output

對於每組資料輸出一行。如果有解,則輸出 n 個整數,依次表示每一行取的數是多少。(這應該是乙個 1 到 n 的排列)如果無解,則輸出任意賣萌表情。

sample input25 

100 1 0 2 3 0 0 4 0 5

2 0 3 0 0 1 0 5 4 0

4 2 1 0 0 0 3 0 5 0

0 3 0 4 0 5 0 1 2 0

1 0 0 3 2 4 5 0 0 0

5 10

0 1 0 2 3 0 0 4 0 5

2 0 3 0 0 1 0 5 4 0

4 2 1 0 0 0 3 0 5 0

0 3 0 4 0 5 0 1 2 0

1 0 0 3 2 4 5 0 0 0

sample output

4 5 3 1 2

5 4 3 1 2

explanation 兩組輸入資料是相同的。由於結果不唯一,你可以給出任意一組合法答案

hint

對於 100% 的資料,n<200,m<400,t<50。

不難證明答案是乙個排列,所以就相當於一行 和乙個數匹配,並且要滿足:如果某一行i的某個數x在這一行選的數的左邊,並且x這個數在和x這個數匹配的行中的位置比x在i中的位置要靠左,那麼就是不合法的。

所以就想到了穩定婚姻問題,用每一行去盡量匹配在這一行靠前的位置的數,而如果有衝突的話 數要選擇 在那一行排在靠後位置的行。

#include#define ll long long

using namespace std;

#define pb push_back

const int maxn=205;

int t,n,m,v[maxn][maxn],now;

int pos[maxn],m[maxn][maxn];

int h[maxn],w[maxn];

queueq;

inline bool merry(int man,int woman)

return 0;

}inline void mate()

}inline void solve()

memset(pos,0,sizeof(pos));

mate();

for(int i=1;i<=n;i++) w[h[i]]=i;

for(int i=1;iprintf("%d\n",w[n]);

}int main()

transforms CTM,變換矩陣

quartz轉換實現的原理 quartz把繪圖分成兩個部分,使用者空間,即和裝置無關,裝置空間,使用者空間和裝置空間中間存在乙個轉換矩陣 ctm 本章實質是講解ctm quartz提供的3大功能 移動,旋轉,縮放 演示如下,首先載入一張 移動函式cgcontexttranslatectm mycon...

opengl 矩陣變換

opengl 矩陣變換 opengl 座標系的變換如下圖 我們給我們的圖形,設定好頂點座標後,通過model matrix 變換為世界座標,然後 view matrix相機座標,projection matrix 螢幕座標x,y 1,1 矩陣變換的結果是把三維的世界最終裁剪為二維的螢幕,數學的說法就...

OpenGL矩陣變換

現在考慮object座標系中的點p px,p y,pz 向camera座標系進行變換,object座標軸分別為xyz,camera座標軸分別為uvn p pxx pyy pz z 先只考慮旋轉變換,camera座標系的基向量可表示為 u v n u.xx u.yy u.zz v.xx v.yy v....