题解 P6013 【压岁钱】
纯模拟,要理解好题意。
小 Z 把自己的 a 元钱封印了起来,只有当第 b 个事件发生前 1 秒才会解除封印,并保证每次小 Z 现有的钱大于等于封印的钱。
这里可能有点歧义。
这个保证是针对数据而言,也就是我们在第三个操作不用任何判断,只当是直接封印。
然后。。。
十年OI一场空,不开long long见祖宗。
然后整个数组记录封印的钱就好了。
#include <bits/stdc++.h>
using namespace std;
const int N=1e8+5;
unsigned long long m,n,ans;//rt,money,answer
unsigned long long f[N];//f[i]表示第i个事件前要解封的钱
int main()
{
cin>>m;
for(unsigned long long i=1,t;i<=m;i++)
{
n+=f[i];
cin>>t;
if(t==1)
{
unsigned long long a;
cin>>a;
n+=a;
}
else if(t==2)
{
unsigned long long a;
cin>>a;
if(n<a)ans++;
else n-=a;
}
else{
unsigned long long a,b;
cin>>a>>b;
f[b]+=a;
n=n-a;
}
}
cout<<ans<<endl;
return 0;
}