Why E Wa on #4
  • 板块学术版
  • 楼主DoubleQLzn
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/2/1 21:40
  • 上次更新2025/2/2 11:50:30
查看原帖
Why E Wa on #4
953149
DoubleQLzn楼主2025/2/1 21:40
#include <bits/stdc++.h>
using namespace std;
#define int long long
int a[4000005];
int solve(int a,int b,int c)
{
	int f[4] = {0};
	f[a]++,f[b]++,f[c]++;
	if (f[0] > f[1]) return 0;
	else return 1;
}
int qsort1(int a,int b,int c)
{
	vector<int> d;
	d.push_back(a),d.push_back(b),d.push_back(c);
	sort(d.begin(),d.end());
	return d[0] + d[1];
}
int now=0;
pair<int,int> dfs(int l,int r)
{
	now++;
	//if (l > r) return make_pair(0,0);
	//cout<<l<<' '<<r<<endl;
	if (l == r) return make_pair(a[l],1);
	else 
	{
		// 1 3 2 2 3 3 
		int l1 = l,r1 = l1 + (r - l + 1) / 3 - 1;
		int l2 = r1 + 1,r2 = r1 + ((r - l + 1) / 3);
		int l3 = r2 + 1,r3 = r;
	//	cout<<l1<<' '<<l2<<' '<<l3<<' '<<r1<<' '<<r2<<' '<<r3<<' ';
		pair<int,int> a = dfs(l1,r1);
		pair<int,int> b = dfs(l2,r2);
		pair<int,int> c = dfs(l3,r3);
		int ans1 = solve(a.first,b.first,c.first);
		int ans2;
		if (a.first == b.first && b.first == c.first) ans2 = qsort1(a.second,b.second,c.second);
		else ans2 = min({a.second,b.second,c.second});
		return make_pair(ans1,ans2);
	}
}
signed main()
{
//	ios::sync_with_stdio(0);
//	cin.tie(0);
//	cout.tie(0);
	int n;
	cin >> n;
	int len = 1;
	for (int i = 1;i <= n;i++) len *= 3;
	for (int i = 1;i <= len;i++)
	{
		char c;
		cin >> c;
		a[i] = c - 48;
	}
	cout << dfs(1,len).second;
	return 0;
}
2025/2/1 21:40
加载中...