题目链接: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. Linux openvswitch性能调优

    Increasing the flow-eviction threshold The threshold is a type of limit on the number of flows that ...

  2. JavaScript(8)——JSON

    JSON 啊呀呀,终于写到了JSON了.莫名的开心,虽然还是被说进度慢,不过,我不管,我就是开心.恩,好好学习,好好加油.(这是一段毫无逻辑的话,我也不知道说啥了) JSON是JavaScript的一 ...

  3. 数组实现UITabview的cell设置

  4. 部署php项目

    1.不写端口号,即127.0.0.1,其隐含一个默认端口号80 2.查看当前占用的端口号 3.nginx修改工作路径,nginx修改端口号 4.查看端口号是否可访问telnet命令 在dos界面输入命 ...

  5. MFC连接Access讲解(3合1) .

    方法一: 1.首先,要用#import语句来引用支持ADO的组件类型库(*.tlb),其中类型库可以作为可执行程序(DLL.EXE等)的一部分被定位在其自身程序中的附属资源里,如:被定位在msado1 ...

  6. redis运维的一些知识点

    恰好看到一些redis需要主要的东西 记下 供参考 原文地址 http://hi.baidu.com/ywdblog/item/1a8c6ed42edf01866dce3fe3 最近在线上实际使用了一 ...

  7. leetcode21

    Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...

  8. 弹出框,先弹出遮罩有透明度灰色100%高宽,置顶z-index:999---再弹出框最顶部z-index:9999

    <div class="mask"></div> <div class="maskbox"> <form id=&qu ...

  9. MC 自己平均

    using System; using System.Drawing; using System.Linq; using System.Collections; namespace PowerLang ...

  10. qq客服问题

    angularJs会给ng-href的不正常跳转,会 添加unsafe的前缀.原因是angular对href是有安全检查的,只能生成它认为安全的链接.解决方法如下: 在config.js中注入 fun ...