题目传送门
思路
考虑贪心。
注意到只要两只鸡相邻便可产出鸡蛋,对于除对方外但相邻的鸡,只需使其性别不同即可(因为不限制两个性别的数量,所以不用考虑后效性)。
两只鸡没有都被孵化时无法产出鸡蛋,所以应等两只鸡都孵化。显然不能暴力枚举所有时间点,直接取两只鸡中孵化时间最晚的即可。由于两只鸡相邻时,每天都可产出鸡蛋,所以用 \(t\) 减去二者的最大值即可。
有一种特殊情况:有一只鸡在 \(t\) 后才能孵化,需要特判,对答案的贡献为 \(0\)。
代码
#include <iostream>
#define int long long
using namespace std;
int n,t,a[1000005],ans;
signed main()
{cin >> n >> t;for(int i=1;i<=n;i++){cin >> a[i];}for(int i=1;i<n;i++){// 计算答案的贡献,特判大于t的情况ans+=max(t-max(a[i],a[i+1]),0ll);}cout << ans;return 0;
}
十年 OI 一场空,不开 long long 见祖宗。
