zoukankan      html  css  js  c++  java
  • poj 3487 稳定婚姻

     1 /**
     2      稳定婚姻:男生不停的求婚,女生不停地拒绝
     3 **/
     4 
     5 #include <iostream>
     6 #include <queue>
     7 #include <cstdio>
     8 #include <cstring>
     9 using namespace std;
    10 #define maxn 40
    11 int pref[maxn][maxn],order[maxn][maxn],next[maxn];
    12 int future_wife[maxn],future_huaband[maxn];
    13 int man[maxn];
    14 queue<int > q;
    15 char str[50];
    16 void engage(int man,int woman){
    17     int m = future_huaband[woman];
    18     if(m){
    19         future_wife[m] =0;
    20         q.push(m);
    21     }
    22     future_huaband[woman] = man;
    23     future_wife[man] = woman;
    24 }
    25 int main()
    26 {
    27     int t;
    28     scanf("%d",&t);
    29     while(t--){
    30         memset(man,0,sizeof(man));
    31         int n;
    32         scanf("%d",&n);
    33         char  c;
    34         for(int i=0;i<n;i++){//
    35             cin>>c;
    36             man[c-'a'+1] =1;
    37         }
    38         for(int i=0;i<n;i++)//
    39             cin>>c;
    40         for(int i=1;i<=n;i++){//男喜欢
    41             cin>>str;
    42         //cout<<str<<endl;
    43             int temp = str[0]-'a'+1;//哪个男生
    44             //cout<<temp<<endl;
    45             for(int j=2;str[j];j++){
    46                 pref[temp][j-1] = str[j]-'A'+1;
    47                 //cout<<pref[temp][j]<<endl;
    48             }
    49             next[temp] = 1;
    50             future_wife[temp] =0;
    51             q.push(temp);
    52         }
    53         for(int i=1;i<=n;i++){
    54             cin>>str;
    55             //cout<<str<<endl;
    56             int temp = str[0]-'A'+1;
    57             for(int j=2;str[j];j++){
    58                 order[temp][str[j]-'a'+1] = j-1;
    59             }
    60             future_huaband[temp] =0;
    61         }
    62         while(!q.empty()){
    63             int man = q.front();
    64             q.pop();
    65             int woman = pref[man][next[man]++];
    66             if(!future_huaband[woman]){
    67                 engage(man,woman);
    68             }else if(order[woman][man]<order[woman][future_huaband[woman]]){
    69                 engage(man,woman);
    70             }else
    71                 q.push(man);
    72         }
    73         while(!q.empty()) q.pop();
    74         for(int i=1;i<maxn;i++)if(man[i]){
    75             printf("%c %c
    ",(char)(i-1+'a'),(char)(future_wife[i]-1+'A'));
    76         }
    77         if(t)
    78             printf("
    ");
    79     }
    80     return 0;
    81 }
  • 相关阅读:
    【LeetCode】Rotate List
    【LeetCode】Longest Valid Parentheses
    【LeetCode】Longest Substring Without Repeating Characters
    【LeetCode】Multiply Strings
    【LeetCode】Triangle
    hdfs 查看报告--命令(hdfs dfsadmin -report)
    hive
    java ---面向对象
    java--数组
    java--函数
  • 原文地址:https://www.cnblogs.com/Bang-cansee/p/3724274.html
Copyright © 2011-2022 走看看