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 longusing 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....