洛谷 P1555 尴尬的数字
2024-08-23 09:55:51
题目背景
Bessie刚刚学会了不同进制数之间的转换,但是她总是犯错误,因为她的两个前蹄不能轻松的握住钢笔。
题目描述
每当Bessie将一个数转换成新的进制时,她总会写错一位数字。例如,她将14转化成2进制数,正确的结果是"1110",但她可能会写成"0110"或"1111"。Bessie从不会意外的增加或删减数字,所以她可能会写出以"0"开头的错误数字。
给出Bessie转换后N的2进制形式和3进制形式,请计算出N的正确数值(用十进制表示)。N可能会达到10亿,输入数据保证解的存在唯一性。
输入输出格式
输入格式:
第一行,N的2进制表示(有一位是错误的数字)
第二行,N的3进制表示(有一位是错误的数字)
输出格式:
N的正确值
输入输出样例
输入样例#1: 复制
1010
212
输出样例#1: 复制
14
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int len1,len2;
long long sum1;
char s1[],s2[];
int num1[],num2[];
void dfs(long long num,int tot,int pos){
if(tot==len2){
if(sum1==num){
cout<<sum1;
exit();
}
return ;
}
if(pos) dfs(num+num2[tot]*pow(,tot),tot+,pos);
else{
if(num2[tot]!=&&tot!=len2-) dfs(num,tot+,);
else dfs(num,tot+,pos);
if(num2[tot]!=) dfs(num+pow(,tot),tot+,);
else dfs(num+pow(,tot),tot+,pos);
if(num2[tot]!=) dfs(num+*pow(,tot),tot+,);
else dfs(num+*pow(,tot),tot+,pos);
}
}
int main(){
scanf("%s",s1);scanf("%s",s2);
len1=strlen(s1);
len2=strlen(s2);
if(s1[]==''){
for(int i=;i<len1;i++)
sum1+=pow(,i)*(s1[len1--i]-'');
long long x=pow(,len1-);
cout<<sum1+x;
return ;
}
if(s2[]==''){
for(int i=;i<len2;i++)
sum1+=pow(,i)*(s2[len2--i]-'');
long long x=pow(,len2-);
cout<<sum1+x;
return ;
}
for(int i=;i<len1;i++) num1[i]=s1[len1--i]-'';
for(int i=;i<len2;i++) num2[i]=s2[len2--i]-'';
for(int i=;i<len1;i++) sum1+=pow(,i)*num1[i];
for(int i=;i<len1;i++){
if(num1[i]&&i!=len1-) sum1-=pow(,i);
else sum1+=pow(,i);
dfs(,,);
if(num1[i]&&i!=len1-) sum1+=pow(,i);
else sum1-=pow(,i);
}
}
最新文章
- CommandBehavior.CloseConnection
- 将页面上的内容导出到Excel
- as3 Loader 加载资源后内存泄露无法释放的问题。
- P2P小贷网站业务数据流程分享
- AngularJS PhoneCat代码分析
- Eclipse下jad反编译之&ldquo;类文件查看器&rdquo;不能处理给定的输入错误解决
- CSS鼠标样式
- 免费SSL证书申请
- Flash加载ini文件!
- 201521123030 《Java程序设计》 第9周学习总结
- 点分治X2
- Java获取某年某季度的第一天出错
- 基于spark实现并行化Apriori算法
- 【第一部分】01Leetcode刷题
- 数据分析:基于Python的自定义文件格式转换系统
- JAVA002标识符的命名规则、关键字
- 模板引擎(smarty)知识点总结四
- 【洛谷P1122】最大子树和
- Integer类之成员变量
- jQuery的过滤器总结