题解:AT_abc369_c [ABC369C] Count Arithmetic Subarrays
很水的一道题,但是硬控我半个小时呜呜呜。
它问等差数列的数量,我们发现只要找到所有的等差数列,那么答案一定包含在这些数列的连续子序列中。
求所有等差数列显然可以线性,我们求出每个等差数列的长度
至于求的话我定义了两个指针,每次满足差相等的话右指针右移,否则统计答案,重新赋值指针即可。
给出我的代码:
for(int i=2;i<=n;i++)
{
if(a[i]-a[i-1]==cha)r++;
else
{
num=r-l+1;
ans=ans+pre[num];
l=i-1;
r=i;
cha=a[i]-a[i-1];
}
}
但是单纯做的话答案不是正确的,因为指针重新赋值的话计算答案时当前等差数列末尾元素会重复计算,所以需要统计累加答案的次数最后减去消除影响。
还有一点细节,上面的循环做完以后最后需要再操作一次计算最后一个等差数列的贡献。
然后就做完了。
分类:
题解合集
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】