签到1题解
本题做法:利用双指针可以求出连续1的区间,
表示区间长度,由等差数列求和公式得这段区间对答案的贡献值为
,将每一段的贡献值累加即可,时间复杂度为
AC代码:
#include<bits/stdc++.h>
using namespace std;
int a[10000];
int main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int n;
long long sum=0;
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=n;i++){
if(a[i]==1){
int j=i;
while(j<=n&&a[j]==1)j++;
sum+=(1+j-i)*(j-i)/2;
i=j-1;
}
}
cout<<sum<<endl;
return 0;
}
var code = "99ba8797-35bf-4cc5-a10d-d8d76ec43ea5"

浙公网安备 33010602011771号