HDU 1528 贪心模拟/二分图
Card Game Cheater
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1822 Accepted Submission(s): 998
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
//跟以前做过的田忌赛马相似,从最小的开始比较,乙能赢就赢掉;如果一样大就比较最大的最大的能赢就赢掉,不能赢就用最小的输掉对方最大的;如果小就用它输掉对方最大的。
//二分图最大匹配数,分为甲乙两个点集,将乙能赢甲的之间连条线,求最大匹配数。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int num[];
struct desk
{
int x,y;
};
bool cmp(desk a,desk b)
{
if(a.x==b.x) return a.y<b.y;
return a.x<b.x;
}
int main()
{
int t,n;
char ch[];
scanf("%d",&t);
while(t--)
{
desk p1[],p2[];
scanf("%d",&n);
for(int i=;i<n;i++)
{
scanf("%s",ch);
if(ch[]>=''&&ch[]<='')
p1[i].x=ch[]-''+;
else switch(ch[])
{
case 'T':p1[i].x=;break;
case 'J':p1[i].x=;break;
case 'Q':p1[i].x=;break;
case 'K':p1[i].x=;break;
case 'A':p1[i].x=;break;
}
switch(ch[])
{
case 'C':p1[i].y=;break;
case 'D':p1[i].y=;break;
case 'S':p1[i].y=;break;
case 'H':p1[i].y=;break;
}
}
for(int i=;i<n;i++)
{
scanf("%s",ch);
if(ch[]>=''&&ch[]<='')
p2[i].x=ch[]-'';
else switch(ch[])
{
case 'T':p2[i].x=;break;
case 'J':p2[i].x=;break;
case 'Q':p2[i].x=;break;
case 'K':p2[i].x=;break;
case 'A':p2[i].x=;break;
}
switch(ch[])
{
case 'C':p2[i].y=;break;
case 'D':p2[i].y=;break;
case 'S':p2[i].y=;break;
case 'H':p2[i].y=;break;
}
}
sort(p1,p1+n,cmp);
sort(p2,p2+n,cmp);
int s1=,s2=,e1=n-,e2=n-,ans=;
while(s1<=e1)
{
if((p2[s2].x>p1[s1].x)||((p2[s2].x==p1[s1].x)&&(p2[s2].y>p1[s1].y)))
{
s2++;s1++;
ans++;
}
else if((p2[s2].x==p1[s1].x)&&(p2[s2].y==p1[s1].y))
{
if((p2[e2].x>p1[e1].x)||((p2[e2].x==p1[e1].x)&&(p2[e2].y>p1[e1].y)))
{
e2--;e1--;
ans++;
}
else
{
s2++;e1--;
}
}
else
{
s2++;e1--;
}
}
printf("%d\n",ans);
}
return ;
}
HDU 1528 贪心模拟/二分图的更多相关文章
- hdu 6034 贪心模拟 好坑
关键在排序!!! 数组间的排序会超时,所以需要把一个数组映射成一个数字,就可以了 #include <bits/stdc++.h> using namespace std; typedef ...
- hdu 4974 贪心
http://acm.hdu.edu.cn/showproblem.php?pid=4974 n个人进行选秀,有一个人做裁判,每次有两人进行对决,裁判可以选择为两人打分,可以同时加上1分,或者单独为一 ...
- 贪心+模拟 Codeforces Round #288 (Div. 2) C. Anya and Ghosts
题目传送门 /* 贪心 + 模拟:首先,如果蜡烛的燃烧时间小于最少需要点燃的蜡烛数一定是-1(蜡烛是1秒点一支), num[g[i]]记录每个鬼访问时已点燃的蜡烛数,若不够,tmp为还需要的蜡烛数, ...
- 贪心+模拟 ZOJ 3829 Known Notation
题目传送门 /* 题意:一串字符串,问要最少操作数使得成为合法的后缀表达式 贪心+模拟:数字个数 >= *个数+1 所以若数字少了先补上在前面,然后把不合法的*和最后的数字交换,记录次数 岛娘的 ...
- CodeForces ---596B--Wilbur and Array(贪心模拟)
Wilbur and Array Time Limit: 2000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Su ...
- hdu 4023 2011上海赛区网络赛C 贪心+模拟
以为是贪心,结果不是,2333 贪心最后对自己绝对有利的情况 点我 #include<cstdio> #include<iostream> #include<algori ...
- HDU 4023 (博弈 贪心 模拟) Game
如果硬要说这算是博弈题目的话,那这个博弈是不公平博弈(partizan games),因为双方面对同一个局面做出来的决策是不一样的. 我们平时做的博弈都是公平博弈(impartial games),所 ...
- HDU 4619 Warm up 2 贪心或者二分图匹配
给同一张横着的牌的所在的格子编同一样的号,这些格子对应x集合,给同一张竖着的牌所在的格子编同一样的号,对应y集合,同一个格子上既有横着的牌又有竖着的牌,那么就建一条边,有冲突就要拿走一张,结果是总的牌 ...
- HDU 4903 (模拟+贪心)
Fighting the Landlords Problem Description Fighting the Landlords is a card game which has been a he ...
随机推荐
- Ackerman函数的栈实现
一.Ackerman函数: ackerman函数的定义如下: 二.Ackerman函数的递归实现: 利用递归来实现ackerman函数是比较简单的: /*Sample Input: 0 1 1 1 S ...
- rabbitmq 的心跳机制&应用
官方文档说: If a consumer dies (its channel is closed, connection is closed, or TCP connection is lost) w ...
- python3 黑板客爬虫闯关游戏(一)
这是学习python爬虫练习很好的网站,强烈推荐! 地址http://www.heibanke.com/lesson/crawler_ex00/ 第一关猜数字 很简单,直接给出代码 import ur ...
- 《linux命令》ps -aux详细解释
本文转载自http://blog.chinaunix.net/uid-21516619-id-1824945.html 显示其他用户启动的进程(a) 查看系统中属于自己的进程(x) 启动这个进程的用户 ...
- Spring PropertyPlaceholderConfigurer数据库配置
pom.xml中添加依赖 <!-- mysql-connector-java --> <dependency> <groupId>mysql</groupId ...
- OC编程之道-创建对象之生成器模式
生成器模式也叫建造者模式,一般是用来构造复杂对象的一种模式.client(客户)-director(指导者)-builder(构造者)-product(产品). 生成器模式能帮助构建设计部件与表现的各 ...
- WCF
--http://www.doc88.com/p-699300196010.html ---术语 WCF术语 消息(message) 消息是一个独立的数据单元,它可能由几个部分组成,包括消息正文和消息 ...
- c/c++与函数有关的优化
一.函数调用的优化 调用函数需要对内存进行多次访问,因此对函数的调用通常很费时,容易造成程序效率低下: 在函数调用过程中,如果每一次函数的调用结果都相同且需要多次调用时,可以将几次调用的结果进行多次累 ...
- c# ContinueWith 用法
通过任务,可以指定在任务完成之后,应开始运行之后另一个特定任务.例如,一个使用前一个任务的结果的新任务,如果前一个任务失败了,这个任务就应执行一些清理工作.任务处理程序都不带参数或者带一个对象参数,而 ...
- Java基础之反射和动态代理
1,反射是依赖于Class对象,然后根据Class对象,去操作该类的资源的.Class对象是发射的基石! 问题1:人这类事物用什么表示?汽车这类事物用什么表示>计算机文件用什么表示?有如此多的事 ...