SCUT 130:对抗女巫的魔法碎片(贪心)
130. 对抗女巫的魔法碎片
题目描述
光明世界的一个国家发生动荡,女巫利用了邪恶的力量将国家的村庄都施下了咒语,好在国家还有英勇的士兵,他们正义的力量能够破解这些魔咒夺回村庄,并且得到魔法碎片,利用足够多的魔法碎片可以将女巫铲除。
现在已经被魔咒封印的村庄有mm个,编号为11到mm。英勇的士兵nn个,编号从11到nn。第ii个士兵攻击力为a_iai,第jj个村庄防御力为b_jbj,魔法价值为c_ici。
现在这些士兵想夺回这些村庄,每个士兵可以最多占领一个村庄,一个村庄最多被一个士兵占领。当士兵的攻击力a_iai大于村庄的防御力b_jbj的时候,该士兵就可以夺回这个村庄,并且士兵会获得魔法碎片a_i - b_j + c_jai−bj+cj 个。
现在想知道这些士兵夺回村庄,获得的魔法碎片之和最多是多少。
输入格式
输入第一行一个整数TT,表示有TT组数据。
接下来一行输入两个整数nn和mm。
接下来一行,输入nn个数 a_iai,表示士兵的攻击力。
接下来mm行,每行输入两个数b_i,c_ibi,ci,表示村庄的防御力和该村庄的魔法价值。
1 \leq n, m \leq 1000001≤n,m≤100000
1 \leq a_i, b_i, c_i \leq 1000001≤ai,bi,ci≤100000
输出格式
一个整数,表示获得的魔法碎片的数量
样例数据
输入
2
3 3
4 4 4
2 3
1 3
5 3
3 3
4 4 6
2 3
4 3
5 3
输出
11
10 思路:贪心。首先因为能用更多的士兵去匹配更多的城堡更好,考虑如果当前有很多个士兵匹配一个城堡的情况,那么肯定是ai大的去匹配更好。
可以对a和b都从小到大排序,然后对于当前的士兵,将所有ai > bj的城堡都用cj - bj进入优先队列,然后对于这个士兵取堆顶,相当于当前士兵匹配堆顶这个城堡。
如果当前的士兵没找到城堡可以匹配,那么需要替换掉之前的士兵,即用更大的ai去匹配之前最小的ai对应的城堡,具体细节在代码中。
#include <bits/stdc++.h>
using namespace std;
#define N 100010
typedef long long LL;
struct node {
int b, c;
} p[N];
int a[N], ans[N];
bool flag[N];
priority_queue<int> que; bool cmp(const node &a, const node &b) {
if(a.b != b.b) return a.b < b.b;
return a.c > b.c;
} int main() {
int t; scanf("%d", &t);
while(t--) {
int n, m; scanf("%d%d", &n, &m);
memset(ans, , sizeof(ans));
memset(flag, , sizeof(flag));
while(!que.empty()) que.pop();
for(int i = ; i <= n; i++) scanf("%d", &a[i]);
for(int i = ; i <= m; i++) scanf("%d %d", &p[i].b, &p[i].c);
sort(p + , p + + m, cmp);
sort(a + , a + + n);
int now = , cancel = ;
for(int i = ; i <= n; i++) {
while(a[i] > p[now].b && now <= m) que.push(p[now].c - p[now].b), now++;
if(!que.empty()) {
int top = que.top(); que.pop();
flag[i] = ; ans[i] = a[i] + top;
} else {
while(!flag[cancel] && cancel < i) cancel++;
if(flag[cancel]) ans[i] = ans[cancel] - a[cancel] + a[i], flag[i] = , flag[cancel] = , ans[cancel++] = ;
// printf("else : %d %d\n", i, cancel);
}
}
LL res = ;
for(int i = ; i <= n; i++) {
// printf("%d : %d\n", i, ans[i]);
if(flag[i]) res += ans[i] > ? ans[i] : ;
}
printf("%lld\n", res);
}
return ;
} /*
2
3 3
4 4 4
2 3
1 3
5 3
3 3
4 4 6
2 3
4 3
5 3
Êä³ö 11
10
*/
SCUT 130:对抗女巫的魔法碎片(贪心)的更多相关文章
- Luogu P3619 魔法 【贪心/微扰证明】
题目描述 cjwssb知道是误会之后,跟你道了歉.你为了逗笑他,准备和他一起开始魔法.不过你的时间不多了,但是更惨的是你还需要完成n个魔法任务.假设你当前的时间为T,每个任务需要有一定的限制ti表示只 ...
- SCUT - 131 - 小P玩游戏II - 贪心 - 平衡树
https://scut.online/p/131 首先假如钦定了一群人去打怪兽,那么可以把主要的任务都丢给b最大的人去打,这样不会更差.然后考虑枚举这个b最大的人,其他人陪练.一开始就是ai+k*b ...
- 2017杭电ACM集训队单人排位赛 - 6
2017杭电ACM集训队单人排位赛 - 6 排名 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 59 1 X X 1 1 X X 0 1 ...
- [学习笔记]设计模式之Facade
写在前面 为方便读者,本文已添加至索引: 设计模式 学习笔记索引 Facade(外观)模式定义了一个高层接口,它能为子系统中的一组接口提供一个一致的界面,从而使得这一子系统更加容易使用.欢迎回到时の魔 ...
- CodeForces758D
D. Ability To Convert time limit per test:1 second memory limit per test:256 megabytes input:standar ...
- 玲珑杯1147 - 最后你还是AK了
1147 - 最后你还是AK了 Time Limit:5s Memory Limit:256MByte DESCRIPTION 今天HHHH遇到了一颗树,这个树有nn个点(nn为偶数),每条边都有一个 ...
- ascii码所有字符对照表(包含汉字和外国文字)
http://www.0xaa55.com/thread-398-1-1.html看到了0xaa55的这个帖子,想起了2年前我在51cto发的一个帖子http://down.51cto.com/dat ...
- ICPC Asia Nanning 2017 I. Rake It In (DFS+贪心 或 对抗搜索+Alpha-Beta剪枝)
题目链接:Rake It In 比赛链接:ICPC Asia Nanning 2017 Description The designers have come up with a new simple ...
- 【BZOJ1975】【SDOI2010】魔法猪学院(搜索,A*,贪心)
我已经沉迷于粘贴题目地址了... 题解 很显然的贪心呀, 就是一定是最短的若干条路径的长度 所以,不断拓展k短路就可以了 至于怎么用A* 评估函数f(x)=dis[x]+g[x] 其中,dis是到N号 ...
随机推荐
- Qt5该插件机制(7)--插件开发演示示例代码(Lower-level API)
插件代码 接口类的头文件 MyPluginInterface.h #ifndef INTERFACES_H #define INTERFACES_H #include <QtPlugin> ...
- DataSet 互相转换 List
/// <summary> /// List <-> DataSet /// </summary> public class IListDataSet { /// ...
- 重写combobox模板,实现支持过滤的combobox
先看效果图 客户提出需求后,首选在百度查找可靠方案 看了几个,效果都不理想, 大多是把isEditNable设置成true,IsTextSearchNable设置成false 再对itemsSourc ...
- 【C#】list 去重
原文:[C#]list 去重 Enumerable.Distinct 方法 是常用的LINQ扩展方法,属于System.Linq的Enumerable方法,可用于去除数组.集合中的重复元素,还可以自定 ...
- Win8Metro(C#)数字图像处理--2.8图像线性变换
原文:Win8Metro(C#)数字图像处理--2.8图像线性变换 2.8图像线性变换 [函数名称] 图像线性变换函数LinearTransformProcess(WriteableBitmap ...
- List.Sort() 小小技巧--- 从大到小排列
List.sort() 默认的情况下是从小到大的排列. 例如: List<int> list = new List<int>(); list.Add(- ...
- uwp开发:数据绑定——值转换器 的简单使用
原文:uwp开发:数据绑定--值转换器 的简单使用 今天,我在做最近正在开发的“简影”uwp应用时遇到一个问题,其中有个栏目,叫做“画报”,是分组显示一组一组的 图片,每组图片在界面上只显示9个,点击 ...
- Tcptrack —— TCP 连接的嗅探器
分享 <关于我> 分享 [中文纪录片]互联网时代 http://pan.baidu.com/s/1qWkJfcS 分享 <HTML开发MacOSAp ...
- 很幽默的讲解六种Socket IO模型 Delphi版本(自己Select查看,WM_SOCKET消息通知,WSAEventSelect自动收取,Overlapped I/O 事件通知模型,Overlapped I/O 完成例程模型,IOCP模型机器人)
很幽默的讲解六种Socket IO模型(转)本文简单介绍了当前Windows支持的各种Socket I/O模型,如果你发现其中存在什么错误请务必赐教. 一:select模型 二:WSAAsyncSel ...
- 完全卸载mysql免安装版
使用以下命令 reg delete "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\eventlog\Application\MySQL& ...