比赛 集训 评测结果 TTTTAAATTTA
题目名称 兔子集团军 最终得分 36
用户昵称 对立猫猫对立 运行时间 14.246 s
代码语言 C++ 内存使用 55.57 MiB
提交时间 2025-07-03 09:34:40
显示代码纯文本
#include <bits/stdc++.h>
#define N 1000005
#define int long long
using namespace std;
int n, c[N], v[N], f[N], f2[N];
int maxc = 0;
int minans = 0x3f3f3f3f;
vector<int> pos[N];
vector<pair<int, int>> a;
int calc(int l,int r) {
    int ans = 0;
    for (int i = l; i <= r; i++) {
        ans += v[i] * f2[i - l + 1];
    }
    return ans;
}
bool legal(int l, int r) {
    for (int i = l; i <= r; i++) {
        if (pos[c[i]].size() && (pos[c[i]].front() < l || pos[c[i]].back() > r)) {
            return false;
        }
    }
    return true;
}
signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    freopen("RRR.in", "r", stdin);
    freopen("RRR.out", "w", stdout);
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> c[i];
        pos[c[i]].push_back(i);
        maxc = max(maxc, c[i]);
    }
    for (int i = 1; i <= n; i++) {
        cin >> v[i];
    }
    for (int i = 1; i <= n; i++) {
        cin >> f[i];
        f2[i] = f[i] * f[i];
    }
    for(int i = 1; i <= maxc; i++) {
        if(pos[i].size()) {
            a.push_back(make_pair(pos[i].front(), pos[i].back()));
        }
    }
    for(int len = 1; len < n; len++) {
        for(int i = 1; i + len - 1 <= n; i++) {
            int j = i + len - 1;
            int kkk = 0;
            if(legal(i, j) && (kkk = calc(i, j)) < minans) {
                minans = kkk;
            }
        }
    }
    cout << minans << endl;
    return 0;
}