首页 > 其他分享 >2058. 笨拙的手指

2058. 笨拙的手指

时间:2023-04-05 14:33:48浏览次数:45  
标签:笨拙 手指 数字 int 2058 二进制 贝茜 include 进制

2058. 笨拙的手指

奶牛贝茜正在学习如何在不同进制之间转换数字。

但是她总是犯错误,因为她无法轻易的用两个前蹄握住笔。

每当贝茜将数字转换为一个新的进制并写下结果时,她总是将其中的某一位数字写错。

例如,如果她将数字 14 转换为二进制数,那么正确的结果应为 1110,但她可能会写下 0110 或 1111。

贝茜不会额外添加或删除数字,但是可能会由于写错数字的原因,写下包含前导 0 的数字。

给定贝茜将数字 N 转换为二进制数字以及三进制数字的结果,请确定 N 的正确初始值(十进制表示)。

输入格式

第一行包含 N 的二进制表示,其中一位是错误的。

第二行包含 N 的三进制表示,其中一位是错误的。

输出格式

输出正确的 N 的值。

数据范围

0≤N≤109,且存在唯一解。

输入样例:

1010
212

输出样例:

14

样例解释

14 在二进制下的正确表示为 1110,在三进制下的正确表示为 112。

时/空限制:1s / 64MB

来源:USACO 2011 November Contest Bronze Division

分析

提交答案

#include<iostream>
#include<cstring>
#include<algorithm>
#include<unordered_set>

using namespace std;

int base(string s,int b)//表示将b进制下的string s转化称十进制数
{
    int res=0;
    for(auto x:s)//从高到低位,枚举每一位
        res=res*b+x-'0';
    return res;
}

int main()
{
    string x,y;///原数可能有前导0,所以原数在读的时候要用string来读入二进制表示和三进制表示的结果
    cin>>x>>y;
    
    unordered_set<int> hash;//定义一个哈希表
    
    for(int i=0;i<x.size();i++)//然后先将二进制表示枚举的结果放到哈希表当中
    {
        //这一位的值不是0就是1
        string s=x;//先把原字符串复制一遍
        //复制完之后,这一位的值需要变一下,第二位的值需要变一下
        s[i]^=1;//变一下,异或一个1就可以了。0的ASCll码是48,1的ASCll码是49,48^1的ASCll码是49(因为48是偶数,异或一个1等于加上一个1),49^1的ASCll码是48(因为49是奇数,异或一个1等于减去一个1)
        if(s.size()>1&&s[0]=='0') continue;//原来的字符串是不能有前导0的,要把原来含有前导0的数字去掉
        hash.insert(base(s,2));//然后将这个值加到哈希表当中,二进制下的结果转化成十进制之后放到哈希表当中
    }
    
    for(int i=0;i<y.size();i++)
        for(int j=0;j<3;j++)//三进制的话,每一位有两种选择,所以可以0到3枚举一遍
            if(y[i]-'0'!=j)//如果第i位不等于j的话
            {
                string s=y;//原字符串复制一遍
                s[i]=j+'0';//先把第i位恢复为j
                if(s.size()>1&&s[0]=='0') continue;
                int n=base(s,3);
                if(hash.count(n))//判断这个数之前如果出现了的话,就把这个数输出就可以了
                    cout<<n<<endl;
            }
    
    return 0;
}

标签:笨拙,手指,数字,int,2058,二进制,贝茜,include,进制
From: https://www.cnblogs.com/bujidao1128/p/17289390.html

相关文章

  • iDigitip指环:大手指小键盘的“救世主”
    对于手指粗大的用户来说,使用小巧的手机键盘可能会感觉相当痛苦,常常遇到输入错误的问题。这样,他们就不得不放弃简便的手指输入而被迫选择传统的手写笔。正是在这样一种需求下,iDigitip应运而生。iDigitip是一个戴在用户指尖的均码塑料环,通过一个类似手写笔笔尖的泡沫触点,手指再粗......
  • 《consul 简易上手指南》
    consul是一个用来做服务发现的框架,具有分布式、高可用以及可横向扩展的特性 什么是服务发现?为什么要实现服务发现?举个常见的例子: 假设有一台client想要实现不同......
  • ChIP-seq | ATAC-seq | Cut&Run | 新手指南
     没想到我是先玩了Cut&Run和单细胞ATAC-seq,搞通了再来分析ChIP-seq|ATAC-seq,因为之前接触到的数据太烂了,所以什么有意义的东西都没搞出来,又没有重复,导致分析和评估无从......
  • AcWing 2058. 笨拙的手指
    1.题目描述每当贝茜将数字转换为一个新的进制并写下结果时,她总是将其中的某一位数字写错。例如,如果她将数字14转换为二进制数,那么正确的结果应为1110,但她可能会写下01......
  • 【程序员的福利】手指操:增强记忆力,改善良好睡眠
    手指操第一式旋腕抬指十指放松、交叉,用手腕带动手做转圈运动,顺时针转60下,再逆时针转60下。 第二式轻压松指两手指尖相对,形如握球,轻按挤压至指根相触,反复......
  • acwing 笨拙的手指
    题目奶牛贝茜正在学习如何在不同进制之间转换数字。但是她总是犯错误,因为她无法轻易的用两个前蹄握住笔。每当贝茜将数字转换为一个新的进制并写下结果时,她总是将其中的......
  • 【每日随笔】手指训练 ( 产品需求探索、技术无关 | 手指训练作用 | 哪些人需要手指训
    文章目录​​一、手指训练作用​​​​二、哪些人需要手指训练​​​​三、手指操​​​​四、手指康复训练器材​​产品需求探索,研究下手指训练的市场,前景,是否可......
  • 【Oculus Interaction SDK】(八)特殊的 UI(曲面效果 & 手指点击)
    前言这篇文章是【OculusInteractionSDK】系列的一部分,如果发现有对不上的对方,可以回去翻看我之前发布的文章,或在评论区留言。如果文章的内容已经不适用于新版本了,也可以......
  • 三维手臂动态matlab仿真,可以灵活控制手指运动
    1.算法描述三维手臂动态matlab仿真,可以灵活控制手指运动 2.仿真效果预览matlab2022a仿真如下: 3.MATLAB核心程序 clc;clear;closeall;warningoff;addp......
  • Android集成mupdf,实现手写笔签字,手指翻页的java代码
    importandroid.graphics.Bitmap;importandroid.graphics.Color;importandroid.graphics.RectF;importandroid.util.Log;importjava.util.LinkedList;importc......