遍历出最大值,最小值。靠拢一次则
+
+
a
n
s
{++}ans
++ans ,直到相等。 Think Twice, Code Once
#include<bits/stdc++.h>#defineilinline#definegetgetchar#defineputputchar#defineisisdigit#definereregister#defineintlonglong#definedfor(i,a,b)for(re int i=a;i<=b;++i)#definedforr(i,a,b)for(re int i=a;i>=b;--i)#definedforn(i,a,b)for(re int i=a;i<=b;++i,put(10))#definemem(a,b)memset(a,b,sizeof a)#definememc(a,b)memcpy(a,b,sizeof a)#definepr114514191981#definegg(a) cout<<a,put(32)#defineINF0x7fffffff#definett(x) cout<<x<<'\n'#definelsi<<1#definersi<<1|1#definela(r) tr[r].ch[0]#definera(r) tr[r].ch[1]#definelowbit(x)(x&-x)usingnamespace std;typedefunsignedint ull;intread(void){
re int x=0,f=1;re char c=get();while(!is(c))(f=c==45?-1:1),c=get();while(is(c)) x=(x<<1)+(x<<3)+(c^48),c=get();return x*f;}voidwrite(int x){if(x<0) x=-x,put(45);if(x>9)write(x/10);put((x%10)^48);}#definewriteln(a)write(a),put(10)#definewritesp(a)write(a),put(32)#definewritessp(a)put(32),write(a)constint N=2e5+10,M=3e4+10,SN=1e4+10,mod=998244353;int n,a[N];signedmain(){int T=read();while(T--){
n=read();
re int u,ans=0,minn=INF,maxx=-INF;dfor(i,1,n) u=read(),minn=min(minn,u),maxx=max(maxx,u);if(n==1){puts("0");continue;}while(maxx^minn)++ans,maxx=(maxx+minn)>>1;writeln(ans);if(ans<=n){dfor(i,1,ans)writesp(minn);puts("");}}return0;}