void solve(){
    int n;cin>>n;
    vector<int> a(n+1);
    for(int i=1;i<=n;i++)cin>>a[i];
    int x;cin>>x;
    vector<int> rec(101);
    for(int i=1;i<=n;i++){
        for(int j=0;;j++){
            if(a[i]<x)break;
            if(a[i]==x){rec[j]+=(1ll<<j);break;}
            a[i]=(a[i]+2)/3;
        }
    }
    int maxl=0;
    for(int i=0;i<=100;i++){
        maxl=max(maxl,rec[i]);
    }
    cout<<maxl<<endl;
}

对于任意一个大于等于2的数,我们可以发现,经过 除三向上取余之后都不会等于他自身,那么我们可以计算每个数再经过多少论之后会等于三,假设k论之后恰好等于三,那么此数就会在第k论生成 2的k次方个产物,我们只要记录每一轮生成产物的数量即可,易知k不会太大,我们遍历每个数,在其对应的k处记录即可