题目传送门
题目描述
模拟
分析
代码
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long LL;
struct Tree
{
LL cnt; // 最后剩余的果子数
bool isDrop;
}trees[1010];
int n;
int main()
{
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
int m;
scanf("%d", &m);
LL pre = 0;
bool flag = false;
for(int j = 0; j < m; j++)
{
int x;
scanf("%d", &x);
if(j == 0)
{
pre = x;
}
else
{
if(x <= 0) pre += x;
else
{
if(pre > x) flag = true, pre = x;
}
}
}
Tree t;
t.cnt = pre;
t.isDrop = flag;
trees[i] = t;
}
LL sum = 0;
LL cnt = 0;
LL res = 0;
for(int i = 0; i < n; i++)
{
// printf("%d %d\n",trees[i].cnt, trees[i].isDrop);
sum += (LL) trees[i].cnt;
if(trees[i].isDrop) cnt++;
if(i == 0)
{
if(trees[0].isDrop && trees[1].isDrop && trees[n-1].isDrop) res++;
}
else if(i == n - 1)
{
if(trees[i].isDrop && trees[i-1].isDrop && trees[0].isDrop) res++;
}
else
{
if(trees[i].isDrop && trees[i-1].isDrop && trees[i+1].isDrop) res ++;
}
}
cout << sum << " " << cnt << " " << res << endl;
return 0;
}
时间复杂度
参考文章