侧边栏壁纸
  • 累计撰写 192 篇文章
  • 累计创建 2 个标签
  • 累计收到 87 条评论

【题解】【上海】【选取子段(二)】

Allen Best
2023-08-01 / 0 评论 / 0 点赞 / 31 阅读 / 375 字
温馨提示:
本文最后更新于 2023-08-01,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
#include <bits/stdc++.h>
using namespace std;
int a[100005];
long long ans = 0;
int n;
int main() {
    scanf("%d", &n);
    long long k;//k为相同的数字长度
    for (int i = 1; i <= n; i++) {
        scanf("%d", &a[i]);
        if (i == 1){//第一个数,长度为1
            k = 1;
        } else if (a[i] == a[i - 1]) {//跟前一个数相同,增加一
            k++;
        } else {//跟前一个数不同
            ans += (k * (k - 1) / 2);//计算之前的
            k = 1;//长度变成1
        }
    }
    ans += (k * (k - 1) / 2);//最后一个数的长度
    cout << ans + n;//加上单个数字的数量
    return 0;
}
0

评论区