洛谷 P1555 尴尬的数字

P1555 尴尬的数字

题目背景

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[10000],s2[10000];
int num1[10000],num2[10000];
void dfs(long long num,int tot,int pos){
    if(tot==len2){
        if(sum1==num){
            cout<<sum1;
            exit(0);
        }
        return ;
    }
    if(pos)    dfs(num+num2[tot]*pow(3,tot),tot+1,pos);
    else{
        if(num2[tot]!=0&&tot!=len2-1)    dfs(num,tot+1,1);
        else dfs(num,tot+1,pos);
        if(num2[tot]!=1)    dfs(num+pow(3,tot),tot+1,1);
        else dfs(num+pow(3,tot),tot+1,pos);
        if(num2[tot]!=2)    dfs(num+2*pow(3,tot),tot+1,1);
        else dfs(num+2*pow(3,tot),tot+1,pos);
    }
}
int main(){
    scanf("%s",s1);scanf("%s",s2);
    len1=strlen(s1);
    len2=strlen(s2);
    if(s1[0]==‘0‘){
        for(int i=0;i<len1;i++)
            sum1+=pow(2,i)*(s1[len1-1-i]-‘0‘);
        long long x=pow(2,len1-1);
        cout<<sum1+x;
        return 0;
    }
    if(s2[0]==‘0‘){
        for(int i=0;i<len2;i++)
            sum1+=pow(3,i)*(s2[len2-1-i]-‘0‘);
        long long x=pow(3,len2-1);
        cout<<sum1+x;
        return 0;
    }
    for(int i=0;i<len1;i++)    num1[i]=s1[len1-1-i]-‘0‘;
    for(int i=0;i<len2;i++)    num2[i]=s2[len2-1-i]-‘0‘;
    for(int i=0;i<len1;i++)    sum1+=pow(2,i)*num1[i];
    for(int i=0;i<len1;i++){
        if(num1[i]&&i!=len1-1)    sum1-=pow(2,i);
        else sum1+=pow(2,i);
        dfs(0,0,0);
        if(num1[i]&&i!=len1-1)    sum1+=pow(2,i);
        else sum1-=pow(2,i);
    }
}

原文地址:https://www.cnblogs.com/cangT-Tlan/p/8213308.html

时间: 2024-10-15 07:59:09

洛谷 P1555 尴尬的数字的相关文章

洛谷P1216 [USACO1.5]数字三角形 Number Triangles

P1216 [USACO1.5]数字三角形 Number Triangles 题目描述 观察下面的数字金字塔. 写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大.每一步可以走到左下方的点也可以到达右下方的点. 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 在上面的样例中,从7 到 3 到 8 到 7 到 5 的路径产生了最大 输入输出格式 输入格式: 第一个行包含 R(1<= R<=1000) ,表示行的数目. 后面每行为这个数字金字塔特定行包含的整数. 所

洛谷 P1216 [USACO1.5]数字三角形 Number Triangles(水题日常)

题目描述 观察下面的数字金字塔. 写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大.每一步可以走到左下方的点也可以到达右下方的点. 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 在上面的样例中,从7 到 3 到 8 到 7 到 5 的路径产生了最大 输入输出格式 输入格式: 第一个行包含 R(1<= R<=1000) ,表示行的数目. 后面每行为这个数字金字塔特定行包含的整数. 所有的被供应的整数是非负的且不大于100. 输出格式: 单独的一行,包含那个可能

洛谷 P1982 小朋友的数字(NOIp2013普及组T3)

题目描述 有 n 个小朋友排成一列.每个小朋友手上都有一个数字,这个数字可正可负.规定每个小朋友的特征值等于排在他前面(包括他本人)的小朋友中连续若干个(最少有一个)小朋友手上的数字之和的最大值. 作为这些小朋友的老师,你需要给每个小朋友一个分数,分数是这样规定的:第一个小朋友的分数是他的特征值,其它小朋友的分数为排在他前面的所有小朋友中(不包括他本人),小朋友分数加上其特征值的最大值. 请计算所有小朋友分数的最大值,输出时保持最大值的符号,将其绝对值对 p 取模后输出. 输入输出格式 输入格式

洛谷 P1216 [USACO1.5]数字三角形 Number Triangles

题目描述 观察下面的数字金字塔. 写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大.每一步可以走到左下方的点也可以到达右下方的点. 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 在上面的样例中,从7 到 3 到 8 到 7 到 5 的路径产生了最大 输入输出格式 输入格式: 第一个行包含 R(1<= R<=1000) ,表示行的数目. 后面每行为这个数字金字塔特定行包含的整数. 所有的被供应的整数是非负的且不大于100. 输出格式: 单独的一行,包含那个可能

洛谷P1118 [USACO06FEB]数字三角形 搜索

洛谷P1118 [USACO06FEB]数字三角形Backward Digit Su-     搜索 这题我们发现每一个位置的加权就是 杨辉三角 yh[ n ][ i ] 然后我们就可以求 n! 暴力 ,但是会 TLE 额 好像是会T 因为12! 已经 4亿了然后我们加一个强力剪枝 如果当前求出来的 s 已经大于 sum了,因为没有负的加权,也就是说这一路是没有用了的,在继续搜下去也不能更新答案了,那么就直接退出 . 1 #include <cstdio> 2 #include <cma

洛谷P1118 数字三角形游戏

洛谷1118 数字三角形游戏 题目描述 有这么一个游戏: 写出一个1-N的排列a[i],然后每次将相邻两个数相加,构成新的序列,再对新序列进行这样的操作,显然每次构成的序列都比上一次的序列长度少1,直到只剩下一个数字位置.下面是一个例子:     3   1   2   4       4   3   6         7   9          16 最后得到16这样一个数字. 现在想要倒着玩这样一个游戏,如果知道N,知道最后得到的数字的大小sum,请你求出最初序列a[i],为1-N的一个

洛谷P1132 数字生成计划 广搜

洛谷P1132 数字生成计划 广搜 三种操作 因为要步数最少,所以广搜 1 #include <bits/stdc++.h> 2 #define For(i,j,k) for(int i=j;i<=k;i++) 3 using namespace std ; 4 5 const int N = 1000011 ; 6 struct node{ 7 int a,ans ; 8 }; 9 bool flag[N] ; 10 int f[N] ; 11 queue<node> q;

洛谷P1538迎春舞会之数字舞蹈

题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈”.顾名思义就是所有人一起排成若干个数字 -___-|||| 更为创新的是,每个人都是趴在地上,保证横竖. 现在给出数字及其要求摆出的大小,请你编程,模拟同学们的优美姿态. 输入输出格式 输入格式: 第一行为k.k表示要摆出数字的大小. 第二行为全部由数字组成的字符串,即要摆出的几个数字. 输出格式

洛谷 P2709 BZOJ 3781 小B的询问

题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重复次数.小B请你帮助他回答询问. 输入输出格式 输入格式: 第一行,三个整数N.M.K. 第二行,N个整数,表示小B的序列. 接下来的M行,每行两个整数L.R. 输出格式: M行,每行一个整数,其中第i行的整数表示第i个询问的答案. 输入输出样例 输入样例#1: 6 4 3 1 3 2 1 1 3