题目链接:http://acm.fzu.edu.cn/problem.php?pid=2232

Description

GG学长虽然并不打炉石传说,但是由于题面需要他便学会了打炉石传说。但是传统的炉石传说对于刚入门的GG学长来说有点复杂,所以他决定自己开发一个简化版的炉石传说。

在简化版的炉石传说中:

每个随从只有生命值和攻击力,并且在你的回合下,你的每只随从在本回合下只能选择一个敌方随从进行攻击。当两个随从a,b交战时,a的生命值将减去b的攻击力,b的生命值将减去a的攻击力,(两个伤害没有先后顺序,同时结算)。如果a或b的生命值不大于0,该随从将死亡。

某一次对局中,GG学长和对手场面上均有n个随从,并且是GG学长的回合。由于GG学长是个固执的boy,他一定要在本回合杀死对方所有随从,并且保证自己的随从全部存活。他想知道能否做到。

Input

第一行为T,表示有T组数据。T<=100。

每组数据第一行为n,表示随从数量(1 <= n <= 100)

接下来一行2 * n个数字a1, b1, a2, b2, ... , an, bn (1 <= ai, bi <= 100)

表示GG学长的n个随从,ai表示随从生命,bi表示随从攻击力

接下来一行2 * n个数字c1, d1, c2, d2, ... , cn, dn (1 <= ci, di <= 100)

表示对手的n个随从,ci表示随从生命,di表示随从攻击力。

Output

每组数据,根据GG是否能完成他的目标,输出一行”Yes”或”No”。

Sample Input

Sample Output
Yes
No

匈牙利算法:因为是一次性打败对方的所有人,所以要求学长的每个随从都要打败对手的随从,所以可以看成是匹配问题,找到最合适的匹配使得每一对都能符合条件,就是构造一个图,b[i][j] = 1表示学长的第i个随从和对手的第j个随从战斗后,随从i的生命力>0 随从j的生命力<=0,然后找到最大匹配是否是n即可;

*:第一次写的时候觉得就是简单的数学问题嘛,排好序记录下就好了,结果TLE了,( ▼-▼ ),看题目中范围都才100,真的没想过会超时

TLE代码:

 #include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<queue>
#include<stdlib.h>
#include<map>
#include<cmath> using namespace std; #define N 350
#define INF 0x3f3f3f3f struct node
{
int s,f,x;
}; node d[N],g[N]; bool cmp1(node a,node b)
{
return a.s<b.s;
} bool cmp2(node a,node b)
{
return a.f<b.f;
} int main()
{
int T,n,i; scanf("%d", &T); while(T--)
{
scanf("%d", &n); for(i=; i<n; i++)
scanf("%d %d", &g[i].s, &g[i].f);
for(i=; i<n; i++)
scanf("%d %d", &d[i].s, &d[i].f); sort(g,g+n,cmp1);
sort(d,d+n,cmp2); int ans=;
for(i=;i<n;i++)
{
while()
{
g[i].x=g[i].s-d[i].f;
d[i].x=d[i].s-g[i].f;
if(d[i].x<=&&g[i].x>)
{
ans++;
break;
}
if(d[i].x<=||g[i].x<=)
break;
}
} if(ans==n)
printf("Yes\n");
else
printf("No\n");
}
return ;
}

既然超时就只好往二分想了,然后就成了匹配题,( ▼-▼ ),二分匹配~~~

AC代码:

 #include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<queue>
#include<stdlib.h>
#include<map>
#include<cmath> using namespace std; #define N 350
#define INF 0x3f3f3f3f int v[N],vis[N],n, b[N][N]; struct node
{
int s,f;
}; node d[N],g[N]; int Find(int s)
{
int i; for(i=;i<=n;i++)
{
if(!v[i]&&b[s][i])
{
v[i]=;
if(!vis[i]||Find(vis[i]))
{
vis[i]=s;
return ;
}
}
}
return ;
} int main()
{
int T,i,j,x,y; scanf("%d", &T); while(T--)
{
memset(b,,sizeof(b)); scanf("%d", &n); for(i=; i<=n; i++)
scanf("%d %d", &g[i].s, &g[i].f);///GG学长
for(i=; i<=n; i++)
scanf("%d %d", &d[i].s, &d[i].f);///对手 for(i=;i<=n;i++)
for(j=;j<=n;j++)
{
x=g[i].s-d[j].f;
y=d[j].s-g[i].f;
if(x>&&y<=)
b[i][j]=;
} memset(vis,,sizeof(vis));
int ans=; for(i=;i<=n;i++)/**/
{
memset(v,,sizeof(v));
if(Find(i))
ans++;
} if(ans==n)
printf("Yes\n");
else
printf("No\n");
}
return ;
}

fzu Problem - 2232 炉石传说(二分匹配)的更多相关文章

  1. Problem 2232 炉石传说

    Problem 2232 炉石传说 不知道fzu的账号在哪里弄,想要做题的可以到vj上面去做 https://vjudge.net/problem/FZU-2232 #include <iost ...

  2. nyoj 237 游戏高手的烦恼 二分匹配--最小点覆盖

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=237 二分匹配--最小点覆盖模板题 Tips:用邻接矩阵超时,用数组模拟邻接表WA,暂时只 ...

  3. HDU 3861 The King’s Problem(tarjan缩点+最小路径覆盖:sig-最大二分匹配数,经典题)

    The King’s Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  4. 【HDU 2255】奔小康赚大钱 (最佳二分匹配KM算法)

    奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  5. hduoj-----(1068)Girls and Boys(二分匹配)

    Girls and Boys Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  6. HDU 4619 Warm up 2(2013多校2 1009 二分匹配)

    Warm up 2 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total S ...

  7. HDU5093——Battle ships(最大二分匹配)(2014上海邀请赛重现)

    Battle ships Problem DescriptionDear contestant, now you are an excellent navy commander, who is res ...

  8. Timus OJ 1997 Those are not the droids you're looking for (二分匹配)

    题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1997 这个星球上有两种人,一种进酒吧至少玩a小时,另一种进酒吧最多玩b小时. 下面n行是 ...

  9. hdu 1281棋盘游戏(二分匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1281   Problem Description 小希和Gardon在玩一个游戏:对一个N*M的棋盘, ...

随机推荐

  1. 【编码问题】if,for语句与中文编码

    1. 首先先来说说中文的问题.众所周知,作死的python经常和中文过不去 每次,开头必须声明 # coding: utf-8 或者是 # -*- coding: utf-8  -*- 然而,被坑过的 ...

  2. Cash Machine

    Problem Description A Bank plans to install a machine for cash withdrawal. The machine is able to de ...

  3. 华中农业大学新生赛C题

    http://acm.hzau.edu.cn/problem.php?id=1099 题意: 输入两个整数 l 和 n,代表半径和output的保留小数点位数. 输出圆的面积,保留n位小数. 一开始觉 ...

  4. GitHub使用指导

    GitHub 用过Git的小伙伴想必都知道GitHub是个什么东东,我这里就简单介绍一下吧.Git是一个分布式的版本控制系统,而GitHub可以托管各种Git库,并提供一个Web界面,方便查看Git库 ...

  5. spring中JdbcTemplate的使用

    一.首先JdbcTemplate有一个DataSource类型的属性,所以需要在spring的配置文件中为JdbcTemplate的实例配置dataSource属性: <!-- 导入资源文件 - ...

  6. hosts etc css-js

    http://laod.cn http://tool.css-js.com/rgba.html

  7. 使用node.js创建第一个应用

    node.js应用组成部分 1.引入require模块:我们可以使用require指令来载入Node.js模块. 2.创建服务器:服务器可以监听客户端的请求,类似于Apache,Nninx等HTTP服 ...

  8. vbs 获取当前目录的实现代码

    CMD当前路径 复制代码 代码如下: test = createobject("Scripting.FileSystemObject").GetFolder(".&quo ...

  9. linux手工笔记

    一.vi编辑器常用命令: -------------------------------- •插入文字:I键A键 •退回命令模式:ESC •存盘:w •不存盘退出:q •存盘退出:wq •强制退出:q ...

  10. VS中的快捷键快速格式化代码,使好看,整齐

    在VC2005中,快捷键是Ctrl + K, Ctrl + F, 这是一个组合键,即先按Ctrl + K, 这时候编辑器会等待下一个按键动作,此时再按Ctrl + F, 即可以格式化代码了,当然,也可 ...