STRENGTH

题目链接

题目描述

Strength gives you the confidence within yourself to overcome any fears, challenges or doubts. Feel the fear and do it anyway! If you have been going through a rough time and feel burnt out or stressed, the Strength card encourages you to find the strength within yourself and keep going. You have got what it takes to see this situation through to its eventual end. You might also feel compelled to hold space for someone else who is going through a difficult period and needs your strength and support.

Alice and Bob are playing ``Yu-Gi-Oh!'', a famous turn-based trading card game, in which two players perform their turns alternatively. After several turns, Alice and Bob have many monsters respectively. Alice has n and Bob has m monsters under their own control. Each monster's strength is measured by a non-negative integer si. To be specific, the larger si is, the more power the monster has.

During each turn, for every single monster under control, the player can give a command to it at most once, driving it to battle with an enemy monster (given that opposite player has no monsters as a shield, the monster can directly attack him).

Additionally, the process of the battle is also quite simple. When two monsters battle with each other, the stronger one (i.e. the one with larger si) will overwhelm the other and destroy it and the winner's strength will remain unchanged. Meanwhile, the difference of their strength will produce equivalent damage to the player who loses the battle. If the player is directly attacked by a monster, he will suffer from the damage equal to the monster's strength. Notice that when two monsters have the same strength, both of them will vanish and no damage will be dealt.

Right now it is Alice's turn to play, having known the strength of all monsters, she wants to calculate the maximal damage she can deal towards Bob in one turn. Unfortunately, Bob has great foresight and is well-prepared for the upcoming attack. Bob has converted several of his monsters into defense position, in which even if the monster is destroyed, he wouldn't get any damage.

Now you are informed of the strength of all the monsters and whether it is in defense position for each Bob's monster, you are expected to figure out the maximal damage that could be dealt in this turn.

输入

The first line contains a single integer T≤20 indicating the number of test cases.

For each test case, the first line includes two integer O≤n,m≤100000, representing the number of monsters owned by Alice and Bob.

In next three lines, the first two lines include n and m integers O≤si≤109 indicating the strength of the i-th monster, separated by spaces. The last line contains m integers 0 or 1 indicating the position of Bob’Si-th monsters. In other words, 0 represents the normal position and 1 represents the defense position.

输出

For the ith test, output a single line in beginning of ``Case i:'', followed by an integer indicating the answer, separated by a single space.

样例输入

2
4 2
10 10 10 20
5 15
0 1
4 2
10 10 10 20
5 25
0 1

样例输出

Case 1: 25
Case 2: 15

题意

玩游戏王牌,我方场上n只怪兽,都是攻击形态,战斗力为a[i];

敌方m只怪兽,战斗力为b[i],如果下一行是0表示攻击形态,1表示防御形态

如果我方怪兽的战斗力攻击对方攻击形态的怪兽,就会消灭对方的怪兽,并造成超杀(对敌人本体造成战斗力的差值a[i] - b[i]的血量),如果攻击防御形态的怪兽兽,则会消灭怪兽而不会扣对方本体的血量

如果敌人没有怪兽了,就可以对敌人本体造成直接伤害a[i];

每只怪兽只能攻击一次

问怎么才能扣敌人最多的血

题解

有两种贪心策略

一种是 直接拿战斗力高的去怼敌人战斗力低的攻击形态怪,这样造成的超杀值高

第二种 用战斗力高的去消灭所有的防御怪和攻击怪,然后直接对本体进行攻击

分别求出两种贪心策略的结果求max

代码写的相当繁琐

代码

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for(int i=a;i<n;i++)
#define scac(x) scanf("%c",&x)
#define sca(x) scanf("%d",&x)
#define sca2(x,y) scanf("%d%d",&x,&y)
#define sca3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define scl(x) scanf("%lld",&x)
#define scl2(x,y) scanf("%lld%lld",&x,&y)
#define scl3(x,y,z) scanf("%lld%lld%lld",&x,&y,&z)
#define pri(x) printf("%d\n",x)
#define pri2(x,y) printf("%d %d\n",x,y)
#define pri3(x,y,z) printf("%d %d %d\n",x,y,z)
#define prl(x) printf("%lld\n",x)
#define prl2(x,y) printf("%lld %lld\n",x,y)
#define prl3(x,y,z) printf("%lld %lld %lld\n",x,y,z)
#define ll long long
#define LL long long
#define read read()
#define pb push_back
#define mp make_pair
#define P pair<int,int>
#define PLL pair<ll,ll>
#define PI acos(1.0)
#define eps 1e-6
#define inf 1e17
#define INF 0x3f3f3f3f
#define N 205
const int maxn = 1e5+5;
ll a[maxn],b[maxn];
ll g[maxn];//gong
ll s[maxn];//shou
int vis[maxn];
int op;
bool cmp(ll x,ll y)
{
return x > y;
}
int main()
{
int t;
sca(t);
int kase = 0;
while(t--)
{
memset(vis,0,sizeof(vis));
int n,m;
sca2(n,m);
rep(i,0,n) scl(a[i]);
rep(i,0,m) scl(b[i]);
int cntg = 0;
int cnts = 0;
rep(i,0,m)
{
sca(op);
if(op) s[cnts++] = b[i];
else g[cntg++] = b[i];
}
sort(a,a+n,cmp); // da -> xiao
sort(g,g+cntg); // xiao -> da
sort(s,s+cnts,cmp); // da -> xiao
int posa = 0;
int posg = 0;
int poss = cnts-1;
ll ans = -1;
ll temp = 0;
while(posa < n && posg < cntg) //plan1 先打攻击怪
{
if(a[posa] >= g[posg])
{
temp += a[posa] - g[posg];
posa++;
posg++;
}
else
break;
}
ll sum = 0;
if(posg != cntg) //我方怪打完了,对方攻击怪还有剩余
{
ans = max(ans, temp);
}
else
{
int i = n-1;
while(i >= posa && poss >= 0)//开始打防守怪
{
if(a[i] >= s[poss])
{
i--;
poss--;
}
else
{
sum += a[i];
i--;
}
}
if(poss == -1)
{
temp += sum;
if(i != posa)
{
while(i>=posa)
{
temp += a[i];
i--;
}
}
}
ans = max(ans,temp);
} posa = n-1;
poss = cnts - 1;
while(posa >= 0 && poss >= 0) //plan2 先打防守怪
{
if(a[posa] >= s[poss])
{
vis[posa] = 1;
posa--;
poss--;
}
else
{
posa--;
}
}
if(poss == -1)
{
posa = 0;
posg = cntg - 1;
temp = 0;
while(posa < n && posg >= 0)
{
if(vis[posa]) //前面拿来打防守怪了
{
posa++;
continue;
}
if(a[posa] >= g[posg])
{
temp += a[posa] - g[posg];
posa++;
posg--;
}
else
{
break;
}
}
if(posg == -1)
{
while(posa < n)
{
if(vis[posa])
{
posa++;
continue;
}
temp += a[posa];
posa++;
}
ans = max(ans,temp);
}
} printf("Case %d: %lld\n",++kase,ans);
}
return 0; }

upc 组队赛18 STRENGTH【贪心模拟】的更多相关文章

  1. upc组队赛18 THE WORLD【时间模拟】

    THE WORLD 题目链接 题目描述 The World can indicate world travel, particularly on a large scale. You mau be l ...

  2. upc组队赛16 WTMGB【模拟】

    WTMGB 题目链接 题目描述 YellowStar is very happy that the FZU Code Carnival is about to begin except that he ...

  3. 贪心+模拟 Codeforces Round #288 (Div. 2) C. Anya and Ghosts

    题目传送门 /* 贪心 + 模拟:首先,如果蜡烛的燃烧时间小于最少需要点燃的蜡烛数一定是-1(蜡烛是1秒点一支), num[g[i]]记录每个鬼访问时已点燃的蜡烛数,若不够,tmp为还需要的蜡烛数, ...

  4. 贪心+模拟 ZOJ 3829 Known Notation

    题目传送门 /* 题意:一串字符串,问要最少操作数使得成为合法的后缀表达式 贪心+模拟:数字个数 >= *个数+1 所以若数字少了先补上在前面,然后把不合法的*和最后的数字交换,记录次数 岛娘的 ...

  5. CodeForces ---596B--Wilbur and Array(贪心模拟)

    Wilbur and Array Time Limit: 2000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Su ...

  6. 18/9/22NOIP模拟考

    18/9/22NOIP模拟考 其实本来是有多组数据的,出题人忘记在题面上加了   斜眼笑 期望得分:100:实际得分:100 由于种种原因,拿到题的时候已经过去了0.5h+... 然后因为这道题数据范 ...

  7. 18/9/21模拟赛-Updated

    18/9/21模拟赛 期望得分:100:实际得分:0  qwq 拿到题目第一眼,我去,这不是洛谷原题(仓鼠找Sugar)吗 又多看了几眼,嗯,对,除了是有多组数据外,就是原题 然后码码码....自以为 ...

  8. upc组队赛15 Lattice's basics in digital electronics【模拟】

    Lattice's basics in digital electronics 题目链接 题目描述 LATTICE is learning Digital Electronic Technology. ...

  9. upc组队赛6 Progressive Scramble【模拟】

    Progressive Scramble 题目描述 You are a member of a naive spy agency. For secure communication,members o ...

随机推荐

  1. docker网络 macvlan

    docker 还开发了另一个支持跨主机容器网络的 driver:macvlan. macvlan 本身是 linxu kernel 模块,其功能是允许在同一个物理网卡上配置多个 MAC 地址,即多个 ...

  2. Mysql 数据库存储的原理??

    储存过程是一个可编程的函数,它在数据库中创建并保存.它可以有 SQL 语句和一些特殊的控制结 构组成.当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的.数据库中的 ...

  3. Codeforces Round #545 (Div. 2) C. Skyscrapers (离散化)

    题目传送门 题意: 给你n*m个点,每个点有高度h [ i ][ j ] ,用[1,x][1,x]的数对该元素所处十字上的所有元素重新标号, 并保持它们的相对大小不变.n,m≤1000n,m≤1000 ...

  4. Python2和Python3中的rang()不同之点

    知道在python中rang()是一个有序的列表,在使用过程发现,Python2和Python3中的rang()不同之点,下面讲述不同之点 1,Python2 rang()用法 ->> r ...

  5. k3 cloud中获取年月日

    日期类型字段元素.Date.Year(获取年) 日期类型字段元素.Date.Month(获取月)日期类型字段元素.Date.Day(获取天)

  6. ElasticSearch 入门介绍

    tags: 第三方 lucene [toc] 1. what Elastic Search(ES)是什么 全文检索和lucene 全文检索 优点:高效,准确,分词全文检索允许用户输入一些关键字,从数据 ...

  7. 2018-8-27-C#-powshell-调用

    title author date CreateTime categories C# powshell 调用 lindexi 2018-8-27 16:20:4 +0800 2018-06-18 20 ...

  8. 本地主机访问远程linux系统服务器上的jupyter notebook

    1,机器情况:服务器 centos python环境已经配置好了,在虚拟环境下安装了anaconda 并且在里面安装了jupyter notebook 2,主机是 windows     ipytho ...

  9. 我是如何用python给Thunar写GUI插件的 (pygtk+glade)

    更新:zip乱码的问题可以通过安装patch之后的p7zip-natspec和unzip-natspec解决(archlinuxcn源),而仍使用Engrampa做前端.此文重点在pygtk... 问 ...

  10. python面向对象--类和实例的认识

    '''1.数据属性 2.函数属性''' #创建一个类class Chinese: "这是一个中国人的类" #类属性 money=4000 #注意类和对象均用点来访问自己的属性 de ...