codeforces 893D Credit Card

  • 题目大意:

  • 有一张信用卡可以使用,每天白天都可以去给卡充钱。到了晚上,进入银行对卡的操作时间,操作有三种:
  • 1.\(a_i>0\) 银行会给卡充入\(a_i\)元
  • 2.\(a_i<0\) 银行从卡中扣除\(a_i\)元
  • 3.\(a_i=0\) 银行对你的卡进行评估,违背了规则就无权再使用此卡
  • 规则1:卡内的余额不得超过\(d\)元
  • 规则2:当\(a_i=0\)时,卡内的余额不能是负数
  • 现在问为了维持信用的平衡,最少去银行几次。(去一次,充一次钱)

思路:

  • 假设不给卡充钱,光靠银行自身的操作得到的余额,设定为最小值\(minval\)。而在迫不得已为了维持平衡给卡充钱后我们有最大值\(minval\)。
  • 没有必要担心余额为负数的时候,只要我们在评估的早上充入足够多的钱就不会是负数。那么只考虑会超过余额限制\(d\)的情况。
  • 在自然状态下得到的最小值,如果在评估那天小于0,我们只要让它回到0即可。同时如果最大值也小于0,说明卡内余额定为负数,就必须需要恢复到\(d\)元。因为尽可能的充钱,就可以减少去银行的次数,此时就必须去一次银行。
  • 在\(a_i\ne0\)时,继续维护\(minval,maxval\)。如果最小值都大于了\(d\),那么说明这已经是不可能在回到\(d\)以下了,输出-1。\(minval \le d\)同时\(minval > d\),那么说明通过充钱调节,将最大值回到\(d\)。最后输出去银行的次数。

代码:

#include <bits/stdc++.h>
using namespace std;
int a[100005];
int main() {
int n,d,maxval,minval,cnt;
scanf("%d %d",&n,&d);
for(int i=1;i<=n;++i) {
scanf("%d",&a[i]);
}
maxval=0,minval=0;
cnt=0;
for(int i=1;i<=n;++i) {
if(!a[i]) {
if(minval<0) minval=0;
if(maxval<0) {
maxval=d;
cnt++;
}
} else {
minval+=a[i];
maxval+=a[i];
if(minval>d) {
puts("-1");
return 0;
}
if(maxval>d) {
maxval=d;
}
}
}
printf("%d\n",cnt);
return 0;
}

codeforces 893D Credit Card 贪心 思维的更多相关文章

  1. [CodeForces 893D] Credit Card 贪心

    题意: Recenlty Luba有一张信用卡,一开始金额为0,每天早上可以充值任意数量的钱,但有限制,卡里的钱不能超过D.到了晚上,银行会对信用卡进行一次操作,操作有三种: 1.a[i]>0, ...

  2. Game of Credit Cards(贪心+思维)

    After the fourth season Sherlock and Moriary have realized the whole foolishness of the battle betwe ...

  3. Codeforces 671A Recycling Bottles(贪心+思维)

    题目链接:http://codeforces.com/problemset/problem/671/A 题目大意:给你两个人的位置和一个箱子的位置,然后给出n个瓶子的位置,要求让至少一个人去捡瓶子放到 ...

  4. CodeForces 917A The Monster 贪心+思维

    As Will is stuck in the Upside Down, he can still communicate with his mom, Joyce, through the Chris ...

  5. EC round 33 D. Credit Card 贪心

    因为到为0的点,充钱的范围都是不确定的,我们维护一个满足条件的最小值以及满足条件的最大值. 当min>d时,代表已经满足条件限制了 当a[ i ] = 0 并且 max<0,代表需要充钱, ...

  6. Codeforces Round #546 (Div. 2) D 贪心 + 思维

    https://codeforces.com/contest/1136/problem/D 贪心 + 思维 题意 你面前有一个队列,加上你有n个人(n<=3e5),有m(m<=个交换法则, ...

  7. 贪心/思维题 Codeforces Round #310 (Div. 2) C. Case of Matryoshkas

    题目传送门 /* 题意:套娃娃,可以套一个单独的娃娃,或者把最后面的娃娃取出,最后使得0-1-2-...-(n-1),问最少要几步 贪心/思维题:娃娃的状态:取出+套上(2),套上(1), 已套上(0 ...

  8. Mike and distribution CodeForces - 798D (贪心+思维)

    题目链接 TAG: 这是我近期做过最棒的一道贪心思维题,不容易想到,想到就出乎意料. 题意:给定两个含有N个正整数的数组a和b,让你输出一个数字k ,要求k不大于n/2+1,并且输出k个整数,范围为1 ...

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

随机推荐

  1. [Bayesian] “我是bayesian我怕谁”系列 - Naive Bayes+prior

    先明确一些潜规则: 机器学习是个collection or set of models,一切实践性强的模型都会被归纳到这个领域,没有严格的定义,’有用‘可能就是唯一的共性. 机器学习大概分为三个领域: ...

  2. TensorFlow Object Detection API(Windows下训练)

    本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 最近事情比较多,前面坑挖的有点久,今天终于有时间总结一下,顺便把Windows下训练跑通.Li ...

  3. 走近 Python (类比 JS)

    Python 是一门运用很广泛的语言,自动化脚本.爬虫,甚至在深度学习领域也都有 Python 的身影.作为一名前端开发者,也了解 ES6 中的很多特性借鉴自 Python (比如默认参数.解构赋值. ...

  4. java多线程开发容易犯的错误

    昨天在社区上看到有人讨论多线程使用,多线程遇到一些问题以及一些使用技巧记录一下.为什么要使用多线程, 不能是为了用而用,和设计模式一样用的合理,会让程序更易于理解,用的不合理反而会让程序变得更难理解. ...

  5. Best Coder #86 1001 Price List(大水题)

    Price List Accepts: 880 Submissions: 2184 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 26214 ...

  6. 理解Java包

    本质上,包是一个唯一命名的类的集合,将类集合到包里面的主要原因,是为了当在应用程序中使用预先编写的类时避免与类自身可能引起的明明冲突.用于包中的类名不会妨碍另一个包或程序中的类名,因为此时,包中的类名 ...

  7. Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException):

    用windows连接hadoop集群执行mapreduce任务的时候出现以下错误: org.apache.hadoop.security.AccessControlException:Permissi ...

  8. Problem C: 是否回文数?

    Description 定义Data类,有一个int类型的属性.定义其构造函数.setValue函数和isPalindrome函数,其中setValue函数用于设置属性值,isPalindrome用于 ...

  9. VS2015企业版序列号

    vs2015 企业版HM6NR-QXX7C-DFW2Y-8B82K-WTYJV2XNFG-KFHR8-QV3CP-3W6HT-683CH

  10. 全面理解 ASP.NET Core 依赖注入

    DI在.NET Core里面被提到了一个非常重要的位置, 这篇文章主要再给大家普及一下关于依赖注入的概念,身边有工作六七年的同事还个东西搞不清楚.另外再介绍一下.NET  Core的DI实现以及对实例 ...