蒟蒻求助,我的特判不知道为何是错的
查看原帖
蒟蒻求助,我的特判不知道为何是错的
186534
Atmizz楼主2023/7/29 14:40

代码如下,注释部分是我写的,而且还是错的QAQ

#include <bits/stdc++.h>
#pragma GCC optimize(2)
#define ls k << 1
#define rs k << 1 | 1
#define pi std :: pair<int, int>
#define endl "\n"
#define deb(x) std :: cout << #x << " = " << x << '\n';
using i64 = long long;
const i64 INF = 0x3f3f3f3f3f3f3f3f;
const double eps = 1e-6;
const int Mod = 1e9 + 7;
const int N = 1e5 + 20;
i64 dp[N][2];
void solve() {
	int n;
	std :: cin >> n;
	std :: vector <int> c(n);
	for(int i = 0; i < n; ++ i) std :: cin >> c[i];
	std :: vector <std :: string> s(n), t(n);
	for(int i = 0; i < n; ++ i) std :: cin >> s[i];
	for(int i = 0; i < n; ++ i) {
		t[i] = s[i];
		std :: reverse(t[i].begin(), t[i].end());
		// if(i > 0 && s[i] < s[i-1] && s[i] < t[i-1] && t[i] < s[i-1] && t[i] < t[i-1]) {
		// 	std :: cout << -1 << endl;
		// 	return ;
		// }
	}
	dp[0][0] = 0; dp[0][1] = c[0];
	for(int i = 1; i < n; ++ i) {
		dp[i][0] = INF; dp[i][1] = INF;
		if(s[i] >= s[i-1]) dp[i][0] = std :: min(dp[i][0], dp[i-1][0]);
		if(s[i] >= t[i-1]) dp[i][0] = std :: min(dp[i][0], dp[i-1][1]);
		if(t[i] >= s[i-1]) dp[i][1] = std :: min(dp[i-1][0], dp[i][1]);
		if(t[i] >= t[i-1]) dp[i][1] = std :: min(dp[i-1][1], dp[i][1]);
		dp[i][1] += c[i];
	}
	if(std :: min(dp[n-1][0], dp[n-1][1]) == INF) puts("-1");
	else std :: cout << std :: min(dp[n-1][0], dp[n-1][1]);
}

int main() {
	//freopen("1.in", "r", stdin);
	//freopen("1.out", "w", stdout);
	std :: ios :: sync_with_stdio(false);
	std :: cin.tie(0);
	std :: cout.tie(0);
	int T = 1;
	//std :: cin >> T; 
	while(T --) solve();
	return 0;
}
2023/7/29 14:40
加载中...