96分,大佬们求调,WA了一个-1的点
查看原帖
96分,大佬们求调,WA了一个-1的点
970336
MagicLyney_06楼主2023/10/5 19:40
//
// Created by 96454 on 2023/10/5.
//
#include <bits/stdc++.h>
using namespace std;
int a, b, c, numa, numb, numc;
long long ans;
int query(int x){
    int res = 0;
    while (x){
        if (x & 1) ++res;
        x >>= 1;
    }
    return res;
}
int main(){
    scanf("%d%d%d", &a, &b, &c);
    int aa = a, bb = b, cc = c;
    while (a){
        if (a & 1) ++numa;
        a >>= 1;
    }
    while (b){
        if (b & 1) ++numb;
        b >>= 1;
    }
    while (c){
        if (c & 1) ++numc;
        c >>= 1;
    }
    int nummm = max(numa, max(numb, numc));
    if (!numa && !numb && !numc){
        puts("0");
        return 0;
    }
    if (numc == 1){
        ans = 1ll * 1 << (numa + numb - 1);
        printf("%lld", query(ans) > nummm ? -1 : ans);
        return 0;
    }
    if (numa < numb) swap(numa, numb);
    if (numc > 1 && numb >= numc){
        ans += 1 << (numb + numa - numc);
        int num = 1;
        for (int i = 1; i < numc; i++) ans += 1 << num, ++num;
        printf("%lld", query(ans) > nummm ? -1 : ans);
        return 0;
    }
    if (numc > numb && numc <= numa){
        int num = 0;
        for (int i = 1; i <= numc - numb; i++) ans += 1 << num, ++num;
        for (int i = numc - numb + 1; i < numc; i++)
            ans += 1 << (++num);
        ans += 1 << numa;
        printf("%lld", query(ans) > nummm ? -1 : ans);
        return 0;
    }
    if (numc < numa + numb && numc > numa){
        int num = 0;
        for (int i = 1; i <= numc - numa; i++){
            ans += 1 << num, ++num;
        }
        for (int i = 1; i <= numa - (numb - numc + numa); i++) ans += 1 << num, ++num;
        for (int i = 2 * numc - numa - numb + 1; i < numc; i++) ans += 1 << (++num);
        ans += 1 << numc;
        printf("%lld", query(ans) > nummm ? -1 : ans);
        return 0;
    }
    if (numc == numa + numb)
    {
        ans = aa + bb;
        printf("%lld", query(ans) > nummm ? -1 : ans);
        return 0;
    }
    puts("-1");
    return 0;
}
/*
0111111111100
0111000000011
1110111111111
*/
2023/10/5 19:40
加载中...