Wooden Game

D06發表於2024-10-02
  • 在題目營造的幻象之下,撥開迷霧,探尋背後的本質
  • 既然執行邏輯沒問題,就一定是演算法邏輯出了漏洞
點選檢視程式碼
#include <bits/stdc++.h>
using namespace std;
vector<int>a[30];
int maxn;
void add(int n)
{
	if(!n)
	{
		return;
	}
	int p=31-__builtin_clz(n);
	maxn=max(maxn,p);
	a[p].push_back(n);
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	int T;
	cin>>T;
	while(T--)
	{
		for(int i=0;i<=20;i++)
		{
			a[i].clear();
		}
		int k;
		cin>>k;
		maxn=0;
		for(int i=1;i<=k;i++)
		{
			int n;
			cin>>n;
			for(int j=1;j<n;j++)
			{
				int p;
				cin>>p;
			}
			add(n);
		}
		int cur=0;
		bool f=false;
		for(int i=maxn;i>=0;i--)
		{
			for(int j=0;j<a[i].size();j++)
			{
				if(((cur>>i)&1)==0)
				{
					cur=cur|(1<<i);
					a[i][j]-=(1<<i);
					add(a[i][j]);
				}
				else
				{
					cur=cur|((1<<i)-1);
					f=true;
					break;
				}
			}
			if(f==true)
			{
				break;
			}
		}
		cout<<cur<<"\n";
	}
	return 0;
}