Educational Codeforces Round 33 D. Credit Card
Credit Card
time limit per test2 seconds
memory limit per test256 megabytes
Recenlty Luba got a credit card and started to use it. Let's consider n consecutive days Luba uses the card.
She starts with 0 money on her account.
In the evening of i-th day a transaction ai occurs. If ai > 0, then ai bourles are deposited to Luba's account. If ai < 0, then ai bourles are withdrawn. And if ai = 0, then the amount of money on Luba's account is checked.
In the morning of any of n days Luba can go to the bank and deposit any positive integer amount of burles to her account. But there is a limitation: the amount of money on the account can never exceed d.
It can happen that the amount of money goes greater than d by some transaction in the evening. In this case answer will be «-1».
Luba must not exceed this limit, and also she wants that every day her account is checked (the days when ai = 0) the amount of money on her account is non-negative. It takes a lot of time to go to the bank, so Luba wants to know the minimum number of days she needs to deposit some money to her account (if it is possible to meet all the requirements). Help her!
Input
The first line contains two integers n, d (1 ≤ n ≤ 105, 1 ≤ d ≤ 109) —the number of days and the money limitation.
The second line contains n integer numbers a1, a2, ... an ( - 104 ≤ ai ≤ 104), where ai represents the transaction in i-th day.
Output
Print -1 if Luba cannot deposit the money to her account in such a way that the requirements are met. Otherwise print the minimum number of days Luba has to deposit money.
Examples
inputCopy
5 10
-1 5 0 -5 3
outputCopy
0
inputCopy
3 4
-10 0 20
outputCopy
-1
inputCopy
5 10
-5 0 10 -11 0
outputCopy
2
找了一个写的比较好的中文题面QAQ。。。
有一张信用卡可以使用,每天白天都可以去给卡充钱。到了晚上,进入银行对卡的操作时间,操作有三种:
1.ai>0 银行会给卡充入ai元
2.ai<0 银行从卡中扣除ai元
3.ai=0 银行对你的卡进行评估,违背了规则就无权再使用此卡
规则1:卡内的余额不得超过d元
规则2:当ai=0时,卡内的余额不能是负数
现在问为了维持信用的平衡,最少去银行几次。(去一次,充一次钱)
反正看各种大神的算法感觉特别厉害。。。
我自己yy了一个乱七八糟的东西,运气好就1A了233
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
int n, d, ans, a[maxn], b[maxn], c[maxn];
vector<int> lpl;
inline void check()
{
for(int i = 1; i <= n; ++i) printf("%d ", a[i]); printf("\n");
for(int i = 1; i <= n; ++i) printf("%d ", b[i]); printf("\n");
for(int i = 1; i <= n; ++i) printf("%d ", c[i]); printf("\n");
}
inline void prework()
{
int sum = 0;
for(int i = 1; i <= n; ++i){
if(a[i] == 0){
lpl.push_back(i);
if(sum < 0){b[i] = -sum; sum = 0;}
c[i] = sum;
continue;
}
sum += a[i]; if(sum > d){printf("-1"); exit(0);}
}
//check();
}
inline void workk()
{
ans = lpl.size();
for(int i = lpl.size() - 1; i >= 1; --i){
int now = lpl[i], pre = lpl[i - 1], sum = c[pre], mx = sum;
for(int j = pre + 1; j < now; ++j)
{sum += a[j]; mx = max(mx, sum);}
if(mx + b[now] <= d){ans--; b[pre] += b[now];}
}
if(b[1] == 0) ans--; cout << ans;
}
int main()
{
scanf("%d%d", &n, &d); n++; a[1] = 0;
for(int i = 2; i <= n; ++i) scanf("%d", &a[i]);
prework(); workk();
return 0;
}
Educational Codeforces Round 33 D. Credit Card的更多相关文章
- Educational Codeforces Round 33 (Rated for Div. 2) D. Credit Card
D. Credit Card time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
- Educational Codeforces Round 33
# Who = Penalty * A B C D E F 479 arkethos 4 247 + 00:08 + 00:19 +1 00:59 +2 01:41 479 ne-leo ...
- Educational Codeforces Round 33 (Rated for Div. 2) D题 【贪心:前缀和+后缀最值好题】
D. Credit Card Recenlty Luba got a credit card and started to use it. Let's consider n consecutive d ...
- 【Educational Codeforces Round 33 D】Credit Card
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 每次遇到0的时候,看看当前累计的delta是多少. 如果大于0,则temp = d-delta; 小于0,取temp2 = min( ...
- Educational Codeforces Round 33 (Rated for Div. 2) E. Counting Arrays
题目链接 题意:给你两个数x,yx,yx,y,让你构造一些长为yyy的数列,让这个数列的累乘为xxx,输出方案数. 思路:考虑对xxx进行质因数分解,设某个质因子PiP_iPi的的幂为kkk,则这个 ...
- Educational Codeforces Round 33 (Rated for Div. 2) F. Subtree Minimum Query(主席树合并)
题意 给定一棵 \(n\) 个点的带点权树,以 \(1\) 为根, \(m\) 次询问,每次询问给出两个值 \(p, k\) ,求以下值: \(p\) 的子树中距离 \(p \le k\) 的所有点权 ...
- Educational Codeforces Round 33 (Rated for Div. 2) 题解
A.每个状态只有一种后续转移,判断每次转移是否都合法即可. #include <iostream> #include <cstdio> using namespace std; ...
- Educational Codeforces Round 33 (Rated for Div. 2)A-F
总的来说这套题还是很不错的,让我对主席树有了更深的了解 A:水题,模拟即可 #include<bits/stdc++.h> #define fi first #define se seco ...
- Educational Codeforces Round 33 (Rated for Div. 2) C. Rumor【并查集+贪心/维护集合最小值】
C. Rumor time limit per test 2 seconds memory limit per test 256 megabytes input standard input outp ...
随机推荐
- simple_pt时遇到的问题
elf.c:30:18: fatal error: gelf.h: No such file or directory 安装libelf-dev 遇到找不到ldwarf apt-cache sear ...
- spring-boot-shiro-jwt-redis实现登陆授权功能
一.前言 在微服务中我们一般采用的是无状态登录,而传统的session方式,在前后端分离的微服务架构下,如继续使用则必将要解决跨域sessionId问题.集群session共享问题等等.这显然是费力不 ...
- RequestMappingHandlerMapping详解
我们先理简单梳理一个关系 关系梳理 spring ioc 是spring的核心,用来管理spring bean的生命周期 MVC 是一种使用 MVC(Model View Controller 模型- ...
- elasticsearch相关聚合查询示例
索引(index):logstash-nginx-*,type:nginx_access 请求路径: 1.按照某个字段进行分组统计访问量 { "query": { "bo ...
- ivew select组件 DatePicker组件的清空
<Form ref="formInline" :model="formInline" :rules="ruleInline" inli ...
- toj 4061 矩阵攻击(最大独立集)
题目: 给定一个01 矩阵,其中你可以在0的位置放置攻击装置.每一个攻击装置 (x,y) 都可以按照“日”字攻击其周围八个位置(x−1,y−2),(x−2,y−1),(x+1,y−2),(x+2,y− ...
- centos6.8安装tomcat多容器的处理办法,及安装zk、dubbo
系统环境: Linux-centosOS6.8-bit64 JDK1.8 1.Tomcat多容器的处理方案 首先,不论tomcat的版本是否有多个,路径是否相同,肯定的是可以运行多个容器. 处理以下两 ...
- spring-boot整合Mybatis多数据源案例
1.运行环境 开发工具:intellij idea JDK版本:1.8 项目管理工具:Maven 4.0.0 2.GITHUB地址 https://github.com/nbfujx/springBo ...
- JPush极光推送Java服务器端实例
import cn.jpush.api.JPushClient; import cn.jpush.api.common.resp.APIConnectionException; import cn.j ...
- 【HDOJ6595】Everything Is Generated In Equal Probability(期望DP)
题意:给定一个N,随机从[1,N]里产生一个n, 然后随机产生一个n个数的全排列,求出n的逆序数对的数量并累加ans, 然后随机地取出这个全排列中的一个子序列,重复这个过程,直到为空,求ans在模99 ...