题意翻译
如果一个数组的最小值和最大值相同,则称这个数组是Magical的。定义一个数组的子数组为一个数组中的连续的数组成的序列。给你一个数组,求这个数组中Magical的子数组有多少个。
题目思路
最大值最小值相同,意味数组里面元素相等。假设有n个数相等,那么他们所能组成的数组数应该是从n加到1(先是每个元素单独一组,再两两一组......直到n个一组)。根据等差数列求和公式,数组数应为(1+n)*n/2。
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
scanf("%lld",&n);
long long int a[n],ans=0,num=1;//因题目有范围要求,所以要long long型
for(int i=0;i<n;i++){
scanf("%lld",&a[i]);//依次录入数组元素
}
for(int i=1;i<n;i++){
if(a[i]==a[i-1]){//循环从i=1开始,i-1可以从数组第一个元素a[0]开始,且不会超限
num++;
}
//num=0;
else {
ans+=(1+num)*num/2;
num=1;
}
}
ans+=(1+num)*num/2;
//int s=0;
//s=ans/2;
cout<<ans;
return 0;
}