求助,为什么总是wa一个点
查看原帖
求助,为什么总是wa一个点
1155762
TCIC_4294967296楼主2024/3/31 13:15
#include<bits/stdc++.h>
using namespace std;
#define int long long

int a,b,c;
bool bit[70];

int popcnt(int l,int r){
    int cnt=0;
    for (int i = l; i <= r; i ++ ){
        if(bit[i]) cnt++;
    }
    return cnt;
}

int put(int l,int r){
    int num=0;
    for(int i=l;i<=r;i++){
        if(bit[i]) num|=1ll<<i;
    }
    return num;
}

signed main(){
    cin>>a>>b>>c;
    for (int i = 0; i < 64; i ++ ){
        bit[i]=c>>i&1ll;
    }
    int pc=popcnt(0,63);
    if(a+b<popcnt(0,63)){
        cout<<-1;
        return 0;
    }
    if(a+b==popcnt(0,63)){
        for(int i=0;i<=63;i++){
            if(popcnt(0,i)==a&&popcnt(i+1,63)==b){
                cout<<put(0,i)<<" "<<put(i+1,63);
                return 0;
            }
        }
    }
    if((a+b-popcnt(0,63))%2==1){
        cout<<-1;
        return 0;
    }
    int xiao=(a+b-pc)/2,na=a-(a+b-pc)/2,nb=b-(a+b-pc)/2;
    if(na<0||nb<0){
        cout<<-1;
        return 0;
    }
    for(int i=0;i<=63;i++){
        if(popcnt(0,i)==na&&popcnt(i+1,63)==nb){
            int addbit=0,xx=xiao;
            for(int j=59;j>=0;j--){
                if(!bit[j]&&xx){
                    addbit|=1ll<<j;
                    xx--;
                }
            }
            if(!xx){
                cout<<(put(0,i)|addbit)<<" "<<(put(i+1,63)|addbit);
                return 0;
            }
        }
    }
    cout<<-1;
}
2024/3/31 13:15
加载中...