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的更多相关文章

  1. 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 ...

  2. 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 ...

  3. 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 ...

  4. 【Educational Codeforces Round 33 D】Credit Card

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 每次遇到0的时候,看看当前累计的delta是多少. 如果大于0,则temp = d-delta; 小于0,取temp2 = min( ...

  5. Educational Codeforces Round 33 (Rated for Div. 2) E. Counting Arrays

    题目链接 题意:给你两个数x,yx,yx,y,让你构造一些长为yyy的数列,让这个数列的累乘为xxx,输出方案数. 思路:考虑对xxx进行质因数分解,设某个质因子PiP_iPi​的的幂为kkk,则这个 ...

  6. Educational Codeforces Round 33 (Rated for Div. 2) F. Subtree Minimum Query(主席树合并)

    题意 给定一棵 \(n\) 个点的带点权树,以 \(1\) 为根, \(m\) 次询问,每次询问给出两个值 \(p, k\) ,求以下值: \(p\) 的子树中距离 \(p \le k\) 的所有点权 ...

  7. Educational Codeforces Round 33 (Rated for Div. 2) 题解

    A.每个状态只有一种后续转移,判断每次转移是否都合法即可. #include <iostream> #include <cstdio> using namespace std; ...

  8. Educational Codeforces Round 33 (Rated for Div. 2)A-F

    总的来说这套题还是很不错的,让我对主席树有了更深的了解 A:水题,模拟即可 #include<bits/stdc++.h> #define fi first #define se seco ...

  9. 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 ...

随机推荐

  1. Python Web开发:使用Django框架创建HolleWorld项目

    开发环境搭建 Python环境安装 下载地址:https://www.python.org/downloads// Django安装 打开Windows CMD输入pip install django ...

  2. Codeforces Round #420 (Div. 2) - C

    题目链接:http://codeforces.com/contest/821/problem/C 题意:起初有一个栈,给定2*n个命令,其中n个命令是往栈加入元素,另外n个命令是从栈中取出元素.你可以 ...

  3. Kotlin学习笔记(9)- 数据类

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步! Kotlin学习笔记(1)- 环境配置 Kotlin学习笔记(2)- 空安 ...

  4. Python中类

    1.类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self,self代表类的实例,而非类. self 不是 python 关键字,我们把他换成 r ...

  5. SPOJ7258 SUBLEX - Lexicographical Substring Search

    传送门[洛谷] 心态崩了我有妹子 靠 我写的记忆化搜索 莫名WA了 然后心态崩了 当我正要改成bfs排序的时候 我灵光一动 md我写的i=0;i<25;i++??? 然后 改过来就A掉了T^T ...

  6. SpringBoot---注册Servlet,Filter,Listener

    1.概述 1.1.当使用  内嵌的Servlet容器(Tomcat.Jetty等)时,将Servlet,Filter,Listener  注册到Servlet容器的方法: 1.1.1.直接注册Bean ...

  7. SpringIntegration---Redis

    1.依赖 <dependency> <groupId>org.springframework.integration</groupId> <artifactI ...

  8. 人生苦短_我用Python_javascript_var_function_简单笔记_001

    <!--Javascript_var_001:--> <html> <head> <meta charset="UTF-8"> &l ...

  9. JS 判断undefined

    tax !== underfined underfined 是判断的是类型的结果, 如果加typeof后是字符串类型 写法:typeof(tax) !== "underfined" ...

  10. 前端-SuperSlide自动分页控制、自适应轮播图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...