- 在題目營造的幻象之下,撥開迷霧,探尋背後的本質
- 既然執行邏輯沒問題,就一定是演算法邏輯出了漏洞
點選檢視程式碼
#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;
}