P1633 二进制

题目描述

有三个整数A、B、C,以下用N(2)表示N的二进制(没有前导0)。

设A(2)、B(2)、C(2)的最大长度为L,你需要构造三个正整数X、Y、Z,满足以下条件:

(1) X(2)、Y(2)、Z(2)的长度都不超过L。

(2) A(2)与X(2)中1的个数相同。

(3) B(2)与Y(2)中1的个数相同。

(4) C(2)与Z(2)中1的个数相同。

(5) X+Y=Z.。

输入输出格式

输入格式:

第一行包含一个正整数T,表示有T组测试数据。

接下来T行,每行三个正整数A、B、C。

【数据规模】

对于30%的数据中,满足1<=A、B、C<=100;

对于100%的数据中,满足1<=T<=10,1<=A、B、C<=2^30。

输出格式:

输出共T行,每行一个答案。

输出最小的Z。如果没有z则输出-1

输入输出样例

输入样例#1:

4
7 6 9
1 1 1
1 1 4
3 3 9
输出样例#1:

10
-1
2
6
/*
我们考虑三个长度为l的串;
显然如果这3个串符合条件的话;
我们就只要保证增加2^l级别的值满足加法原则就好了;
所以我们大力dp;
f[i][a][b][c][0/1]
i表示位数
a表示x串前i-1个字符所有的1的数量;
b,c同理;
0/1表示c串在第i位是1还是0;
预处理
f[1][0][0][0][0]=0;其他都是inf;
转移就是考虑当前第i位a,b要不要放1;
然后对应的计算c新增的值;
*/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define N 35
long long f[N][N][N][N][],a1,b1,c1;
int T,n;
int l(long long x){
int cnt1=,cnt2=;
while(x){
cnt1++;
if(x&)cnt2++;
x>>=;
}
n=max(n,cnt1);
return cnt2;
}
int main(){
scanf("%d",&T);
while(T--){
cin>>a1>>b1>>c1;n=;
int A=l(a1),B=l(b1),C=l(c1);
memset(f,/,sizeof(f));
f[][][][][]=;
for(int i=;i<=n;i++){
for(int a=;a<=A;a++)
for(int b=;b<=B;b++)
for(int c=;c<=C;c++){
long long v=f[i][a][b][c][];
f[i+][a][b][c][]=min(f[i+][a][b][c][],v);
f[i+][a+][b+][c][]=min(f[i+][a+][b+][c][],v+(<<i));
f[i+][a+][b][c+][]=min(f[i+][a+][b][c+][],v+(<<(i-)));
f[i+][a][b+][c+][]=min(f[i+][a][b+][c+][],v+(<<(i-)));
v=f[i][a][b][c][];
f[i+][a][b][c+][]=min(f[i+][a][b][c+][],v);
f[i+][a+][b+][c+][]=min(f[i+][a+][b+][c+][],v+(<<i));
f[i+][a+][b][c][]=min(f[i+][a+][b][c][],v+(<<(i-)));
f[i+][a][b+][c][]=min(f[i+][a][b+][c][],v+(<<(i-)));
}
}
if(f[n+][A][B][C][]>(<<))printf("-1\n");
else cout<<f[n+][A][B][C][]<<endl;
}
}

洛谷P1633 二进制的更多相关文章

  1. 洛谷P4428二进制 [BJOI2018] 线段树

    正解:线段树 解题报告: 传送门! 话说开始看到这题的时候我想得hin简单 因为关于%3有个性质就是说一个数的各个位数之和%3=这个数%3嘛,小学基础知识? 我就想着,就直接建一棵树,只是这棵树要用个 ...

  2. 洛谷 P2104 二进制

    P2104 二进制 题目描述 小Z最近学会了二进制数,他觉得太小的二进制数太没意思,于是他想对一个巨大二进制数做以下 4 种基础运算: 运算 1:将整个二进制数加 1 运算 2:将整个二进制数减 1 ...

  3. 洛谷P2456 二进制方程

    题目 字符串模拟+并查集 建立两个并查集分别存放每个变量的每一位数的祖先,一个是1一个是2 考虑每个字母的每一位的数都是唯一的,先模拟,记录每一个变量的每一位. 一一映射到方程中去,最后将两个方程进行 ...

  4. 「洛谷5300」「GXOI/GZOI2019」与或和【单调栈+二进制转化】

    题目链接 [洛谷传送门] 题解 按位处理. 把每一位对应的图都处理出来 然后单调栈处理一下就好了. \(and\)操作处理全\(1\). \(or\)操作处理全\(0\). 代码 #include & ...

  5. Bzoj5294/洛谷P4428 [Bjoi2018]二进制(线段树)

    题面 Bzoj 洛谷 题解 考虑一个什么样的区间满足重组之后可以变成\(3\)的倍数.不妨设\(tot\)为一个区间内\(1\)的个数.如果\(tot\)是个偶数,则这个区间一定是\(3\)的倍数,接 ...

  6. 洛谷P1017 进制转换

    洛谷P1017 进制转换 题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 \(1*10 ...

  7. 洛谷P1117 棋盘游戏

    洛谷1117 棋盘游戏 题目描述 在一个4*4的棋盘上有8个黑棋和8个白棋,当且仅当两个格子有公共边,这两个格子上的棋是相邻的.移动棋子的规则是交换相邻两个棋子.现在给出一个初始棋盘和一个最终棋盘,要 ...

  8. 洛谷1377 M国王 (SCOI2005互不侵犯King)

    洛谷1377 M国王 (SCOI2005互不侵犯King) 本题地址:http://www.luogu.org/problem/show?pid=1377 题目描述 天天都是n皇后,多么无聊啊.我们来 ...

  9. 洛谷 P1017 进制转换

    推荐洛谷 题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 1*10^2+2*10^1+ ...

随机推荐

  1. ABAP 设置单元格颜色

    http://blog.163.com/ronanchen@126/blog/static/172254750201161811040488/ http://blog.csdn.net/lhx20/a ...

  2. 【总结】性能调优:JVM内存调优相关文章

    [总结]性能调优:JVM内存诊断工具 [总结]性能调优:CPU消耗分析 [总结]性能调优:消耗分析 JVM性能调优

  3. 在pycharm中执行脚本没有报错但输出显示Redirection is not supported.

    没有新式语法错误,但是输出显示Redirection is not supported.(不支持重定向) 在stockflow中找到是因为从IDE中运行脚本的原因,比如pycharm,所有IDE都提供 ...

  4. 《高性能Javascript》 Summary(二)

    第四章.算法和流程控制 Algorithms And Flow Control 原因:代码整体结构是执行速度的决定因素之一.代码量少不一定运行速度快,代码量多不一定运行速度慢.性能损失与组织代码和具体 ...

  5. Matlab图像处理(02)-图像基础

    数据类 Matlab中和IPT中支持的基本数据类型如下: 名称 描述 double 双精度浮点数,范围-10308~10308  8字节 uint8 无符号1字节整数,范围[0, 255] uint1 ...

  6. ceres求解BA第10章

    1.前言g2o是根据边来保存每一个代价函数,它是在边类中构造误差函数,构造边的时候,会设置顶点.测量值.协方差矩阵等.而在ceres中,用problem类型来构造最终的目标函数.先是使用AddResi ...

  7. 算法(Algorithms)第4版 练习 1.3.25 1.3.24

    代码实现: //1.3.24 /** * remove the node following the node x * (and does nothing if the argument or the ...

  8. Use trained sklearn model with pyspark

    Use trained sklearn model with pyspark   from pyspark import SparkContext import numpy as np from sk ...

  9. listen 70

    Better Sidewalks Could Bring Improved Public Health Most of our serious illnesses and deaths in the ...

  10. BZOJ1251 序列终结者(Splay平衡树)(占位)

    网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列 要支持几种操作:D.C.B.A.尤其是我们这里的某人,出模拟试题,居然还出了一道这样的,真是没技术含量…… ...