比赛 |
集训 |
评测结果 |
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;
}