A 超市里扫货
原题链接:超市里扫货
个人觉得解这题需要注意两个方面。
- 1、牛客一直都在考的问题:数据大小。
在这题里,1<=v<=230 ,所以要用long long类型存储这个变量。 - 2、 若放不下或者没有剩余货物,The__Flash 便会推着购物车去找柜台小姐姐结账
举个例子,如果购物车的容量为
3
, 第一个货物的体积为1
,第二个货物的体积为3
,第三个货物的体积为2
,那么这个人会进出超市三次,而不是两次。
具体操作为:(1)将第一个货物放入购物车中。(2)将第二个货物放入购物车中,此时货物总体积大于购物车总容量,将第二个货物移出购物车,出超市。(3)将第二个货物放入购物车,将第三个货物放入购物车,货物体积大于购物车总容量,第三个货物移出购物车,出超市。(4)将第三个货物放入购物车,出超市。
代码
#include<iostream>
using namespace std;
const int N = 100010;
long long num=1,tmp; //因为这个人进出超市进出超市的次数至少为1次,所以num初始化为1
long long a[N];
int main(){
long long n,v;
cin>>n>>v;
for(int i = 0;i<n;i++) scanf("%d",&a[i]);
for(int i = 0;i<n;i++){
tmp +=a[i];
if(tmp>v){
num++;
i--;
tmp = 0;
}
}
cout<<num;
return 0;
}
B 柜台结账
原题链接:柜台转账
这题依然考察输入问题:a1,a2的值超过了int的取值范围,只能用string将它存储起来。
接下来就是本题的核心:判断a1,a2满足向个位偶数舍入的那个规则
不难发现,a1.a2
的处理满足四舍六入
的原则,所以可以把a2的取值分为4种情况
因此,很容易写出代码
代码
#include<iostream>
#include<cstring>
using namespace std;
string a,b;
int main(){
cin>>a>>b;
if(b[0]>'5') cout<<"Happy birthday to MFGG";
else if(b[0]=='0') cout<<"PLMM";
else if(b[0]<'5') cout<<"Happy birthday to YXGG";
else{
for(int i = 1;i<b.size();i++){ //这一步判断b是不是除了第一位,其他位都是0
if(b[i]!='0') {
cout<<"Happy birthday to MFGG";
return 0;
}
}
cout<<(((a.back()-'0')%2==0)? "Happy birthday to YXGG":"Happy birthday to MFGG");
}
}