(1)题目描述
(2)算法思想
- 统计记录信息,每一行数据第二个表示苹果树初始数量,之后表示疏果数量或者当前苹果数量核算值;
- 若小于等于零则表示为疏果数量,当前苹果数减去对应数值;否则表示为核算值,若与之前更新的苹果数不同则表示有掉落,更新苹果数并将当前苹果树标记为有掉落;
- 累计当前苹果数量与有掉落苹果树的数量;
- 完成每一棵苹果树的记录后处理掉落组数值,题目中明确规定将苹果树排列视作一个圆,那么我们统计时直接取模即可表示环形结构。
根据题干末尾的规模数据可以大致估算出存在10^9数量级,即可能会出现超过int最大数值的情况,因此我在此处选取long long类型杜绝溢出的可能性。(如果使用int是否会溢出我并没有进行尝试,习惯性估算了数量级~)
tip:
此处顺便测试了一下int、long、long long之间的数据转换。
经测试在我的机器上,
int与long的范围相同;
int可隐式扩展为long long;
long long转换为int时如果范围超过了INT_MAX则自然会进行截断。
测试代码:
#include<climits>
#include<iostream>
using namespace std;
int main() {
int int_a=INT_MAX; //int
long long_b=INT_MAX; //long
long long llong_c=INT_MAX; //long long
//2*INT_MAX
long_b+=int_a;
llong_c+