洛谷P1633 二进制
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
输入输出样例
4
7 6 9
1 1 1
1 1 4
3 3 9
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 二进制的更多相关文章
- 洛谷P4428二进制 [BJOI2018] 线段树
正解:线段树 解题报告: 传送门! 话说开始看到这题的时候我想得hin简单 因为关于%3有个性质就是说一个数的各个位数之和%3=这个数%3嘛,小学基础知识? 我就想着,就直接建一棵树,只是这棵树要用个 ...
- 洛谷 P2104 二进制
P2104 二进制 题目描述 小Z最近学会了二进制数,他觉得太小的二进制数太没意思,于是他想对一个巨大二进制数做以下 4 种基础运算: 运算 1:将整个二进制数加 1 运算 2:将整个二进制数减 1 ...
- 洛谷P2456 二进制方程
题目 字符串模拟+并查集 建立两个并查集分别存放每个变量的每一位数的祖先,一个是1一个是2 考虑每个字母的每一位的数都是唯一的,先模拟,记录每一个变量的每一位. 一一映射到方程中去,最后将两个方程进行 ...
- 「洛谷5300」「GXOI/GZOI2019」与或和【单调栈+二进制转化】
题目链接 [洛谷传送门] 题解 按位处理. 把每一位对应的图都处理出来 然后单调栈处理一下就好了. \(and\)操作处理全\(1\). \(or\)操作处理全\(0\). 代码 #include & ...
- Bzoj5294/洛谷P4428 [Bjoi2018]二进制(线段树)
题面 Bzoj 洛谷 题解 考虑一个什么样的区间满足重组之后可以变成\(3\)的倍数.不妨设\(tot\)为一个区间内\(1\)的个数.如果\(tot\)是个偶数,则这个区间一定是\(3\)的倍数,接 ...
- 洛谷P1017 进制转换
洛谷P1017 进制转换 题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 \(1*10 ...
- 洛谷P1117 棋盘游戏
洛谷1117 棋盘游戏 题目描述 在一个4*4的棋盘上有8个黑棋和8个白棋,当且仅当两个格子有公共边,这两个格子上的棋是相邻的.移动棋子的规则是交换相邻两个棋子.现在给出一个初始棋盘和一个最终棋盘,要 ...
- 洛谷1377 M国王 (SCOI2005互不侵犯King)
洛谷1377 M国王 (SCOI2005互不侵犯King) 本题地址:http://www.luogu.org/problem/show?pid=1377 题目描述 天天都是n皇后,多么无聊啊.我们来 ...
- 洛谷 P1017 进制转换
推荐洛谷 题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 1*10^2+2*10^1+ ...
随机推荐
- 扫盲-wpf依赖属性
一.什么是依赖属性 依赖属性就是一种自己可以没有值,并且可以通过绑定从其他数据源获取值.依赖属性可支持WPF中的样式设置.数据绑定.继承.动画及默认值. 将所有的属性都设置为依赖属性并不总是正确的解决 ...
- 【Leetcode-easy】ZigZag Conversion
思路1:String[numRow]行字符串数组.读取原始字符串每一个字符,设置行变量 nrow和行标志位flag(向下一行为1或向上一行为-1).将该字符连接到数组中对应的行字符串,同时nrow+= ...
- CLion提示can't find stdio.h等错误
先上解决办法,启动参数如下: $ LANG=en_US.UTF-8 /path/to/clion.sh 查了好知久,竟然就由于编码的原因.可是Ubuntu已经设置为英文UTF-8,还是可以通过上面的方 ...
- js动态插入标签代码(insertAdjacentHTML)
做网页时通过ajax请求获取到数据后,有的需要把数据拼接到带有各种标签的字符串中,拼接完字符串就需要把字符串动态添加到网页上的某个位置,举个
- 存储过程IF --ELSE IF -- END IF 使用
CREATE OR REPLACE PROCEDURE BJPJYXK_HF_SD( sqid_p IN VARCHAR2,--申请单ID xkbh_p IN VARCHAR2,--新生成的许可证编号 ...
- 基于node.js及express实现中间件,实现post、get
首先,当然是有必要的环境,安装node,这个我就不多说了. 依赖模块: "express": "^4.13.4", "request": & ...
- (转)epoll非阻塞读写规则
EPOLL技术 在linux的网络编程中,很长的时间都在使用select来做事件触发.在linux新的内核中,有了一种替换它的机制,就是epoll.相比于select,epoll最大的好处在于它不会随 ...
- PS 滤镜— —扇形warp
clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorithm'); I=imread ...
- Python: scikit-image 彩色图像滤波
一般的滤波器都是针对灰度图像的,scikit-image 库提供了针对彩色图像滤波的decorator:adapt_rgb,adapt_rgb 提供两种形式的滤波,一种是对rgb三个通道分别进行处理, ...
- POJ3237 Tree(树剖+线段树+lazy标记)
You are given a tree with N nodes. The tree’s nodes are numbered 1 through N and its edges are numbe ...