社区讨论
Pts 37求调
P3470[POI 2008] BBB-BBB参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mdwj1gq6
- 此快照首次捕获于
- 2025/08/04 11:04 7 个月前
- 此快照最后确认于
- 2025/11/04 03:14 4 个月前
求调%%%
CPP#include <bits/stdc++.h>
#define N 1000005
#define INF 0x3f3f3f3f
using namespace std;
int n,m,p,q,x,y;
int a[N*3],ans;
deque<int> que;
int main(){
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> n >> p >> q >> x >> y;
for (int i=1;i<=n;++i){
char c; cin >> c;
a[i] = a[i+n] = (c == '+' ? 1 : -1);
}
a[0] = p;
for (int i=1;i<=n;++i) a[i] += a[i-1];
m = 2*n;
ans = INF;
que.push_back(0);
for (int i=1;i<m;++i){
if (que.front() + n <= i) que.pop_front();
while (que.size() && a[que.back()] > a[i]) que.pop_back();
que.push_back(i);
if (i >= n){
int one=0,two=0;
int cnt = 0;
int fr = a[que.front()];
int ba = a[i];
// 处理最小值低于0
if (fr < 0){
cnt += ceil(1.0*abs(fr)/2.0) * x;
ba += ceil(1.0*abs(fr)/2.0) * 2;
}
// 处理 结果 != q
int cha = abs(ba - q);
if (cha % 2) continue;
else cnt += cha / 2 * x;
//处理移动
cnt += (m-i) % n * y;
/*
one += cha / 2 + ceil(1.0*abs(fr)/2.0);
two = (m-i) % n;
cout << i << ' ' << cnt << ' ' << one << ' ' << two << '\n';
*/
ans = min(ans,cnt);
}
}
cout << ans;
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...