题意与分析

题意是这样的:有\(n\)张牌,然后第一行是Adam的牌,第二行是Eve的牌:每两个字符代表一张牌,第一个字符表示牌的点数,第二个表示牌的花色。Adam和Eve每次从自己的牌中选出一张牌进行比较,先看大小再看花色,花色顺序是C,D,S,H(依次增大),谁的牌大谁就加一分,问Eve最多能得到多少分。

思路:最大二分匹配,Eve的牌为集合1,Adam的牌为集合2,集合1中的牌与集合2中比它小的牌建立联系,找最大匹配。这种两个集合的要想到试试二分图。

代码

  1. /* ACM Code written by Sam X or his teammates.
  2. * Filename: hdu1528.cpp
  3. * Date: 2018-11-18
  4. */
  5. #include <bits/stdc++.h>
  6. #define INF 0x3f3f3f3f
  7. #define PB emplace_back
  8. #define MP make_pair
  9. #define fi first
  10. #define se second
  11. #define rep(i,a,b) for(repType i=(a); i<=(b); ++i)
  12. #define per(i,a,b) for(repType i=(a); i>=(b); --i)
  13. #define ZERO(x) memset(x, 0, sizeof(x))
  14. #define MS(x,y) memset(x, y, sizeof(x))
  15. #define ALL(x) (x).begin(), (x).end()
  16. #define QUICKIO \
  17. ios::sync_with_stdio(false); \
  18. cin.tie(0); \
  19. cout.tie(0);
  20. #define DEBUG(...) fprintf(stderr, __VA_ARGS__), fflush(stderr)
  21. using namespace std;
  22. using pi=pair<int,int>;
  23. using repType=int;
  24. using ll=long long;
  25. using ld=long double;
  26. using ull=unsigned long long;
  27. vector<pair<int,int> > A,E;
  28. inline int clr(char ch)
  29. {
  30. switch(ch)
  31. {
  32. case 'C': return 1;
  33. case 'D': return 2;
  34. case 'S': return 3;
  35. case 'H': return 4;
  36. }
  37. }
  38. inline int id(char ch)
  39. {
  40. if(ch>='0' && ch<='9') return ch-'0';
  41. switch(ch)
  42. {
  43. case 'T': return 10;
  44. case 'J': return 11;
  45. case 'Q': return 12;
  46. case 'K': return 13;
  47. case 'A': return 14;
  48. }
  49. }
  50. const int MAXN=30;
  51. int G[MAXN][MAXN];
  52. bool used[MAXN];
  53. int linker[MAXN],k;
  54. int dfs(int u)
  55. {
  56. rep(v,0,k-1)
  57. {
  58. if(G[u][v] && !used[v])
  59. {
  60. used[v]=true;
  61. if(linker[v]==-1 || dfs(linker[v]))
  62. {
  63. linker[v]=u;
  64. return true;
  65. }
  66. }
  67. }
  68. return false;
  69. }
  70. int hungary()
  71. {
  72. int res=0;
  73. MS(linker,-1);
  74. rep(i,0,k-1)
  75. {
  76. ZERO(used);
  77. if(dfs(i)) res++;
  78. }
  79. return res;
  80. }
  81. int main()
  82. {
  83. int T;
  84. scanf("%d", &T);
  85. while(T--)
  86. {
  87. ZERO(G);
  88. A.clear();
  89. E.clear();
  90. scanf("%d", &k);
  91. rep(i,1,k)
  92. {
  93. getchar();
  94. char chi,chc;
  95. scanf("%c%c", &chi, &chc);
  96. A.PB(id(chi),clr(chc));
  97. }
  98. rep(i,1,k)
  99. {
  100. getchar();
  101. char chi,chc;
  102. scanf("%c%c", &chi, &chc);
  103. E.PB(id(chi),clr(chc));
  104. }
  105. rep(i,0,k-1)
  106. {
  107. rep(j,0,k-1)
  108. {
  109. if(E[i]>A[j])
  110. G[i][j]=true;
  111. }
  112. }
  113. printf("%d\n", hungary());
  114. }
  115. return 0;
  116. }

「日常训练」Card Game Cheater(HDU-1528)的更多相关文章

  1. 「日常训练」ZgukistringZ(Codeforces Round #307 Div. 2 B)

    题意与分析(CodeForces 551B) 这他妈哪里是日常训练,这是日常弟中弟. 题意是这样的,给出一个字符串A,再给出两个字符串B,C,求A中任意量字符交换后(不限制次数)能够得到的使B,C作为 ...

  2. (简单匹配)Card Game Cheater -- hdu --1528

    http://acm.hdu.edu.cn/showproblem.php?pid=1528 Card Game Cheater Time Limit: 2000/1000 MS (Java/Othe ...

  3. 「日常训练」 神、上帝以及老天爷 (HDU 2048)

    题意 数论中的错排问题.记错排为Dn" role="presentation">DnDn,求Dnn!" role="presentation&q ...

  4. 「日常训练」 不容易系列之(3)—— LELE的RPG难题 (HDU 2045)

    题目简述 有排成一行的n" role="presentation">nn个方格,用红(Red).粉(Pink).绿(Green)三色涂每个格子,每格涂一色,要求任何 ...

  5. 「日常训练」 Fire!(UVA-11624)

    与其说是训练不如说是重温.重新写了Java版本的代码. import java.util.*; import java.math.*; import java.io.BufferedInputStre ...

  6. 「日常训练」COMMON 约数研究(HYSBZ-1968)

    题意与分析 感谢https://www.cnblogs.com/Leohh/p/7512960.html的题解.这题话说原来不在我的训练范围,正好有个同学问我,我就拿来做做.数学果然不是我擅长的啊,这 ...

  7. 「日常训练」Mike and Feet(Codeforces Round #305 Div. 2 D)

    题意 (Codeforces 548D) 对一个有$n$个数的数列,我们要求其连续$x(1\le x\le n)$(对于每个$x$,这样的连续group有若干个)的最小数的最大值. 分析 这是一道用了 ...

  8. 「日常训练」 Mike and Fun (CFR305D2B)

    题意(CodeForces 548B) 每次对01矩阵中的一位取反,问每次操作后,单列中最长连续1的长度. 分析 非常非常简单,但是我当时训练的时候WA了四次...无力吐槽了,人间 不值得.jpg 代 ...

  9. 「日常训练」Common Subexpression Elimination(UVa-12219)

    今天做的题目就是抱佛脚2333 懂的都懂. 这条题目干了好几天,最后还是参考别人的代码敲出来了,但是自己独立思考了两天多,还是有收获的. 思路分析 做这条题我是先按照之前的那条题目(The SetSt ...

随机推荐

  1. LayIM.NetClient 组件开发记录

    前言 好久没写博客了.前阶段看了下Hangfire组件,后来对其代码比较感兴趣,当时不太了解他如何生成的页面和一些访问请求等.后来看了下源代码,发现原来是 OWIN 在搞怪.于是乎开始深入研究Hang ...

  2. List环形双向链表

    实现一个环形的双向链表,链表的每个节点都保存三个信息,当前节点的值value,前一个节点的指针prev,后一个节点的指针next.因为是环形的,所以最后一个节点的next指向第一个节点,而第一个节点的 ...

  3. mybatis实现最简单的增删改查

    1.数据库设计 2.项目结构(针对User不用管Blogger) User.java package com.yunqing.mybatis.bean; public class User { pri ...

  4. MBTiles 离线地图演示 - 基于 Google Maps JavaScript API v3 + SQLite

    MBTiles 是一种地图瓦片存储的数据规范,它使用SQLite数据库,可大大提高海量地图瓦片的读取速度,比通过瓦片文件方式的读取要快很多,适用于Android.IPhone等智能手机的离线地图存储. ...

  5. web项目继承ServletContainerInitializer进行访问HttpServlet(WebServlet)

    java使用web项目不需要加web.xml 配置javax.servlet.ServletContainerInitializer 1.在src目录创建META-INF,META-INF目录下创建s ...

  6. 第28章 LTDC—液晶显示中英文

    本章参考资料:<STM32F76xxx参考手册>.<STM32F7xx规格书>.库帮助文档<STM32F779xx_User_Manual.chm>. 关于开发板配 ...

  7. Unity3D Errors And Fix

    Author Error: Shader warning in 'Custom/ShowAnimation': Not enough temporary registers, needs 9 (com ...

  8. Undefined symbols for architecture arm64: "_OBJC_CLASS_$XXX", referenced from: objc-class-ref in XXX

    ld: symbol(s) not found for architecture arm64 clang: error: linker command failed with exit code 1 ...

  9. 开发类似"音速启动"的原创工具简码"万能助手"的过程中对ztree.js与win标准控件treeview、HTMLayout树形框等优缺点的比较

    在开发类似"音速启动"的桌面快捷方式管理软件简码"万能助手"的早期规划中,曾经考虑过几种树形框方案: ztree.js.win标准控件treeview.HTML ...

  10. 分布式版本控制系统之Git

    Git Git 是目前世界上最先进的分布式版本控制系统(没有之一) 作用 源代码管理 为什么要进行源代码管理? 方便多人协同开发 方便版本控制 Git的诞生 作者是 Linux 之父:Linus Be ...