HDU-1528/1962 Card Game Cheater
2024-09-29 13:26:13
两组牌中两张牌相比能赢的就连,后求最大匹配。
#include <cmath>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <fstream>
#include <iostream> #define rep(i, l, r) for(int i=l; i<=r; i++)
#define clr(x, c) memset(x, c, sizeof(x))
#define N 32
#define MAX 1<<30
#define ll long long using namespace std;
int read()
{
int x=0, f=1; char ch=getchar();
while (ch<'0' || ch>'9') { if (ch=='-') f=-1; ch=getchar(); }
while (ch>='0' && ch<='9') { x=x*10+ch-'0'; ch=getchar(); }
return x*f;
}
int read2()
{
char s[5]; scanf("%s", s); int a;
if (s[0]=='T') a=32;
else if (s[0]=='J') a=36;
else if (s[0]=='Q') a=40;
else if (s[0]=='K') a=44;
else if (s[0]=='A') a=48;
else a=(s[0]-'2')*4;
if (s[1]=='H') a+=3;
else if (s[1]=='S') a+=2;
else if (s[1]=='D') a+=1;
return a;
} struct edge{int y, n;} e[N*N]; int fir[N], en;
int n, ka[N], kb[N], k[N], ans;
bool b[N]; void Add(int x, int y) { en++, e[en].y=y, e[en].n=fir[x], fir[x]=en; } bool Find(int x)
{
int o=fir[x], y=e[o].y;
while (o)
{
if (!b[y])
{
b[y]=1; if (!k[y] || Find(k[y])) { k[y]=x; return true; }
}
o=e[o].n, y=e[o].y;
}
return false;
} int main()
{
int t=read(); while (t--)
{
clr(fir, 0); clr(k, 0); en=ans=0;
n=read();
rep(i, 1, n) ka[i]=read2();
rep(i, 1, n) kb[i]=read2();
rep(i, 1, n) rep(j, 1, n) if (kb[j] > ka[i]) Add(i, j);
rep(i, 1, n)
{
clr(b, 0); if (Find(i)) ans++;
}
printf("%d\n", ans);
}
return 0;
}
最新文章
- 【转】40个良好用户界面Tips
- ExecutorService线程池应用
- GridView
- .net的垃圾回收机制简述
- springmvc使用RSA算法加密表单
- knockoutjs select onchange 下拉级联
- Storm系列(十二)架构分析之Worker-心跳信息处理
- SQL server语句测试
- CentOS LNMP安装phpMyAdmin
- Mysql 配置慢查询日志(SlowQueryLog)以及使用日志分析工具
- 蓝桥网试题 java 基础练习 特殊的数字
- 使用Ueditor编辑器上传图片总结;
- MySQL高可用复制管理工具 —— Orchestrator介绍
- 《精通python网络爬虫》笔记
- 阿里云服务器上安装mysql的详细步骤
- Locust 测试结果通过Matplotlib生成趋势图
- hdu2680 choose the best route
- 17、JAVA流程控制
- Android 开发怎样做代码加密或混淆?
- Leetcode 之Anagrams(35)