速配游戏C/C++ 求解, 高手支招!!!
速配游戏
Time Limit: 5000MS Memory Limit: 65535KB
Total Submissions: 176 Accepted: 52
Description:
有一个速配电视节目。N位男士和N位女士要在摄像机前选出他们合适的情侣。每位女士按照其对每位男士作为配偶的偏爱程度给每位男士排名次,每位男士也按照其对每位女士作为配偶的偏好程度给每位女士排名次。这些名次不允许并列。然后每位男士将向心仪的对像求婚,经过“残酷”的竞争之后各自找到合适的情侣。
最开始的时候每位男士都没有被任何一位女士拒绝。求婚环节会经过很多轮进行,每一轮:
(1)每位男士从还没有拒绝过自己的女士中选出自己认为最理想的一个,并向她求婚。
(2)每位女士在所有这一轮中从向她求婚的男士中选出自己认为最理想的一个,并不答应,也不拒绝。她把其余向她求婚的男士都婉言拒绝掉。
经过若干轮的求婚之后,在某一轮,幸运的事情发生了:所有的女士都恰好有一个求婚者,所有的男士都找到一个心仪的对像。主持人将继续指出这个配对方式的神奇之处:没有任意的两个配对,例如男士A和女士a配对,男士B和女士b配对,使得在A心中b较a更理想,而且在b心中A比B更理想(这样A和b就会“私奔”)。因此,主持人总结说,这个配对是非常合理的。(他知道,这种情况是一定会发生的。)
主持人在节目之前已经知道男士和女士之间的偏爱情况,他想预先知道最后的匹配结果是怎么样的,能帮帮他吗?
Input:
第一行包括一个数字N(1《=N《=1000)
以下N*2行,每行有N个数字。第i+1行(1<=i《=N)表示编号为i的男士对女士们的排序(从最喜欢的到最不喜欢的)。第N+j+1行(1《=j<=N)表示编号为j的女士对男士们的排序(同样从最喜欢的到最不喜欢的)。
Output:
N行,每行包括一个数字。第i行的数字表示与编号为i的男士匹配的女士的编号。
Sample Input:
3
1 2 3
2 3 1
2 1 3
3 2 1
2 3 1
2 3 1
Sample Output:
3
2
1