题目
思路
也是一个序列处理的题目,思路不难。
一开始卡50分是因为 落果数目重复计算
我本来还以为是因为我循环计数写错了,但结果不是。可见虽然先判断0-n-3,再单独判断 n-2,n-1的方法很傻 但也是对的。
当然了,还是要学会 用上% 求余的方法。
代码
#include<iostream>
using namespace std;
const int N =1005;
int drop[N] ={0};
long long apple_num[N] ={0};
int drop_num =0;
int E =0;//连续掉落组数
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
int m;//每行输入个数
int init_num;
cin>>m;
cin>>init_num;
apple_num[i] =init_num;
int temp_m =m-1;
while(temp_m--){
int temp_num;//每行从第三个开始的输入
cin>>temp_num;
if(temp_num>0){
if(apple_num[i]>temp_num){
//原来个数大于重新统计个数,说明掉落
drop[i] =1;
//drop_num++; //50分的错误在这里,存在重复计算落果现象!!!
}
apple_num[i] =temp_num;
}else{
//小于0 说明在蔬果
apple_num[i]+=temp_num;
}
}
}
long long sum =0;
for(int i=0;i<n;i++){
sum+=apple_num[i];
}
for(int i=0;i<n;i++){
if(drop[i] ==1){
drop_num++;
if(drop[(i+1)%n]==1&&drop[(i+2)%n]==1){
E++;
}
}
}
cout<<sum<<" "<<drop_num<<" "<<E;
return 0;
}