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. 关于引用WebLogic.jar时遇到NoClassDefFoundError问题的解决方法

    前段时间在做一个项目开发时,需要用到weblogic.jndi.WLInitialContextFactory,所以按照以前的经验,将WebLogic.jar添加到Build Path中.可是在执行时 ...

  2. map select reduce

    map: 针对每个element进行变换并返回整个修改后的map a.map do |item| a.upcase end a.map(&:upcase) 一样的效果, &:代表了it ...

  3. IOS 状态栏 显示与隐藏网络活动状态

    IOS中显示和隐藏状态栏的网络活动标志 //在向服务端发送请求状态栏显示网络活动标志: [[UIApplication sharedApplication] setNetworkActivityInd ...

  4. spring 'arroudAspect' for bean class [com.dw.test.ArroudAspect] conflicts with existing, non-compatible bean definition of same name and class [com.dw.aspect.ArroudAspect]

    Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: ...

  5. myeclipse 安装flex插件后变为中文 修改配置文件切换到英文界面

    解决办法: 1. cmd 敲命令进入安装目录,运行myeclipse.exe -nl en后,启动为英文 在安装目录下新建txt,改名为myeclipse.bat,将上面那行命令写入保存,再发送快捷方 ...

  6. React之组件小析

    组件就是标签,html的标签某种角度讲就是组件. index.js是项目的入口文件. react中大写字母开头的都是组件. App.js就是一个组件. ReactDOM会将组件内容,渲染到页面当中. ...

  7. T60

    The smooth contour of the sculpture is wonderful.Her commitment to a great cause degenerated from a ...

  8. linux进程学习笔记

    学习了linux下的进程,觉得应该整理一下,忘得差不多了,顺便回顾一下. 学而时习之,不亦说乎~~ 进程笔记 ,什么是进程? The Single UNIX Specification, Versio ...

  9. 为什么修改头文件make不重新编译

    make是根据依赖文件的时间戳来决定要不要重新编译的.在: object: deplist # actions 中,可以把头文件加进deplist,这样修改头文件后,make就会重新编译了. 单纯地修 ...

  10. 「UVA557」 Burger(概率

    本题征求翻译.如果你能提供翻译或者题意简述,请 提交翻译 ,感谢你的贡献. 题目描述 PDF 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例#1: 复制 3 6 10 256 输出样例# ...