求助40分P8942
  • 板块题目总版
  • 楼主MunYixty
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/1/16 13:21
  • 上次更新2023/10/24 04:01:11
查看原帖
求助40分P8942
868365
MunYixty楼主2023/1/16 13:21

WA最后一个点

#include<bits/stdc++.h>  
using namespace std;  
long long powof2[]={1 , 2 , 4 , 8 , 16 , 32 ,
64 , 128 , 256 , 512 , 1024 , 2048 ,
4096 , 8192 , 16384 , 32768 , 65536 , 131072 ,
262144 , 524288 , 1048576 , 2097152 , 4194304 , 8388608 ,
16777216 , 33554432 , 67108864 , 134217728 , 268435456 , 536870912 ,
1073741824 , 2147483648,4294967296,8589934592,17179869184,34359738368,68719476736,137438953472,274877906944 ,
549755813888,1099511627776,2199023255552,4398046511104,8796093022208,17592186044416,35184372088832,70368744177664,
140737488355328,281474976710656,562949953421312,1125899906842624,2251799813685248,4503599627370496,9007199254740992,18014398509481984,36028797018963968,72057594037927936,
144115188075855872,288230376151711744,576460752303423488,1152921504606846976,2305843009213693952,4611686018427387904};
long long cc(long long n)
{
	int left = 0 ;
int right = 31 ;

while (left <= right)
{
int mid = (left + right) / 2 ;

if (powof2[mid] <= n)
{
if (powof2[mid + 1 ] > n)
return mid + 1 ; // got it!
else // powof2[mid] < n, search right part
left = mid + 1 ;
}

else // powof2[mid] > n, search left part
right = mid - 1 ;
}

// not found
return 63 ; 
}
int main ()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
    	long long n,m;
    	scanf("%lld%lld",&n,&m);
    	long long vv=cc(m); 
    	if(vv<n)
    	{
    		cout<<"No"<<endl;
		}
		else 
		{
			cout<<"Yes"<<endl;
			for(long long i=0;i<n;i++)
			{
				cout<<(1ll<<i)<<" ";
			}cout<<endl;
		}
	}
    return 0;
} 
2023/1/16 13:21
加载中...