2 条题解

  • 3
    @ 2025-11-15 23:12:49

    根据题意,把n写成二进制形式,前面补任意个0之后,判断是否回文,以及长度是奇数中间是1还是0,若是回文且长度为奇数时中间是0则可以构成

    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    #define i64 long long
    
    int a[100]={0};
    
    void solve(){
    	for(int i=0;i<=33;i++) a[i]=0;
    	int n;
    	cin>>n;
    	int kk=0;
    	while(n){
    		kk++;
    		if(n%2){
    			a[kk]=1;
    		}
    		n/=2;
    	}
    	bool ok=0;
    	for(int i=kk;i<=kk+31;i++){
    		int l=1,r=i;
    		bool aa=1;
    		while(l<r){
    			if(a[l]!=a[r]){
    				aa=0;
    				break;
    			}
    			l++;
    			r--;
    		}
    		if((i)&1){
    			if(a[l]==1) aa=0;
    		}
    		if(aa){
    			ok=1;
    			break;
    		}
    	}
    	if(ok) cout<<"YES"<<'\n';
    	else cout<<"NO"<<'\n';
    }
    
    signed main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        cout.tie(nullptr);
    
        int t=1;
        cin>>t;
    
        while(t--){
            solve();
        }
    
        return 0;
    }
    

    信息

    ID
    1197
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    32
    已通过
    7
    上传者