| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
狂wa,不知道错哪了。。。哪位大牛帮忙看看,不剩感激题目主要思路就是套用的吉大模板~~ 自己感觉也是正确的,不知道为什么总错
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#define see(x) cout<<#x<<":"<<x<<endl;
using namespace std;
const int N = 30;
struct People{
bool state;
int opp;
int tag;
int list[N];
int priority[N];
void Ini(){state=false; tag=0;}
}man[N], woman[N];
int cman[N], cwoman[N];
char ccman[N], ccwoman[N];
struct R{
int opp, own;
}request[N];
struct Sortt{
char man, woman;
bool operator < (const Sortt &a) const{
return man<a.man;
}
}sortt[N];
int n;
void stableMatching(){
int k, i, idd;
for(k=0;k<n;k++){
idd=0;
for(i=0;i<n;i++){
if(man[i].state==0){
request[idd].opp = man[i].list[man[i].tag];//自由man[i]想结合的woman编号
request[idd].own = i; //自由的man的编号
man[i].tag ++;
idd++;
}
}
if(idd==0) break;
for(i=0;i<idd;i++){
if(woman[request[i].opp].state==0){ //woman是自由的
woman[request[i].opp].opp = request[i].own;//woman的约会对象编号
woman[request[i].opp].state = 1;
man[request[i].own].opp = request[i].opp;//man的约会对象编号
man[request[i].own].state = 1;
}
else{
if(woman[request[i].opp].priority[woman[request[i].opp].opp] > woman[request[i].opp].priority[request[i].own] ){ //
//现配偶的优先级编号>此时的man 即优先级落后于此man
man[woman[request[i].opp].opp].state = 0;//解放woman现配偶
woman[request[i].opp].opp = request[i].own;
man[request[i].own].opp = request[i].opp;
man[request[i].own].state = 1;
}
}
}
}
}
int main(){
int T, t, i, j, k, l, m;
char ch, tmp;
scanf("%d",&T);
for(t=0;t<T;t++){
// memset(man,0,sizeof(man));
// memset(woman,0,sizeof(woman));
scanf("%d",&n);
for(i=0;i<n;i++){
getchar();
scanf("%c",&ch);
cman[ch-'a'] = i;
ccman[i] = ch;
}
for(i=0;i<n;i++){
getchar();
scanf("%c",&ch);
cwoman[ch-'A'] = i;
ccwoman[i] = ch;
}
for(i=0;i<n;i++){
getchar();
scanf("%c:",&tmp);
int d = cman[tmp-'a'];
man[d].Ini();
for(j=0;j<n;j++){
scanf("%c",&ch);
man[d].list[j] = cwoman[ch-'A'];
}
}
for(i=0;i<n;i++){
getchar();
scanf("%c:",&tmp);
int d = cwoman[tmp-'A'];
woman[d].Ini();
for(j=0;j<n;j++){
scanf("%c",&ch);
woman[d].priority[cman[ch-'a']]= j;
}
}
stableMatching();
for(i=0;i<n;i++){
sortt[i].man = ccman[i]; sortt[i].woman = ccwoman[man[i].opp];
}
sort(sortt,sortt+n);
for(i=0;i<n;i++){
printf("%c %c\n",sortt[i].man,sortt[i].woman);
}
cout<<endl;
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator