Pts 37求调
查看原帖
Pts 37求调
1361314
weichenglu楼主2025/8/4 11:04

求调%%%

#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;
}
2025/8/4 11:04
加载中...