求助J组T3
  • 板块灌水区
  • 楼主koukou
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/13 19:09
  • 上次更新2024/10/13 21:33:15
查看原帖
求助J组T3
1025097
koukou楼主2024/10/13 19:09

rt,思路大概就是建一棵树(我好菜啊)

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e6 + 1;
int m, q, l;
string tmp;
struct node
{
	int p;
	int f;/*-1:结束 0:<  1:> */
}s[N];
void work(int l, int x)
{
	int j = l + 1;
	if(tmp[l] == '>')
	{
		s[x].f = 1;
	}
	else
	{
		s[x].f = 0;
	}
	int c = 0;
	while(tmp[j] >= '0' && tmp[j] <= '9')
	{
		c = c * 10 + (tmp[j] - '0');
		j++;
	}
	s[x].p = c;
	int yyy = j + 1;
	if(tmp[yyy] == 'x')
	{
		work(yyy + 1, x * 2);
	}
	else
	{
		j = yyy;
		c = 0;
		while(tmp[j] >= '0' && tmp[j] <= '9')
		{
			c = c * 10 + (tmp[j] - '0');
			j++;
		}
		s[x * 2].p = c;
		s[x * 2].f = -1;
	}
	int wsum = 1;
	while(wsum)
	{
		if(tmp[yyy] == '?')
		{
			wsum++;
		}
		else if(tmp[yyy] == ':')
		{
			wsum--;
		}
		yyy++;
	}
	j = yyy;
	if(tmp[j] == 'x')
	{
		work(j + 1, x * 2 + 1);
	}
	else
	{
		c = 0;
		while(tmp[j] >= '0' && tmp[j] <= '9')
		{
			c = c * 10 + (tmp[j] - '0');
			j++;
		}
		s[x * 2 + 1].p = c;
		s[x * 2 + 1].f = -1;
	}
	return;
}
signed main()
{
	cin >> m >> q;
	cin >> tmp;
	work(1, 1);
	while(q--)
	{
		int i = 1, x;
		cin >> x;
		while(s[i].f != -1)
		{
			if(s[i].f == 0)
			{
				if(x < s[i].p)
				{
					i *= 2;
				}
				else
				{
					i *= 2, i++;
				}
			}
			else
			{
				if(x > s[i].p)
				{
					i *= 2;
				}
				else
				{
					i *= 2, i++;
				}
			}
		}
		cout << s[i].p << "\n";
	}
	return 0;
}
2024/10/13 19:09
加载中...