[ABC369C] Count Arithmetic Subarrays

2024-09-02 02:04

本文主要是介绍[ABC369C] Count Arithmetic Subarrays,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先看了下题意 大致题意就是让你在长度为N的序列找出所有的等差数列。

-----------------------------------------------------------------------------------------我是分界线

我的思路了,就是先从2开始计算等差数列,从3开始判断,如果是等差数列的话就继续累加,如果不是判断它是否是第一个等差数列,是就直接ans+=cnt\ast(cnt+1)/2,如果不是就减1去除掉重复的部分。最后把未处理的部分加上去就行了。


 注意题目上给出的限制

  • 1≤ N ≤ 2× 105
  • 1≤ Ai ≤ 1091≤ Ai​ ≤ 109

 要开long long,否则会爆int。

#include<bits/stdc++.h>
#define int long long
#define fast register int using namespace std;const int N=2e5+100;int a[N],n,m,b[N],cnt=2,ans=0,d=0,flag=1;
//cnt代表着现在等差数列包含的数的数量,ans代表最终答案,d就是等差数列的差,flag代表着是否是$A$序列是一个完整的等差数列signed main(){std::ios::sync_with_stdio(false);cin.tie(0); cout.tie(0); //不喜欢标准输入输出的人的专用cin>>n;if (n==1){cout<<1;return 0;}//n=1直接输出1for (fast i=1;i<=n;i++){cin>>a[i];if (i==2){cnt=2;qwq=a[i]-a[i-1];continue;}if (i>=3){if (a[i]-a[i-1]==d){//如果相等就继续累加cnt++;continue;//跳过下个步骤}else {if (flag==1){//如果是一串从a[1]开始就不减1ans+=cnt*(cnt+1)/2;flag++;//flag更改}else {//反之要去除掉重复的部分,就要减1ans+=cnt*(cnt+1)/2-1;}cnt=2;//重新从a[i-1]开始一个新的等差数列d=a[i]-a[i-1];//更新qcontinue;}}}//将最后的数列也要算进去if (flag!=1){//如果不是一条从a[1]到a[n]的连续的等差数列就减1ans+=cnt*(cnt+1)/2-1;}else {//反之不减ans+=cnt*(cnt+1)/2;}cout<<ans;return 0;
}

这篇关于[ABC369C] Count Arithmetic Subarrays的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1128682

相关文章

leetcode#38. Count and Say

The count-and-say sequence is the sequence of integers with the first five terms as following: 1. 12. 113. 214. 12115. 111221 1 is read off as “one 1” or 11. 11 is read off

《Learning To Count Everything》CVPR2021

摘要 论文提出了一种新的方法来解决视觉计数问题,即在给定类别中仅有少量标注实例的情况下,对任何类别的对象进行计数。将计数问题视为一个少样本回归任务,并提出了一种新颖的方法,该方法通过查询图像和查询图像中的少量示例对象来预测图像中所有感兴趣对象的存在密度图。此外,还提出了一种新颖的适应策略,使网络能够在测试时仅使用新类别中的少量示例对象来适应任何新的视觉类别。为了支持这一任务,作者还引入了一个包含

class _ContiguousArrayStorage deallocated with non-zero retain count

Xcode报错 : Object 0x11c614000 of class _ContiguousArrayStorage deallocated with non-zero retain count 2. This object's deinit, or something called from it, may have created a strong reference to self w

LeetCode - 38. Count and Say

38. Count and Say  Problem's Link  ---------------------------------------------------------------------------- Mean:  题目意思太晦涩。 1 读出来 就是“1个1” 所以记为“11” 11 读出来 就是“2个1” 所以记为“21” 21 读出来 就是“1个

【FZU】2105 Digits Count 线段树

传送门:【FZU】2105 Digits Count 题目分析:与、或、异或三种操作都是每一位相互独立的,所以可以将线段树建四棵,分别对应一位,and和or操作相当于覆盖操作,xor操作相当于反转操作,就和普通的线段树方法类似,设立两个lazy标记即可。查询的时候求得每一位的1的个数*权重(1,2,4,8),全部累加就是答案。 代码如下: #include <cst

【BNU】40719 Arithmetic Progressions【分块+FFT】

传送门:【BNU】40719 Arithmetic Progressions 题目分析: 用分块+FFT强行AC了这题…… 之前一直TLE……然后改了好久把姿势改的优美点了……终于过了…… 大概思路是:我们考虑分块,假设每一块的大小为S,一共分了B块然后我们分两种情况讨论: 1.第二个数在第i块,第一个数在(1~i-1)块内,第三个数在(i+1~B)块内。 2.至少两个数在同一块内。

CodeForces 451D Count Good Substrings

题意: 一个只包含a和b的字符串  问  它有几个长度为偶数和长度为奇数的“压缩回文串”  压缩的概念是  相邻的相同字符压缩成一个字符 思路: 串经过压缩一定满足如下形式 ……ababab……  那么这样只要两端的字符相同则中间一定是回文的  因此对于一个a它作为左端点形成的回文串个数就等于它右边的a的个数  那么长度是奇数还是偶数呢  可以这么判断  如果a在奇数位置上和它匹配的a也在奇

Count Palindrome in String

string 有多少palindrome substring。exp: 'aba' 返回4 , 'abba' 返回6 public class CountPalindrome {public int countPalindrome(String str){if(str == null || str.length() == 0) return 0;int count = 0;for(int

用 count(*)哪个存储引擎会更快?

InnoDB 引擎执行 count 函数的时候,需要通过遍历的方式来统计记录个数,而 MyISAM 引擎执行 count 函数只需要 0(1 )复杂度,这是因为每张 MyISAM 的数据表都有一个 meta 信息有存储了row_count值,由表级锁保证一致性,所以直接读取row_count 值就是 count 函数的执行结果 而 InnoDB 存储引擎是支持事务的,同一个时刻的多个查询,由

c++ unordered_set的count方法

在 C++ 的 std::unordered_set 中,count 方法用于返回集合中与指定值相等的元素的数量。由于 unordered_set 的特性是只允许唯一元素,因此对于任何给定元素,count 方法的返回值只能是 0 或 1。 语法 size_t count(const Key& key) const; key: 要查找的元素。返回值: 如果集合中存在这个元素,返回 1;如果不