codeforces 893D Credit Card 贪心 思维
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 贪心 思维的更多相关文章
- [CodeForces 893D] Credit Card 贪心
题意: Recenlty Luba有一张信用卡,一开始金额为0,每天早上可以充值任意数量的钱,但有限制,卡里的钱不能超过D.到了晚上,银行会对信用卡进行一次操作,操作有三种: 1.a[i]>0, ...
- Game of Credit Cards(贪心+思维)
After the fourth season Sherlock and Moriary have realized the whole foolishness of the battle betwe ...
- Codeforces 671A Recycling Bottles(贪心+思维)
题目链接:http://codeforces.com/problemset/problem/671/A 题目大意:给你两个人的位置和一个箱子的位置,然后给出n个瓶子的位置,要求让至少一个人去捡瓶子放到 ...
- CodeForces 917A The Monster 贪心+思维
As Will is stuck in the Upside Down, he can still communicate with his mom, Joyce, through the Chris ...
- EC round 33 D. Credit Card 贪心
因为到为0的点,充钱的范围都是不确定的,我们维护一个满足条件的最小值以及满足条件的最大值. 当min>d时,代表已经满足条件限制了 当a[ i ] = 0 并且 max<0,代表需要充钱, ...
- Codeforces Round #546 (Div. 2) D 贪心 + 思维
https://codeforces.com/contest/1136/problem/D 贪心 + 思维 题意 你面前有一个队列,加上你有n个人(n<=3e5),有m(m<=个交换法则, ...
- 贪心/思维题 Codeforces Round #310 (Div. 2) C. Case of Matryoshkas
题目传送门 /* 题意:套娃娃,可以套一个单独的娃娃,或者把最后面的娃娃取出,最后使得0-1-2-...-(n-1),问最少要几步 贪心/思维题:娃娃的状态:取出+套上(2),套上(1), 已套上(0 ...
- Mike and distribution CodeForces - 798D (贪心+思维)
题目链接 TAG: 这是我近期做过最棒的一道贪心思维题,不容易想到,想到就出乎意料. 题意:给定两个含有N个正整数的数组a和b,让你输出一个数字k ,要求k不大于n/2+1,并且输出k个整数,范围为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 ...
随机推荐
- 关于js赋值给input解析
<script type="text/javascript"> //关于js中取值问题 $(function(){ //定义function函数 var firstDa ...
- java 随记
后台开发的过程中积累的关于java的杂记 架构 SSH框架 为什么要分层? 因为分层使代码变得清晰,容易写也容易阅读,更重要的是让代码扩展性更好,层与层之间的改动不会互相影响 各层的分工 dao--与 ...
- python基础6 迭代器 生成器
可迭代的:内部含有__iter__方法的数据类型叫可迭代的,也叫迭代对象实现了迭代协议的对象 运用dir()方法来测试一个数据类型是不是可迭代的的. 迭代器协议是指:对象需要提供next方法,它要么返 ...
- java项目log4j日志打印配置
#定义输出级别和输出平台 添加DEBUG表示打印sql 语句 log4j.rootLogger=DEBUG,INFO,ERROR,stdout,R log4j.category.org.spring ...
- sersync实现数据实时同步
1.1 第一个里程碑:安装sersync软件 1.1.1 将软件上传到服务器当中并解压 1.上传软件到服务器上 rz -E 为了便于管理上传位置统一设置为 /server/tools 中 2.解压软件 ...
- 0_Simple__matrixMulDrv
使用CUDA的 Driver API 来计算矩阵乘法. ▶ 源代码: #include <stdio.h> #include <cuda.h> #include <bui ...
- rpm命令常用选项
安装rpm包 # rpm -ivh ***.rpm #其中i表示安装,v表示显示安装过程,h表示显示进度 升级rpm包 # rpm -Uvh ***.rpm 删除软件包 # rpm -e PACKAG ...
- python3 selenium模拟登陆斗鱼提取数据保存数据库
# coding=utf-8from selenium import webdriverimport jsonimport timeimport pymongo class Douyu: def __ ...
- 使用python3的typing模块提高代码健壮性
前言:很多人在写完代码一段时间后回过头看代码,很可能忘记了自己写的函数需要传什么参数,返回什么类型的结果,就不得不去阅读代码的具体内容,降低了阅读的速度,加上Python本身就是一门弱类型的语言,这种 ...
- C#连接六类数据库的代码集
本文列出了C#连接Access.SQL Server.Oracle.MySQL.DB2和SyBase六种不同数据库的程序源码和需要注意的点. 1.C#连接Access 程序代码: ;