BZOJ1555 KD之死

如果没有必选的限制条件,就是水题了、、、

只要按照w + t排序就可以了,然后搞个堆来维护

于是有了限制条件,还是水题。。。

到了必选的时候强制选上,不加入堆中即可。

 1 /**************************************************************
 2     Problem: 1555
 3     User: rausen
 4     Language: C++
 5     Result: Accepted
 6     Time:2228 ms
 7     Memory:10948 kb
 8 ****************************************************************/
 9
10 #include <cstdio>
11 #include <cctype>
12 #include <algorithm>
13 #include <queue>
14
15 using namespace std;
16 typedef long long ll;
17 const int N  = 600005;
18
19 struct data {
20     int w, t, f;
21 }a[N];
22 bool operator < (const data &a, const data &b) {
23     return (ll) a.w + a.t < (ll) b.w + b.t;
24 }
25
26 ll tot, V;
27 int n, m, w, ans;
28 priority_queue <int> q;
29
30 inline ll read() {
31     ll x = 0;
32     char ch = getchar();
33     while (!isdigit(ch))
34         ch = getchar();
35     while (isdigit(ch)) {
36         x = x * 10 + ch - ‘0‘;
37         ch = getchar();
38     }
39     return x;
40 }
41
42 inline void del_top() {
43     tot -= q.top(), q.pop();
44     --ans;
45 }
46
47 inline void add(int x) {
48     tot += a[x].w, q.push(a[x].w);
49     ++ans;
50 }
51
52 bool work() {
53     int i;
54     tot = 0;
55     for (i = 1; i <= n; ++i)
56         if (a[i].f == 1) {
57             while (tot > a[i].t) {
58                 if (q.empty()) return 0;
59                 del_top();
60             }
61             tot += a[i].w, ++ans;
62         }else {
63             if (!q.empty() && tot > a[i].t)
64                 if (q.top() < a[i].w || tot - q.top() > a[i].t)
65                     continue;
66             if (tot > a[i].t)
67                 del_top();
68             add(i);
69         }
70     return 1;
71 }
72
73 int main() {
74     int i, X;
75     n = read(), m = read(), V = read();
76     for (i = 1; i <= n; ++i)
77         a[i].w = read(), a[i].t = read();
78     for (i = 1; i <= m; ++i) {
79         X = read(), a[X].f = 1;
80         tot += a[X].w;
81     }
82     sort(a + 1, a + n + 1);
83     a[++n].f = 1, a[n].t = V;
84     if (!work()) puts("Foolish SD!");
85     else printf("%d\n", ans - 1);
86     return 0;
87 }

(p.s. 怎么又想开fread二笔优化了呢、、、233)

时间: 2024-08-07 01:17:44

BZOJ1555 KD之死的相关文章

BZOJ 1555 KD之死

贪心,按t+w排序维护不一定放到拖车上的大根堆. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #define maxn 600500 using namespace std; struct GC { int w,t,flag; }p[maxn]; int n,m,maxv,cnt=0,sum=0,x; prior

文华财经函数大全

文华财经函数大全 1.引用数据 AVPRICE 引用均价(在盘后对于国内三个期货交易所指结算价)SETTLE 引用结算价(如果用在周期小于'日'的K线上如5分钟K线,一小时k线,每根k线返回的值表示这根k线当日开盘时到这根k线的为止的结算价(均价)如果用在周期大于等于'日'的K线上,返回当根K线结束时间所在日的结算价.)CLOSE 引用收盘价(在盘中指最新价),也可简写为C.HIGH 引用最高价,也可简写为H.LOW 引用最低价,也可简写为L.OPEN 引用开盘价,也可简写为O.OPI 引用持仓

交换机死机,导致ceph ( requests are blocked ) 异常解决方法

问题描述: 万兆交换机死机后,导致在交换机上的ceph 的cluster网络会中断,用户正在对数据块的访问没有完成导致请求被blocked,同时部分pg会处于不同步状态,因此交换机重启后,通过ceph health会发现ceph集群不在OK 状态 health HEALTH_ERR 1 pgs inconsistent; 1 pgs repair; 2 requests are blocked > 32 sec; 1 scrub errorspg 6.89 is active+clean+inc

Linux服务器挂死案例分析

问题现象: 在linux服务器上运行一个指定的脚本时,就会出现无数个相同进程的,而且不停的产生,杀也杀不掉,最后系统就陷入死循环,无法登陆,只能人工去按机器的电源键才可以.这够崩溃的吧? 问题分析过程: 在分析过程中发现这个特定的脚本有些特别,和系统中已有的命令的名字是相同的. 以free命令为例: 这个脚本名字就叫做free(后面没有带.sh),而且这个脚本文件里又去调用了free命令. 这个脚本的本意应该是要去调用free命令来完成一个任务. 那是否就是因为这样就会导致问题呢? 其实光这样是

双进程守护,驻留,杀不死服务

这是一个轻量级的库,配置几行代码,就可以实现在Android上实现进程常驻,也就是在系统强杀下,以及360获取root权限下,clean master获取root权限下都无法杀死进程 支持系统2.3到6.0 支持大部分设备,包括三星,华为,oppo,nexus,魅族等等 可以简单对开机广播进行保护 github地址: https://github.com/Marswin/MarsDaemon 原理分析: Android 进程常驻(0)----MarsDaemon使用说明 Android 进程常驻

炉石传说 疯狂爆破者空场炸死2个精灵龙的概率

背景介绍 炉石传说中,有一张卡牌叫疯狂爆破者,功能为造成6点伤害,随机分配给其他角色(包括英雄和随从). 这经常能造成一些意想不到的效果,比如对方空场有2个精灵龙,如果能直接炸死,则能造成巨大的优势,所以本文将要分析一下空场炸死对方2个精灵龙的概率. 分析 1. 使用程序进行模拟 #include "stdio.h" #include <cmath> #include <stdlib.h> #include <algorithm> #include

2015考研数学考前必须死磕的知识点

2015考研数学考前必须死磕的知识点 来源:跨考教育    划词:关闭划词   收藏 编辑点评:下文为2015年考研数学必须掌握的知识点的大汇总,供考生们参考.沪江考研为你及时整合各路干货复习资料,敬请关注. 第一章 函数.极限与连续 1.函数的有界性 2.极限的定义(数列.函数) 3.极限的性质(有界性.保号性) 4.极限的计算(重点)(四则运算.等价无穷小替换.洛必达法则.泰勒公式.重要极限.单侧极限.夹逼定理及定积分定义.单调有界必有极限定理) 5.函数的连续性 6.间断点的类型 7.渐近

Android 关于ToolBar分分钟玩死自己?

场景一: 今天早上十点高高兴兴的跟平时早上一样买一杯粥然后一边喝着一边去上班,步行了15分钟到了公司,然后打指纹开门,然后就愉快的写代码了,我擦,好想电脑没开机,我晕好像没带眼镜,发现最近记性不是很好,是不是前两天中午没休息的原因,感觉身体被掏空,白天上班,晚上回去改论文我也是不容易啊!好了废话说了这么多,open car走起!然后被这个ToolBar玩了一天,爽歪歪!我真的很菜! 初识 Toolbar(其实我看他很不舒服) Toolbar 是在 Android 5.0 开始推出的一个 Mate

【死磕Java并发】-----J.U.C之重入锁:ReentrantLock

此篇博客所有源码均来自JDK 1.8 ReentrantLock,可重入锁,是一种递归无阻塞的同步机制.它可以等同于synchronized的使用,但是ReentrantLock提供了比synchronized更强大.灵活的锁机制,可以减少死锁发生的概率. API介绍如下: 一个可重入的互斥锁定 Lock,它具有与使用 synchronized 方法和语句所访问的隐式监视器锁定相同的一些基本行为和语义,但功能更强大.ReentrantLock 将由最近成功获得锁定,并且还没有释放该锁定的线程所拥