Card Game Cheater(贪心+二分匹配)
Card Game Cheater
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1566 Accepted Submission(s): 822
and Eve play a card game using a regular deck of 52 cards. The rules
are simple. The players sit on opposite sides of a table, facing each
other. Each player gets k cards from the deck and, after looking at
them, places the cards face down in a row on the table. Adam’s cards are
numbered from 1 to k from his left, and Eve’s cards are numbered 1 to k
from her right (so Eve’s i:th card is opposite Adam’s i:th card). The
cards are turned face up, and points are awarded as follows (for each i ∈
{1, . . . , k}):
If Adam’s i:th card beats Eve’s i:th card, then Adam gets one point.
If Eve’s i:th card beats Adam’s i:th card, then Eve gets one point.
A
card with higher value always beats a card with a lower value: a three
beats a two, a four beats a three and a two, etc. An ace beats every
card except (possibly) another ace.
If the two i:th cards
have the same value, then the suit determines who wins: hearts beats all
other suits, spades beats all suits except hearts, diamond beats only
clubs, and clubs does not beat any suit.
For example, the ten of spades beats the ten of diamonds but not the Jack of clubs.
This
ought to be a game of chance, but lately Eve is winning most of the
time, and the reason is that she has started to use marked cards. In
other words, she knows which cards Adam has on the table before he turns
them face up. Using this information she orders her own cards so that
she gets as many points as possible.
Your task is to, given Adam’s and Eve’s cards, determine how many points Eve will get if she plays optimally.
will be several test cases. The first line of input will contain a
single positive integer N giving the number of test cases. After that
line follow the test cases.
Each test case starts with a line
with a single positive integer k <= 26 which is the number of cards
each player gets. The next line describes the k cards Adam has placed on
the table, left to right. The next line describes the k cards Eve has
(but she has not yet placed them on the table). A card is described by
two characters, the first one being its value (2, 3, 4, 5, 6, 7, 8 ,9,
T, J, Q, K, or A), and the second one being its suit (C, D, S, or H).
Cards are separated by white spaces. So if Adam’s cards are the ten of
clubs, the two of hearts, and the Jack of diamonds, that could be
described by the line
TC 2H JD
each test case output a single line with the number of points Eve gets
if she picks the optimal way to arrange her cards on the table.
1
JD
JH
2
5D TC
4C 5H
3
2H 3H 4H
2D 3D 4D
1
2
题目大意:
a和b手上都有n张牌,b的一张牌赢了a的一张牌,b就得一分,问b能得多少分。
二分最大匹配代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define mem(x,y) memset(x,y,sizeof(x))
using namespace std;
const int INF=0x3f3f3f3f;
const int MAXN=;
struct Node{
int v;
}a[MAXN],b[MAXN];
int mp[MAXN][MAXN];
int vis[MAXN],usd[MAXN];
int N;
int getnum(char *s,Node &temp){
int x=;
if(s[]=='A')x=;
else if(s[]=='T')x=;
else if(s[]=='J')x=;
else if(s[]=='Q')x=;
else if(s[]=='K')x=;
else if(s[]>=''&&s[]<='')x=s[]-'';
x=x*;
if(s[]=='C')x+=;
else if(s[]=='D')x+=;
else if(s[]=='S')x+=;
else if(s[]=='H')x+=;
temp.v=x;
}
bool dfs(int u){
for(int i=;i<=N;i++){
if(!vis[i]&&mp[u][i]){
vis[i]=;
if(!usd[i]||dfs(usd[i])){
usd[i]=u;
return true;
}
}
}
return false;
}
int main(){
int T;
char s[];
scanf("%d",&T);
while(T--){
mem(mp,);
scanf("%d",&N);
for(int i=;i<=N;i++){
scanf("%s",s);
getnum(s,a[i]);
}
for(int i=;i<=N;i++){
scanf("%s",s);getnum(s,b[i]);
for(int j=;j<=N;j++)
if(b[i].v>a[j].v)mp[i][j]=;
}
mem(usd,);
int ans=;
for(int i=;i<=N;i++){
mem(vis,);
if(dfs(i))ans++;
}
printf("%d\n",ans);
}
return ;
}
贪心:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define mem(x,y) memset(x,y,sizeof(x))
using namespace std;
typedef long long LL;
const int INF=0x3f3f3f3f;
int a[],b[];
char s[];
int getnum(){
int x=;
if(s[]=='A')x=;
else if(s[]=='T')x=;
else if(s[]=='J')x=;
else if(s[]=='Q')x=;
else if(s[]=='K')x=;
else if(s[]>=''&&s[]<='')x=s[]-'';
x=x*;
if(s[]=='C')x+=;
else if(s[]=='D')x+=;
else if(s[]=='S')x+=;
else if(s[]=='H')x+=;
return x;
}
int main(){
int T,N;
scanf("%d",&T);
while(T--){
scanf("%d",&N);
for(int i=;i<N;i++){
scanf("%s",s);
a[i]=getnum();
}
for(int i=;i<N;i++){
scanf("%s",s);
b[i]=getnum();
}
// for(int i=0;i<N;i++)printf("%d ",a[i]);puts("");
// for(int i=0;i<N;i++)printf("%d ",b[i]);puts("");
sort(a,a+N);sort(b,b+N);
int ans=;
for(int i=,j=;i<N&&j<N;){
if(b[i]>=a[j]){
i++;j++;ans++;
}
else i++;
}
printf("%d\n",ans);
}
return ;
}
Card Game Cheater(贪心+二分匹配)的更多相关文章
- hdu 1528 Card Game Cheater (二分匹配)
Card Game Cheater Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- (hdu step 6.3.5)Card Game Cheater(匹配的最大数:a与b打牌,问b赢a多少次)
称号: Card Game Cheater Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- (简单匹配)Card Game Cheater -- hdu --1528
http://acm.hdu.edu.cn/showproblem.php?pid=1528 Card Game Cheater Time Limit: 2000/1000 MS (Java/Othe ...
- hdu----(1528)Card Game Cheater(最大匹配/贪心)
Card Game Cheater Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- 【HDU 2255】奔小康赚大钱 (最佳二分匹配KM算法)
奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals) Problem D (Codeforces 831D) - 贪心 - 二分答案 - 动态规划
There are n people and k keys on a straight line. Every person wants to get to the office which is l ...
- HDU 6178 Monkeys(树上的二分匹配)
http://acm.hdu.edu.cn/showproblem.php?pid=6178 题意:现在有一n个顶点的树形图,还有k只猴子,每个顶点只能容纳一只猴子,而且每只猴子至少和另外一只猴子通过 ...
- HDOJ 1528 Card Game Cheater
版权声明:来自: 码代码的猿猿的AC之路 http://blog.csdn.net/ck_boss https://blog.csdn.net/u012797220/article/details/3 ...
- 【DFS求树的最大二分匹配+输入外挂】HDU 6178 Monkeys
http://acm.hdu.edu.cn/showproblem.php?pid=6178 [题意] 给定一棵有n个结点的树,现在有k个猴子分布在k个结点上,我们可以删去树上的一些边,使得k个猴子每 ...
随机推荐
- Asp.net 提供程序模型
需要说明一下几点 1.什么是提供程序? 2.ASP.NET 4.5 中的提供程序 3.配置提供程序 有一下几种存储状态的方式 1.应用程序状态 2.会话状态 3.高速缓存状态 4.cookie 5.查 ...
- Core Data Stack学习笔记
Entity Entities 实体->数据表一个实体可以表示一个数据模型 1> 通过图形化界面可以建立一个模型关系图,可以指定一对多,多对一,多对多的数据关系 -在数据库开发中,少用多对 ...
- C++数组与指针
指向数组元素的指针 一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址.指针变量既然可以指向变量,当然也可以指向数组元素(把某一元素的地址放到一个指针变量中) ...
- Problem C Andy's First Dictionary(set的使用)
题目链接:Problem C 题意:输入一个文本,找出所有不同的单词,按照字典序从小到大输出,单词不区分大小写. 思路:将字母序列都存为小写,非字母的字符变成空格,然后利用stringstream实现 ...
- La=LaULb (单链表)
#include<stdio.h> typedef struct LNode { int data; struct LNode *next; }LNode,*LinkList; void ...
- c语言(3)--运算符&表达式&语句
计算机的本职工作是进行一系列的运算,C语言为不同的运算提供了不同的运算符! 1.那些运算符们 .基本运算符 算术运算符:+ - * / % ++ -- 赋值运算符:= 逗号运算符:, 关系运算符:& ...
- The introduction to Web.config of ASP.NET #Reprinted#
花了点时间整理了一下ASP.NET Web.config配置文件的基本使用方法.很适合新手参看,由于Web.config在使用很灵活,可以自定义一些节点.所以这里只介绍一些比较常用的节点. <? ...
- IOS 定位服务与地图的应用开发
1.定位服务 现在的移动设备很多都提供定位服务,IOS设备提供3种不同定位途径: (1)WiFi定位,通过查询一个WiFi路由器的地理位置的信息,比较省电:IPhone,IPod touch和IPad ...
- 转:PAT练习题概览
AT(pat.zju.edu.cn)是一个面向 C/C++程序的 Online Judge 系统.相比 ZOJ,HDOJ,POJ 等 ACM 题库,PAT 的题目非常基础,对于数据结构.算法的入门是比 ...
- 程序员眼中的UML
--克服用例图的恐惧 在实际工作中,大部分程序员很少接触到需求分析,即使有需求分析,也是草草了事,没有用正规的方式来表达,所以一般程序员使用用例图的机会是不多的.但是却又常常在各种媒体上看见用例图,于 ...