首页 > 其他分享 >CF893D Credit Card 题解

CF893D Credit Card 题解

时间:2023-01-05 21:22:52浏览次数:48  
标签:std CF893D s2 s1 cin 下界 题解 include Card

简要题意:你有一张信用卡,\(n\) 天有 \(n\) 个操作,每次操作给定一个 \(x\),如果 \(x\) 是 \(0\) 那么银行会查询信用卡里的金额,要保证金额是非负数;否则你卡里的金额会变化 \(x\)。每天操作前你可以在卡里存入任意多的钱,你要输出的是最小存钱次数,若无解输出 \(-1\)。另外,无论何时你卡里的金额不得超过 \(m\)。

因为前后充钱对于之后的操作并没有影响,而对于信用卡的余额是有上下界要求的,所以可以在操作的时候记录 s1s2 表示当前信用卡里钱的下界和上界。
具体来说,每次金额变化的时候把 s1s2 都加上 \(x\),由于 s1 是下界,如果下界都比 \(m\) 大那肯定无解,如果上界比 \(m\) 大把上界改为 \(m\)。如果是银行查询,下界小于 \(0\) 直接修改为 \(0\),上界小于 \(0\) 直接修改为 \(m\)。
代码:

//不向焦虑与抑郁投降,这个世界终会有我们存在的地方。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using std::cin;using std::cout;
constexpr int N=1e5+1;
int n,m,a[N],ans,s1,s2;
signed main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	std::ios::sync_with_stdio(false);cin.tie(nullptr);
	cin>>n>>m;
	for(int i=1,x;i<=n;i++)
		if(cin>>x,x){
			if((s1+=x)>m)return cout<<"-1",0;
			if((s2+=x)>m)s2=m;
		}else{
			if(s1<0)s1=0;
			if(s2<0)s2=m,ans++;
		}
	cout<<ans;
	return 0;
}

标签:std,CF893D,s2,s1,cin,下界,题解,include,Card
From: https://www.cnblogs.com/bxjz/p/CF893D.html

相关文章

  • 安徽农业大学寒假训练赛1题解
    D#include<bits/stdc++.h>usingnamespacestd;charg[10][10];intmain(){for(inti=1;i<=5;i++)scanf("%s",g[i]+1);//这样可以保证下标都从1......
  • 题解 : Luogu P2197 【模板】nim 游戏
    题目链接:link结论如果$a_1\oplusa_2\oplus...\oplusa_n\not=0$,则先手必胜证明操作到最后时,每堆石子数都是\(0\),\(0\oplus0\oplus...\oplus0=0......
  • Starling常见问题解决办法
    ​​Starling常见问题解决办法​​来自:​​智慧+毅力=无所不能​​ 1、Android设备上阻止用户按下后退后的行为侦听按键事件//阻止后退行为view.stage.addEventL......
  • JSOI2009 题解
    Count二维树状数组板子题,开\(c\)个二维树状数组即可过。可以通过离线对每个权值单独操作做到只开一个二维树状数组。如果空间要求更紧的话可以cdq分治做到只开一个......
  • unity和VS2019联调问题解决
    以前使用VS2015和17的时候联调的时候是可以附加到unity进行联调的,今天用的2019发现不可以了。研究了一下是少装了一个插件。装上插件就解决了。过程如下:当前使用VS版本2019......
  • 洛谷 p5536 题解
    题目链接:https://www.luogu.com.cn/problem/P5536此题为树的dfs的一个应用。思路树dfs时,可以计算每个点的深度。如图所示可以多次dfs,从而找到不同的信息。代码......
  • CF513F2 题解
    题意传送门有\(a+b+1\)个会动的棋子,在一个大小为\(n\timesm\)的棋盘上,棋盘上有一些点有障碍。棋子中,有\(a\)个红色棋子,\(b\)个蓝色棋子,和\(1\)个既能当作红棋......
  • Codeforces Round #839 (Div. 3)题解
    C.DifferentDifferences(贪心)题意​ 给定\(k\),\(n\)\((2\lek\len\le40)\)。从\([1-n]\)中不重复地任选\(k\)个数组成一个数组,使这个数组的差分数组中不同的......
  • 【题解】CF700E Cool Slogans
    原题面很简洁,懒得概括了。思路后缀自动机+结论。这种题出题人没有十年脑血栓都没法出。结论1:\(s_{i-1}\)必定是\(s_i\)的后缀。考虑\(s_i\)中\(s_{i-1......
  • 【题解】CF1073G Yet Another LCP Problem
    题面很清楚,不概括了。思路后缀树+树剖。套路题。看到lcp考虑转化成后缀树上求lca,这里可以用SAM构造反串的parenttree解撅(f**kuukk)于是问题转化成:每次给......