题解


 

A AND Minimum Spanning Tree

 

 参考代码:

#include<bits/stdc++.h>
#define maxl 200010
using namespace std;

int n,ans1;
int mi[31];
int ans[maxl];

inline void prework()
{
    scanf("%d",&n);
}

inline int find(int x)
{
    for(int j=0;j<=30;j++)
    if((x&mi[j])==0)
        return mi[j];
}

inline void mainwork()
{
    ans1=0;int x;
    for(int i=2;i<=n;i++)
    {
        if(i&1)
        {
            x=find(i);
            if(x<=n)
                ans[i]=x;
            else
                ans1++,ans[i]=1;    
        }
        else
            ans[i]=1;
    }
}

inline void print()
{
    printf("%d\n",ans1);
    for(int i=2;i<=n;i++)
        printf("%d%c",ans[i],(i==n)?'\n':' ');
}

int main()
{
    mi[0]=1;
    for(int i=1;i<=30;i++)
        mi[i]=mi[i-1]*2;
    int t;
    scanf("%d",&t);
    for(int i=1;i<=t;i++)
    {
        prework();
        mainwork();
        print();
    }
    return 0;
}
View Code

相关文章:

  • 2021-07-01
  • 2022-12-23
  • 2022-12-23
  • 2021-12-11
  • 2021-11-28
  • 2021-07-11
  • 2021-09-05
  • 2022-01-31
猜你喜欢
  • 2021-08-03
  • 2021-11-04
  • 2022-12-23
  • 2021-11-28
  • 2021-11-15
  • 2022-12-23
  • 2019-07-29
相关资源
相似解决方案