求助
查看原帖
求助
1390034
wwwww101楼主2025/2/4 16:21

为什么我左闭右闭区间TLE左闭右开就AC?

#include <bits/stdc++.h>
using namespace std;
int n;
const int N = 2e6 + 10;
int a[N];

pair<int, int> f(int l, int r)
{
	if (l == r) return {a[l], 1};
	int m1 = (2 * l + r) / 3;
	int m2 = (l + 2 * r) / 3;
	int val1 = f(l, m1).first, cnt1 = f(l, m1).second;
	int val2 = f(m1 + 1, m2).first, cnt2 = f(m1 + 1, m2).second;
	int val3 = f(m2 + 1, r).first, cnt3 = f(m2 + 1, r).second;
	if (val1 == val2 && val2 == val3) return {val1, cnt1 + cnt2 + cnt3 - max({cnt1, cnt2, cnt3})};
	else if (val1 == val2) return {val1, min(cnt1, cnt2)};
	else if (val1 == val3) return {val1, min(cnt1, cnt3)};
	else if (val2 == val3) return {val2, min(cnt2, cnt3)};
	return {val1, min({cnt1, cnt2, cnt3})};
}

int main()
{
//	freopen("1.txt", "r", stdin);
//	freopen("2.ans", "w", stdout);
	ios::sync_with_stdio(0);
	cin.tie(0), cout.tie(0); 
	string s;
	cin >> n >> s;
	for (int i = 0; s[i]; i ++ ) a[i + 1] = s[i] - '0';
	cout << f(1, (int)pow(3, n)).second;
	return 0;
}

2025/2/4 16:21
加载中...