华农oj Problem K: 负2进制【有技巧构造/待补】
Problem K: 负2进制
Time Limit: 2 Sec Memory Limit: 128 MB
Submit: 51 Solved: 6
[Submit][Status][Web Board]
Description
如果我16岁,我可以悄悄的说我好喜欢你;如果我26岁,我可以大声告诉你我很爱你;可惜我6岁,我什么都给不了你,我还要上小学。
我们都知道2进制,每一位的权值如下:
1 2 4 8 16 32 64
现在我们定义一种-2进制,每一位的权值如下:
1 -2 4 -8 16 -32 64
现在我们给一个正数x,用-2进制表示,输出ceil(x/2),用-2进制表示。
什么是ceil(x)? ceil(x)就是对x向上取整。
什么是对x向上取整 ? 向上取整就是取≥x的最小整数
什么是≥ ? 就是不小于
什么是不小于? 呵呵
Input
第一行为T代表有T组样例.(T<=20)
接下来有T行,每一行有一个用-2进制表示的正数(保证是正数且位数不超过5*10^5)
Output
对于每组测试输出一行,每行代表一个用-2进制表示的ceil(x/2).(注意不含前导0)
Sample Input
2
10101
10100
Sample Output
11111
11110
HINT
10101 用10进制表示是 21 , ceil(21/2) = 11
10100 用10进制表示是 20 , ceil(20/2) = 10
注意不要输出前导0
[Submit][Status]
10 -> 11, 002 -> 110, 12 -> 00
第一条是 ceil(x/2) 的变化,后面两条是为了消除 2
---
推出结论,除以2相当于把原来二进制数的每一位变成这一位与后一位都加上1,而第0位不变即可,于是得到新的二进制数,可能存在一些位为2,而这些位可与前面的一位消去,消去后就是答案
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const double eps = 1e-7;
const int maxn = 5e5 + 5;
const double pi = acos(-1.0);
char a[maxn];
int b[maxn];
int main(int argc, char const *argv[]) {
int t;
std::cin >> t;
while(t--)
{
memset(b,0,sizeof(b));
scanf("%s", &a);
int len = strlen(a);
for(int i = 0; i < len - 1; i++) {
if(a[i] =='1') {
b[i]++;
b[i+1]++;
}
}
if(a[len-1]=='1') {
b[len-1]++;
}
for(int i = len - 1; i >= 0; --i) {
if(b[i] >= 2) {
if(b[i-1] >= 1) {
b[i-1]--;
b[i] -= 2;
}
else{
b[i-1]++;
b[i-2]++;
}
}
}
int k = 0;
while (b[k]==0) {
k++;
}
while(k < len) {
std::cout << b[k];
k++;
}
std::cout << '\n';
}
return 0;
}
华农oj Problem K: 负2进制【有技巧构造/待补】的更多相关文章
- 华农oj Problem L: CreatorX背英语【STL】
Problem L: CreatorX背英语 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 53 Solved: 36 [Submit][Status][ ...
- 华农oj Problem J: 幻化【贪心/抽屉原理】
Problem J: 幻化 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 18 Solved: 3 [Submit][Status][Web Board ...
- 华农oj Problem B: Averyboy找密码【STL】
Problem B: Averyboy找密码 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 83 Solved: 29 [Submit][Status] ...
- 华农oj 2192: hzk又在打人【CRT合并/待补】
2192: hzk又在打人 Time Limit: 12 Sec Memory Limit: 512 MB Submit: 52 Solved: 1 [Submit][Status][Web Boar ...
- 【九度OJ】题目1138:进制转换 解题报告
[九度OJ]题目1138:进制转换 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1138 题目描述: 将一个长度最多为30 ...
- 【九度OJ】题目1080:进制转换 解题报告
[九度OJ]题目1080:进制转换 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1080 题目描述: 将M进制的数X转换为 ...
- 九度OJ 1194:八进制 (进制转换)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3521 解决:2058 题目描述: 输入一个整数,将其转换成八进制数输出. 输入: 输入包括一个整数N(0<=N<=100000 ...
- 九度OJ题目1208:10进制 VS 2进制 (JAVA)
题目描述: 对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数B,我们乘B为A的二进制逆序数. 例如对于十进制数173,它的二进制形式为10101101,逆序排列得到1 ...
- 九度oj 题目1208:10进制 VS 2进制
题目描述: 对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数B,我们乘B为A的二进制逆序数. 例如对于十进制数173,它的二进制形式为10101101,逆序排列得到10 ...
随机推荐
- Mac 小技巧
本文的大部分技巧来自于池建强老师的<MacTalk.人生元编程>,感谢他的辛苦付出,本文多系整理而已. 终端输入说英语 说英语时我们当然希望有标准发音.在Mac中不需要字典,直接在终端里输 ...
- spring 笔记3: Spring 多环境配置文件切换
使用Spring进行开发时,需要面对不同的运行环境,比如开发环境.测试环境.生产环境等.大多时候不同的环境需要不同的配置文件.网上很多资料都是使用Spring的Bean definition prof ...
- CentOS vim中backspace不能用,出现^?的解决方法
查看在VI配置器下面使用backspace删除时提示输出那个字符例如:^H.^?.^a等字符如果输出的是:^? 字符 则使用以下命令:[oracle@junyii~]$ stty erase ^? 再 ...
- 1079 Total Sales of Supply Chain (25 分)(树的遍历)
给出一颗销售供应的树,树根唯一.在树根处货物的价格为p,然后从根节点开始没往结点走一层,该层的货物价格将会在父节点的价格上增加r%.给出每个叶节点的货物量求出他们的价格之和 #include<b ...
- HDU 4741 Save Labman No.004 ( 三维计算几何 空间异面直线距离 )
空间异面直线的距离直接套模板. 求交点:求出两条直线的公共法向量,其中一条直线与法向量构成的平面 与 另一条直线 的交点即可.还是套模板o(╯□╰)o 1.不会有两条线平行的情况. 2.两条直线可能相 ...
- 201621123034 《Java程序设计》第6周学习总结
作业06-接口.内部类 1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 注1:关键词与内容不求多 ...
- .Net MVC断点进不去
.Net MVC断点进不去 1.httpget httppost 2.启动项设为UI 3.基于页面没错误的情况下
- Android开发中Parcelable接口的使用方法
在网上看到很多Android初入门的童鞋都在问Parcelable接口的使用方法,小编参考了相关Android教程,看到里面介绍的序列化方法主要有两种分别是实现Serializable接口和实现Par ...
- Window系统命令行调用控制面板程序
Window系统命令行调用控制面板程序 control.exe /name microsoft.folderoptions 启动资源管理器的 文件夹属性 选项卡 control.exe /name M ...
- [codeforces] 526D [51nod] 1554 欧姆诺姆和项链
原题 KMP 方法一: 听说是ex-kmp--来自学姐 ex-kmp是处理两个串s和t之间,t的每一个后缀在s中的最长前缀的长度的一个算法. 它很像manacher(至少我和学姐这么认为),记录了一个 ...