Acwing---841. 字符串哈希

2024-03-05 22:36
文章标签 字符串 哈希 acwing 841

本文主要是介绍Acwing---841. 字符串哈希,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

字符串哈希

  • 1.题目
  • 2.基本思想
  • 3.代码实现

1.题目

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

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

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

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

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

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

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

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

输出格式
输出正确的 N N N的值。

数据范围
0 ≤ N ≤ 1 0 9 0≤N≤10^9 0N109,且存在唯一解。

输入样例1:

1010
212

输出样例1:

14

样例解释
14 在二进制下的正确表示为 1110,在三进制下的正确表示为 112

2.基本思想

有一个十分简单的思路,把二进制数,所有可能的数都计算出来,存下来。在把三进制所以可能的数算出来,存下来。

两者的交集,所共同拥有的数字,一定是正确答案。

首先,需要枚举,改变二进制每一位对应的数假设给你的为 01001 十进制为 9

首先特殊判断第一位,如果为0,那么第一位可以改变为1:11001 十进制为 9+2^4=25 【如果为1,则

不能在改变了,正常的数没有前导零】然后看第二位 如果为0,则改变1,如果为1 则改变为0,记录下

改变的结果,以此重复.

三进制也是类似的办法:只不过三进制可以改变为0,1,2三种

3.代码实现

import java.util.HashSet;
import java.util.Scanner;class Main {static char[] arr2 = new char[40];private static int qjs(char[] arr, int b) {//秦九绍算法计算此二进制的十进制位int ten = 0;for (int i = 0; i < arr.length; i++) ten = ten * b + arr[i] - '0';return ten;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);arr2 = sc.next().toCharArray();//二进制char[] arr3 = sc.next().toCharArray();//三进制HashSet<Integer> set = new HashSet<>();//枚举每一位 二进制下 可能错误的可能for (int i = 0; i < arr2.length; i++) {arr2[i] ^= 1;//将每位 数字 异或相反数字set.add(qjs(arr2, 2));arr2[i] ^= 1;//将改变的位置 变回来 以便下次使用}//计算3进制的可能for (int i = 0; i < arr3.length; i++) {//存储本位char c = arr3[i];for (char j = '0'; j < '3'; j++) {if (arr3[i] == j ) continue;//如果c本位等于当前的值则跳过继续arr3[i] = j; //不是则给a赋予j值if (set.contains(qjs(arr3, 3))) {System.out.println(qjs(arr3, 3));return;}arr3[i] = c;}}}
}

这篇关于Acwing---841. 字符串哈希的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/778035

相关文章

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h

哈希表的底层实现(1)---C++版

目录 哈希表的基本原理 哈希表的优点 哈希表的缺点 应用场景 闭散列法 开散列法 开放定值法Open Addressing——线性探测的模拟实现 超大重点部分评析 链地址法Separate Chaining——哈希桶的模拟实现 哈希表(Hash Table)是一种数据结构,它通过将键(Key)映射到值(Value)的方式来实现快速的数据存储与查找。哈希表的核心概念是哈希

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

哈希表的封装和位图

文章目录 2 封装2.1 基础框架2.2 迭代器(1)2.3 迭代器(2) 3. 位图3.1 问题引入3.2 左移和右移?3.3 位图的实现3.4 位图的题目3.5 位图的应用 2 封装 2.1 基础框架 文章 有了前面map和set封装的经验,容易写出下面的代码 // UnorderedSet.h#pragma once#include "HashTable.h"

【408数据结构】散列 (哈希)知识点集合复习考点题目

苏泽  “弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家    知识点 1. 散列查找 散列查找是一种高效的查找方法,它通过散列函数将关键字映射到数组的一个位置,从而实现快速查找。这种方法的时间复杂度平均为(

C和指针:字符串

字符串、字符和字节 字符串基础 字符串就是一串零个或多个字符,并且以一个位模式为全0的NUL字节结尾。 字符串长度就是字符串中字符数。 size_t strlen( char const *string ); string为指针常量(const修饰string),指向的string是常量不能修改。size_t是无符号数,定义在stddef.h。 #include <stddef.h>

PHP字符串全排列

方法一: $str = 'abc';$a =str_split($str);perm($a, 0, count($a)-1);function perm(&$ar, $k, $m) {if($k == $m){ echo join('',$ar), PHP_EOL;}else {for($i=$k; $i<=$m; $i++) {swap($ar[$k], $ar[$i]);perm($ar

PHP: 深入了解一致性哈希

前言 随着memcache、redis以及其它一些内存K/V数据库的流行,一致性哈希也越来越被开发者所了解。因为这些内存K/V数据库大多不提供分布式支持(本文以redis为例),所以如果要提供多台redis server来提供服务的话,就需要解决如何将数据分散到redis server,并且在增减redis server时如何最大化的不令数据重新分布,这将是本文讨论的范畴。 取模算法 取模运

PHP7扩展开发之字符串处理

前言 这次,我们来看看字符串在PHP扩展里面如何处理。 示例代码如下: <?phpfunction str_concat($prefix, $string) {$len = strlen($prefix);$substr = substr($string, 0, $len);if ($substr != $prefix) {return $prefix." ".$string;} else