比赛 csp2025模拟练习1 评测结果 C
题目名称 轻重数字 最终得分 0
用户昵称 淮淮清子 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2025-10-28 11:50:03
显示代码纯文本
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;

const int MOD = 1000003;
const int MAXN = 5 * 1e5 + 5;

int n, a[MAXN], f[MAXN], cnt[MAXN];
vector<int> rep;

int main(){
	freopen("digit.in", "r", stdin);
	freopen("digit.out", "w", stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n;
    for(int i = 1;i <= n;i ++){
        cin >> a[i];
        rep.push_back(a[i]);
    }
    sort(rep.begin(), rep.end());
    rep.erase(unique(rep.begin(), rep.end()), rep.end());
    for(int i = 1;i <= n;i ++){
        a[i] = lower_bound(rep.begin(), rep.end(), a[i]) - rep.begin() + 1;
    }
    f[0] = 1;
    for(int i = 1;i <= n;i ++){
        memset(cnt, 0, sizeof(cnt));
        int last = -1;
        f[i] = 0;
        for(int j = i;j >= 1;j --){
            int x = a[j];
            cnt[x] ++;
            int cur = (cnt[x] >= 2) ? 1 : 0;
            bool flag = true;
            if(j < i) flag = (cur != last);
            if(flag) f[i] = (f[i] + f[j - 1]) % MOD;
            last = cur;
        }
    }
    cout << (f[n] % MOD + MOD) % MOD << '\n';
    return 0;
}