学校招收学生   优先级按照:  分数  是否本地  志愿先后

相当于 女的开后宫

对gs进行略微修改

结束的条件为每个男的表白完所有女的

第二部分比较时    找出女的后宫里的吸引力最弱的男的比较  然后是否取代

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<cmath>
  5. #define N 200
  6. #define eps 1e-6
  7. using namespace std;
  8. struct node
  9. {
  10. int id,region,score,k;
  11. }stu[N];
  12. struct node1
  13. {
  14. int region,num;
  15. }sch[N];
  16. struct node2
  17. {
  18. int cnt;
  19. int manname[N];
  20. }woman[N];
  21. int r,n,m;
  22. int map1[N][N],map2[N][N],man[N],times[N],vis[N];
  23. int cmp(node a,node b)
  24. {
  25. if(a.region==r)
  26. {
  27. if(b.region==r)
  28. return a.score>b.score;
  29. if(b.region!=r)
  30. {
  31. if(abs(a.score-0.7*b.score)<eps)
  32. return ;
  33. else
  34. return a.score>0.7*b.score;
  35. }
  36. }
  37. else if(b.region==r)
  38. {
  39. if(a.region==r)
  40. return a.score>b.score;
  41. if(a.region!=r)
  42. {
  43. if(abs(b.score-0.7*a.score)<eps)
  44. return ;
  45. else
  46. return b.score<0.7*a.score;
  47. }
  48. }
  49. else
  50. return a.score>b.score;
  51. }
  52. int cmp1(node a,node b)
  53. {
  54. return a.id<b.id;
  55. }
  56. void makerank()
  57. {
  58. int i,j;
  59. for(i=;i<=m;i++)
  60. {
  61. r=sch[i].region;
  62. sort(stu+,stu+n+,cmp);
  63. for(j=;j<=n;j++)
  64. map2[i][stu[j].id]=j;
  65. }
  66. sort(stu+,stu+n+,cmp1);
  67. }
  68. void Gale_Shapley()
  69. {
  70. int flag=,i,j,worstrank,worstrankj;
  71. memset(man,,sizeof(man));
  72. for(i=;i<=n;i++)
  73. times[i]=;
  74. for(i=;i<=n;i++)
  75. vis[i]=;
  76. for(i=;i<=m;i++)
  77. woman[i].cnt=;
  78. while(flag)
  79. {
  80. flag=;
  81. for(i=;i<=n;i++)
  82. {
  83. while(!man[i]&&!vis[i])
  84. {
  85. flag=;
  86. if(times[i]>stu[i].k)
  87. {
  88. vis[i]=;
  89. break;
  90. }
  91. int name=map1[i][times[i]];
  92. if(woman[name].cnt<sch[name].num)
  93. {
  94. woman[name].manname[++woman[name].cnt]=i;
  95. man[i]=name;
  96. times[i]++;
  97. }
  98. else if(woman[name].cnt==sch[name].num)
  99. {
  100. worstrank=;
  101. for(j=;j<=woman[name].cnt;j++)
  102. {
  103. if(map2[name][woman[name].manname[j]]>worstrank)
  104. {
  105. worstrank=map2[name][woman[name].manname[j]];
  106. worstrankj=j;
  107. }
  108. }
  109. if(map2[name][i]<worstrank)
  110. {
  111. man[woman[name].manname[worstrankj]]=;
  112. woman[name].manname[worstrankj]=i;
  113. man[i]=name;
  114. times[i]++;
  115. }
  116. else
  117. times[i]++;
  118. }
  119. }
  120. }
  121. }
  122. }
  123. int main()
  124. {
  125. int T,j,i;
  126. scanf("%d",&T);
  127. while(T--)
  128. {
  129. memset(map1,,sizeof(map1));
  130. memset(map2,,sizeof(map2));
  131. scanf("%d%d",&n,&m);
  132. for(i=;i<=n;i++)
  133. {
  134. stu[i].id=i;
  135. scanf("%d%d%d",&stu[i].region,&stu[i].score,&stu[i].k);
  136. for(j=;j<=stu[i].k;j++)
  137. {
  138. scanf("%d",&map1[i][j]);
  139. }
  140. }
  141. for(i=;i<=m;i++)
  142. {
  143. scanf("%d%d",&sch[i].region,&sch[i].num);
  144. }
  145. makerank();
  146. Gale_Shapley();
  147. for(i=;i<=n;i++)
  148. if(vis[i])
  149. printf("not accepted\n");
  150. else
  151. printf("%d\n",man[i]);
  152. if(T) printf("\n");
  153. }
  154. return ;
  155. }

University Entrace Examination zoj1023的更多相关文章

  1. POJ题目细究

    acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP:  1011   NTA                 简单题  1013   Great Equipment     简单题  102 ...

  2. 【转】POJ百道水题列表

    以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight ...

  3. POJ题目排序的Java程序

    POJ 排序的思想就是根据选取范围的题目的totalSubmittedNumber和totalAcceptedNumber计算一个avgAcceptRate. 每一道题都有一个value,value ...

  4. HDU 4442 Physical Examination

    Physical Examination Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64 ...

  5. HDU 4442 Physical Examination(贪心)

    HDU 4442 Physical Examination(贪心) 题目链接http://acm.split.hdu.edu.cn/showproblem.php?pid=4442 Descripti ...

  6. hdu 4442 Physical Examination 贪心排序

    Physical Examination Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...

  7. CSUOJ 1603 Scheduling the final examination

    1603: Scheduling the final examination Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 49  Solved: 1 ...

  8. 2017 New Year’s Greetings from Sun Yat-sen University

    As winter turns to spring, the world around us begins to take on an air of freshness. As  2017 is fa ...

  9. Divide and conquer:Moo University - Financial Aid(POJ 2010)

    Moo University - Financial Aid 其实是老题了http://www.cnblogs.com/Philip-Tell-Truth/p/4926008.html 这一次我们换二 ...

随机推荐

  1. 【BZOJ1559】[JSOI2009]密码(AC自动机,动态规划,搜索)

    [BZOJ1559][JSOI2009]密码(AC自动机,动态规划,搜索) 题面 BZOJ 洛谷 题解 首先求方案数显然是构建\(AC\)自动机之后再状压\(dp\),似乎没有什么好讲的. 现在考虑答 ...

  2. 同一台机器安装多个MySQL服务

    在同一个服务器上面安装多个MySQL服务,甚至是安装多个不同版本(比如5.7和5.7.5.7和8.0.12),关键在于区分安装目录.数据目录和使用端口等. 可以下面步骤 安装MySQL1 wget h ...

  3. Mac安装mysql8.0.12

    ···shell 下载 wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.12-macos10.13-x86_64.tar.gz ...

  4. VirtualBox安装Centos后实现文件夹共享

    不同虚拟机中的系统和windows之间实现文件共享方式也不一样,在VMWare虚拟机请参考链接:http://www.cnblogs.com/vincentfu/p/5402666.html 进入主题 ...

  5. JQuery中2个等号与3个等号的区别

    首先,== equality 等同,=== identity 恒等.==, 两边值类型不同的时候,要先进行类型转换,再比较.===,不做类型转换,类型不同的一定不等. 下面分别说明:先说 ===,这个 ...

  6. angularJs的各种服务和指令的使用场景

    $location服务,获取页面跳转带的参数 比如说页面是这样的  localhost:9102/admin/goods.html#?id=123   如何获取这个id=123的值呢?????(注意: ...

  7. 实现vue2.0响应式的基本思路

    最近看了vue2.0源码关于响应式的实现,以下博文将通过简单的代码还原vue2.0关于响应式的实现思路. 注意,这里只是实现思路的还原,对于里面各种细节的实现,比如说数组里面数据的操作的监听,以及对象 ...

  8. Nginx学习总结

    2017年2月23日, 星期四 Nginx学习总结 Nginx是目前比较主流的HTTP反向代理服务器(其企业版提供了基于TCP层的反向代理插件),对于构建大型分布式web应用,具有举足轻重的作用.简单 ...

  9. HTML5 移动开发(CSS3设计移动页面样式)

    1.如何创建CSS样式表 2.CSS3的卓越特性 3.基于设备属性改变样式的媒体查询 4.如何使用属性改变元标签创建更美观移动页面   层叠样式表是移动WEB开发中的一个重要组成部分,本次分享将学到如 ...

  10. es6笔记(3.1)三个点的“...”的作用

    展开运算符(spread operator) ES6中"..."的作用之一是,展开运算符. 顾名思义,它的作用是把某些结合数据展开. 在Array.Object.Set和Map上都 ...