解题关键: 1.最高位求法 long long int x=n^m; 式子两边同时取lg lg(x)=m*lg(n): x=10^(m*lg(n)): 10的整数次方的最高位一定是1,所以x的最高位取决于m*lg(n)的小数部分 k=m*lg(n)的小数部分=m*lg(n)-floor(m*lg(n)): x的最高位=floor(10^k): 注意浮点数会有误差,所以,通不过时要加点小数 2.最低位求法 普遍情况下可以运用快速幂求解,而本题由于是2的n次幂,所以可以直接用打表求解. #inclu…
知识储备 扩展欧几里得定理 欧几里得定理 (未掌握的话请移步[扩展欧几里得]) 正题 设存在ax+by=gcd(a,b),求x,y.我们已经知道了用扩欧求解的方法是递归,终止条件是x==1,y==0: int exgcd( int a, int b, int &x, int &y ) { ) { x = ; y = ; return a; } int tmp = a % b; if( tmp > b ) swap( tmp, b ); int ans=exgcd(b,a%b,x,y)…
Spoj-DISUBSTR - Distinct Substrings New Distinct Substrings SPOJ - SUBST1 我是根据kuangbin的后缀数组专题来的 这两题题意一样求解字符串中不同字串的个数: 这个属于后缀数组最基本的应用 给定一个字符串,求不相同的子串的个数. 算法分析: 每个子串一定是某个后缀的前缀,那么原问题等价于求所有后缀之间的不相同的前缀的个数. 如果所有的后缀按照 suffix(sa[1]), suffix(sa[2]), suffix(sa…
题目连接:10069 - Distinct Subsequences 题目大意:给出两个字符串x (lenth < 10000), z (lenth < 100), 求在x中有多少个z. 解题思路:二维数组DP, 有类似于求解最长公共子序列, cnt[i][j]表示在x的前j个字符中有多少个z 前i个字符. 状态转移方程 1.x[j] != z[i]              cnt[i][j] = cnt[i][j - 1]; 2.x[j] == z[i]   cnt[i][j] = cnt…
#牛顿迭代法 def sqrt1(x): y = 1.0 while abs(y * y - x) > 1e-6: y = (y + x/y)/2 return y #使用二分法 def sqrt2(x): if x > 1: a = 1.0 b = x else: a = x b = 1.0 y = (a + x)/2 while abs(y * y - x) > 1e-6: if y * y > x: b = y y = (y + a) /2 else: a = y y = (…
9. Palindrome Number Total Accepted: 136330 Total Submissions: 418995 Difficulty: Easy Determine whether an integer is a palindrome. Do this without extra space. Some hints: Could negative integers be palindromes? (ie, -1) If you are thinking of conv…
9. Palindrome Number Total Accepted: 136330 Total Submissions: 418995 Difficulty: Easy Determine whether an integer is a palindrome. Do this without extra space. Some hints: Could negative integers be palindromes? (ie, -1) If you are thinking of conv…
题目链接 这题真的体现了自己思维的不足,考虑问题只是考虑他的特殊性,却不能总结出它的一般性规律. 对于这题, 如果L == R , 那么结果为0. 否则, 我们只需要找到最高的某一位 (二进制数中的某一位, 设为第p位, 从0开始编号), 使得要找的两个数从最高位到最低位, 在第p位第一次出现不同,如 11110000 和 11101111, 这里 p = 4. 这样,结果就是 (2^p) ^ (2^p -1) 附上代码: l, r = map(long, raw_input().split()…
一,问题描述 给定一个正数数组arr(即数组元素全是正数),找出该数组中,两个元素相加的最大值,其中被加数的下标大于加数的下标.由加法运算的可逆性,j >i 这个条件可以去掉. 即求出: maxValue = max{arr[j]+arr[i] and j > i} 在数组arr中没有重复的元素情况下,若被加数的下标可以等于加数的下标,则该问题变成了寻找正数数组arr中最大值的元素了.因为 max{arr[i]} + max{arr[i]} 一定比 max{arr[i]} + arr[j] 大…
给定一个十进制整数N,求出从1到N的所有整数中出现"1"的个数. 例如:N=2,1,2出现了1个"1". N=12,1,2,3,4,5,6,7,8,9,10,11,12.出现了5个"1". 最直接的方法就是从1开始遍历到N,将其中每一个数中含有"1"的个数加起来,就得到了问题的解. long CountOne_simple(long n){ ,j = ; ; ; i <= n; i++){ j = i; ) { == )…
1 /*43 [程序 43 求奇数个数] 2 题目:求 0-7 所能组成的奇数个数. 3 */ 4 5 /*分析 6 * 1.0不能作最高位且最低位只能是1,3,5,7; 7 * 2.没有限定是几位数,可以是一位,两位...七位 8 * 3.数字应该不能重复出现.否者有无数个 9 * */ 10 11 package homework; 12 13 public class _43 { 14 15 public static void main(String[] args) { 16 // 声明…
多重网格法相对于普通的Jacobi迭代或者G-S迭代等能够得到和未知数的个数成线性的高效运行时间的主要原因在于:迭代初值的一步步接近真值和G_S方法的前面几步的快速收敛性. 先看一张图[1]: 这张图说明了以下几点:一.G-S迭代法在开始几步迭代时收敛速度很快,但是随着步数的增加收敛速度逐渐减慢:二.第一条性质和求解的方程未知数的个数无关,尤其是在最开始的收敛速度很快的几步:三.未知数个数越少,最终收敛速度越快,如图中的绿线(这个可以从另一个角度来理解,一般情况下,求解未知数个数少的方程显然比求…
题目描述 今天灵灵学习了使用欧几里得算法(即:辗转相除法)求解两个数的最大公约数.于是他决定用这个方法求解 \(N\) 个数的最大公约数. 输入格式 输入的第一行包含一个整数 \(N(1 \le N \le 10^5)\) . 输入的第二行包含 \(N\) 个整数 \(a_1, a_2, \dots a_n (1 \le a_i \le 10^9)\) ,两两之间有一个空格. 输出格式 输出这 \(N\) 个数的最大公约数. 样例输入 3 6 12 15 样例输出 3…
整理一下最近被问到的一些高频率的面试问题.总结一下方便日后复习巩固用,同时希望可以帮助一些朋友们. 1.python的基本数据类型 主要核心类型分为两类不可变类型:数字(int float bool complex),字符串(string),元祖(tuple),不可变集合(frozenset). 可变类型:列表(list),字典(dict),集合(set)这里的可变不可变,是指内存中的值是否可以被改变 补充一点,其中不可变集合就是一个无序的不可变的集合,元素也只能是可hash的主要用来做字典的键…
信息获取后通常需要进行处理,处理后的信息其目的是便于人们的应用.信息处理方法有多种,通常由数据的排序,查找,插入,删除等操作.本章介绍几种简单的数据排序算法和高效的排序算法. 本章主要涉及到的知识点有: 简单排序算法: 学会选择排序.冒泡排序.桶排序.插入排序的原理以及代码编写 高效排序算法: 理解希尔排序,基数排序,快速排序和归并排序的原理 1. 简单排序算法 简单排序算法包括选择排序.冒泡排序.桶排序和插入排序,本节重点介绍以上四种简单排序算法. 1.1 选择排序 基本思想: 每一趟从待排序…
一.java中的枚举类型: 在实际编程中,往往存在着这样的"数据集",它们的数值在程序中是稳定的,而且"数据集"中的元素是有限的.例如星期一到星期日七个数据元素组成了一周的"数据集",春夏秋冬四个数据元素组成了四季的"数据集".在java中如何更好的使用这些"数据集"呢?因此枚举便派上了用场,下面的一段代码来说明枚举类型的特点和用法: public class EnumTest { public stati…
循环冗余校验码 CRC码利用生成多项式为k个数据位产生r个校验位进行编码,其编码长度为n=k+r所以又称 (n,k)码. CRC码广泛应用于数据通信领域和磁介质存储系统中. CRC理论非常复杂,一般书就给个例题,讲讲方法.现在简单介绍下它的原理: 在k位信息码后接r位校验码,对于一个给定的(n,k)码.可以证明(数学高手自己琢磨证明过程)存在一个最高次幂为 n-k=r 的多项式g(x),根据g(x)可以生成k位信息的校验码,g(x)被称为 生成多项式 用C(x)=C(k-1)C(k-2)...C…
题目链接 http://hihocoder.com/contest/ntest2016spring1/problem/1 这个题目有几个算法考点: (1)对于一个LED数码管(由7个发光二极管封装在一起,对应的二极管编号见所给链接),给你一串整数,每个数字表示对应的二极管亮,其他二极管明暗未知,由该串数据求出该数码管能表示出什么数字. 思路:就是将1~7数字(表示对应的二极管亮)映射到数组(vector<int>),表示哪些数字是需要该二极管灯亮. map<int, vector<…
80x86指令系统 80x86指令系统,指令按功能可分为以下七个部分. (1) 数据传送指令. (2) 算术运算指令. (3) 逻辑运算指令. (4) 串操作指令. (5) 控制转移指令. (6) 处理器控制指令. (7) 保护方式指令. 3.3.1数据传送指令 数据传送指令包括:通用数据传送指令.地址传送指令.标志寄存器传送指令.符号扩展指令.扩展传送指令等. 一.通用数据传送指令 1传送指令 传送指令是使用最频繁的指令,格式:MOV DEST,SRC 功能:把一个字节,字或双字从源操作数S…
一.前言 从事自动化测试平台开发的编程实践中,遭遇了几个程序崩溃问题,解决它们颇费了不少心思,解决过程中的曲折和彻夜的辗转反侧却历历在目,一直寻思写点东西,为这段难忘的经历留点纪念,总结惨痛的教训带来的经验,以期通过自己的经历为他人和自己带来福祉:写出更高质量的程序: 由于 C 和 C++ 这两种语言血缘非常近,文本亦对 C 编程语言有借鉴作用: 二.C++ 崩溃分类 一切的偶然并非偶然 在编程实践中,遭遇到了诸如内存无效访问.无效对象.内存泄漏.堆栈溢出等很多C / C++ 程序员常见的问题,…
之前mark下来的一道题,今天填一下坑. 题意是这样子的.给你一棵边上有权的树.然后有树上两点(u,v)的路径有n*(n-1)条,路径(u,v)的权值是边权的xor. 然后下面有m个询问,询问你n*(n-1)条路径中的第k大是多少.(k<=200000) 首先树路径的xor是一个很经典的问题,首先求出所有点i到根路径的xor值val[i].然后我们就可以发现val[u]^val[v]就是u,v路径的xor值. 然后第二个很经典的地方就是最大xor.给你一个数组,要你求数组里面xor最大的一对数.…
A题:给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数. 1.在文件中至少存在这样一个数? 2.如果有足够的内存,如何处理? 3.如果内存不足,仅可以用文件来进行处理,如何处理? 答案: 1 int 为32位有(expt 2 32) 4294967296 42亿多个数,由于现在数只有40亿,所以必然有整数缺少了. 2.如果采用bitmap位数思想来存放,则32位整数最多需要占用43亿个位.约512MB的内存空间  (2`32/8=512MB) 可以采用前一章…
80x86指令系统 80x86指令系统,指令按功能可分为下面七个部分. (1) 数据传送指令. (2) 算术运算指令. (3) 逻辑运算指令. (4) 串操作指令. (5) 控制转移指令. (6) 处理器控制指令. (7) 保护方式指令. 3.3.1数据传送指令 数据传送指令包含:通用数据传送指令.地址传送指令.标志寄存器传送指令.符号扩展指令.扩展传送指令等. 一.通用数据传送指令 1传送指令 传送指令是使用最频繁的指令,格式:MOV DEST,SRC 功能:把一个字节,字或双字从源操作数S…
题目地址:pid=46">NYOJ 46 思路:能够化成二进制来求解.结果是最高位的位数-1+最高位后面1的个数.比如:对于3.它的二进制代码为11,就是用这个最高位(2-1)加上后面的1的个数(1个). 用最高位1的目的是他能代表了转化的次数,由于2+2=4,4+4=8 8+8=16........ #include <stdio.h> #include <math.h> #include <string.h> #include <stdlib.…
腾讯面试题:10G 个整数,乱序排列,要求找出中位数.内存限制为 2G. 题目和基本思路都来源网上,本人加以整理. 题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数.内存限制为 2G.只写出思路即可(内存限制为 2G的意思就是,可以使用2G的空间来运行程序,而不考虑这台机器上的其他软件的占用内存). 关于中位数:数据排序后,位置在最中间的数值.即将数据分 成两部分,一部分大于该数值,一部分小于该数值.中位数的位置:当样本数为奇数时,中位数=(N+1)/2 ; 当样本数为偶数时,中位…
我们知道日常生活中使用的数分为整数和实数,整数的小数点固定在数的最右边,可以省略不写,而实数的小数点则不固定.在计算机中只能识别和表示“0”和“1”,而无法识别小数点,因此要想使得计算机能够处理日常使用的数据,小数点的问题是不可避免的. 关于计算机系统中实数的表示,在下篇文章中会讲解.本篇博客我们讲解的是整数在计算机系统中如何表示. 在各种大学教材,各种网站论坛中,对于整数编码表示方法的正确打开姿势(姿势要帅)如下: 1.机器数 机器数(computer number)是数字在计算机中的二进制表…
我们知道 HashMap 是一种键值对形式的数据存储容器,但是它有一个缺点是,元素内部无序.由于它内部根据键的 hash 值取模表容量来得到元素的存储位置,所以整体上说 HashMap 是无序的一种容器.当然,jdk 中也为我们提供了基于红黑树的存储的 TreeMap 容器,它的内部元素是有序的,但是由于它内部通过红黑结点的各种变换来维持二叉搜索树的平衡,相对复杂,并且在并发环境下碍于 rebalance 操作,性能会受到一定的影响. 跳表(SkipList)是一种随机化的数据结构,通过"空间来…
心得: 这比赛真的是不要不要的,pending了一下午,也不知道对错,直接做过去就是了,也没有管太多! Problem A: 两只老虎 Description 来,我们先来放松下,听听儿歌,一起“唱”. 两只老虎两只老虎,跑得快跑得快. 一只没有耳朵,一只没有尾巴. 真奇怪,真奇怪. Tmk也觉得很奇怪,因为在他面前突然出现了一群这样的老虎,有的没耳朵,有的没尾巴,不过也有正常的. 现在Tmk告诉你这群老虎的耳朵个数,尾巴条数,以及老虎的腿的数目,问你有多少只是正常的. 其中只有三种老虎: 第一…
1 前言 (1)    什么是CRC校验? CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定.循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性. LFSR计算CRC,可以用多项式G(x)表示,G(x) = X16+X12+X5+1模型可如下图所示. (2)    校验原理 其根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的…
一.机器值和真值 1.机器值 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011.如果是 -3 ,就是 10000011 . 那么,这里的 00000011 和 10000011 就是机器数. 2.真值 因为第一位是符号位,所以机器数的形式值就不等于真正的数值.例如上面的有符号数 10000011,其最高位1代表负,其真正数值是 -3…