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 ...
随机推荐
- tyvj1014 乘法游戏
描述 乘法游戏是在一行牌上进行的.每一张牌包括了一个正整数.在每一个移动中,玩家拿出一张牌,得分是用它的数字乘以它左边和右边的数,所以不允许拿第1张和最后1张牌.最后一次移动后,这里只剩下两张牌. ...
- hadoop集群安装_实战
spark1.6.2+ hadoop2.6.2 词频统计完整案例:http://blog.csdn.net/zythy/article/details/17852579 hadoop学习:http:/ ...
- JSP入门
JSP简介 所谓JSP就是在网页文件中嵌入Java代码或JSP定义的一些标记.JSP是建立在Servlet上的,在执行时JSP容器会先将JSP文件转换成Servlet文件以及class 文件,然后再执 ...
- PHP 获取中国时间,即上海时区时间
/** * 获取中国时间,即上海时区时间 * @param <type> $format * @return <type> */ function getChinaTime($ ...
- ahjesus Axure RP 7.0注册码
ahjesus Axure RP 7.0注册码 用户名:axureuser 序列号:8wFfIX7a8hHq6yAy6T8zCz5R0NBKeVxo9IKu+kgKh79FL6IyPD6lK7G6+t ...
- C和指针 第三章 链接属性 extern、internal、none
三种链接属性 组成一个程序有多个源文件,如果相同的标识符出现在多个源文件中,那么标识符的链接属性决定如何处理在不同文件中出现的标识符. 链接属性有三种: external:外部 多个源文件中的相同标识 ...
- POJ2342 树形dp
原题:http://poj.org/problem?id=2342 树形dp入门题. 我们让dp[i][0]表示第i个人不去,dp[i][1]表示第i个人去 ,根据题意我们可以很容易的得到如下递推公式 ...
- python , angular js 学习记录【1】
1.日期格式化 Letter Date or Time Component Presentation Examples G Era designator Text AD y Year Year 199 ...
- NOIp2014 解题报告
有史以来第一届面向社会征题的NOIp结束了.最开始以为面向社会征题会很难,但是这是我参加的最水的一次NOIp了. 由于停了两月的课,所以现在正在补文化科目就没时间打代码了.所以所有的题目就均不给出代码 ...
- 如何更高效地定制你的bootstrap
bootstrap已经作为前端开发必不可少的框架之一,应用bootstrap使得我们对布局.样式的设定变得非常简单.但bootstrap提供的默认样式往往不能满足我们的需求,从而定制化bootstra ...