数据太水,建议添加Hack(本蒟蒻的暴力代码都过了)
查看原帖
数据太水,建议添加Hack(本蒟蒻的暴力代码都过了)
573963
wbh20090611楼主2024/7/25 10:47
#include<bits/stdc++.h>
using namespace std;
string x, y;
int a[300005], b[300005], c[300005], l, r;
void jian(int k[], int s)
{
	int ii;
	for (ii = s; !k[ii]; ii++)
		k[ii] = 1;
	k[ii]--;
	return;
}
void jia(int k[], int s)
{
	int ii;
	for (ii = s; k[ii]; ii++)
		k[ii] = 0;
	k[ii]++;
	return;
}
int main()
{
	ios::sync_with_stdio(false);
	cin >> x >> y;
	l = r = 100000;
	a[l] = b[r] = 1;
	char i;
		for (int j = 0; j < x.size(); j++)
	{
		i = x[j];
		switch(i)
		{
			case '1':
				l--;
				break;
			case '2':
				l--;
				a[l] = 1;
				break;
			case 'L':
				if (j < x.size() - 1 && x[j + 1] == 'R')
				{
					j++;
					continue;
				}
				jian(a, l);
				break;
			case 'R':
				if (j < x.size() - 1 && x[j + 1] == 'L')
				{
					j++;
					continue;
				}
				jia(a, l);
				break;
			default:
				l++;
				a[l - 1] = 0;
				break;
		}
	}
	for (int j = 0; j < y.size(); j++)
	{
		i = y[j];
		switch(i)
		{
			case '1':
				r--;
				break;
			case '2':
				r--;
				b[r] = 1;
				break;
			case 'L':
				if (j < y.size() - 1 && y[j + 1] == 'R')
				{
					j++;
					continue;
				}
				jian(b, r);
				break;
			case 'R':
				if (j < y.size() - 1 && y[j + 1] == 'L')
				{
					j++;
					continue;
				}
				jia(b, r);
				break;
			default:
				r++;
				b[r - 1] = 0;
				break;
		}
	}
	int t = 0;
	for (int i = 100000; i > 0; i--)
	{
		if (a[i] > b[i])
		{
			t = 1;
			break;
		}
		if (a[i] < b[i])
		{
			t = 2;
			break;
		}
	}
	if (t == 0)
	{
		cout << 0;
		return 0;
	}
	if (t == 1)
	{
		int xx = 0;
	}
	else
	{
		int xx = 0;
		for (int i = min(l, r); i <= 100000; i++)
		{
			swap(a[i], b[i]);
		}
	}
	long long ans = 200000 - l - r;
	long long f = 0;
	for (long long i = 99999; i >= max(l, r); i--)
	{
		f *= 2;
		f += a[i] - b[i];
		if (f + i * 2 - l - r > ans)
			break;
		ans = f + i * 2 - l - r;
	}
	cout << ans;
}

Hack方案: 用{LR}*1000000卡掉

2024/7/25 10:47
加载中...