题目描述
小明有一个神奇的小鼓,小鼓中存储了一些能量豆,当他用左手抽鼓时,能量豆的数量会增加,当他用右手抽鼓时,能量豆的数量会减少(执行这个动作前,鼓中能量豆的数量一定超过减少数),这天小明用手拍了n下小鼓后,小鼓中的能量豆数量变为m个,请你帮小明算一下今天拍鼓前的能量豆数量。
输入
第一行,一个整数n,表示拍数次数。
接下来的n行,每行包括两个整数,第一个数为拍鼓用的手,0表示左手,1表示右手,第二个数是增加或减少的能量豆数量。
最后一行为一个整数m,表示最后能量豆的数量。
输出
一个整数,为拍鼓前的能量豆数量。
样例输入
5
0 8
0 4
1 5
0 3
1 5
20
样例输出
15
范围
对于100%的数据,1≤n,m,x≤100
分析:
当他用左手抽鼓时,能量豆的数量会增加,当他用右手抽鼓时,能量豆的数量会减少(执行这个动作前,鼓中能量豆的数量一定超过减少数),0表示左手,1表示右手
所以当是0的时候小鼓中的能量豆会加上这一行的第2个数,否则(因为只能是0或1)会减掉这一行的第2个数
方法一:
可以运用倒推的方法,就是把上面的规则反一下(当是0的时候小鼓中的能量豆会减掉这一行的第2个数,否则会加上这一行的第2个数)
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
long long n,x[101],y[101],m;
cin>>n;
for(int i=1;i<=n;i++){
cin>>x[i]>>y[i];
}
cin>>m;
for(int i=1;i<=n;i++){
if(x==0){
m=m-y;
}else{
m=m+y;
}
}
cout<<m;
return 0;
}
方法二:
假设一开始只有0个能量豆(设s),顺着题目的意思来,最后再用m减去s即可
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
long long n,x,y,s=0,m;
cin>>n;
for(int i=1;i<=n;i++){
cin>>x>>y;
if(x==0){
s=s+y;
}else{
s=s-y;
}
}
cin>>m;
cout<<m-s;
return 0;
}
当然,可能还有其他方法,那就让大家来探索吧!