ACM-数学问题
文章平均质量分 63
Kang_TJU
Talk is cheap!
展开
-
大整数-综述-加法
大整数-加法-demo问题描述思路代码大整数-加法-demo 有一些整数的数值会非常巨大以至于我们不能使用任何内置数据类型来保存它的值。当然我们可以利用各种技巧回避直接对其保存,但是在有些问题中我们不得不直接保存并处理这些数值巨大的整数。那么我们该如何处理,这就是本文所要讨论的基本内容。问题描述 [ jobdu-1198 ]思路由于所要处理的数字大小超过了语言内置类型的范围,可以考虑模拟原创 2016-08-15 19:23:32 · 413 阅读 · 0 评论 -
leetcode-204-Count Primes
问题题目:[leetcode-204]思路素数筛法。 方法不难,但是搞了我很多时间。首先不用全局或者静态变量,在堆上开辟是一样的。 用vector就好。之前做acm的时候,用的全局初始化。 然后后面每次判断就很容易。但是,用c++写的时候,由于没用全局或者静态变量。 所以,在写的时候。我一直有个误区:单次觉得没有初始化的必要。 一直纠结在怎么样全局变量和静态变量上。其实,单次跑的时候,也有原创 2017-02-18 11:28:09 · 504 阅读 · 0 评论 -
素数筛法系列
本目主要整理素数筛法的若干技巧。思路 首先需要一个性质: 合数必有素因子 其次,围绕这个定理可以展开相关证明。那么,当再需要判断一个数是否是素数的时候,只需判断它能不能被这些素因子整除。若可以,则不为素数,即为合数。反之,则是素数。 当有了上面的思路之后,我们进步一步的换一个角度,既然所有合数都有素因子,那么当我们获得一个素数时,可以把它的倍数全部标记为原创 2017-02-17 18:42:46 · 459 阅读 · 0 评论 -
leetcode-415-Add Strings
问题题目:[leetcode-415]思路大整数加法实现。代码class Solution {public: string addStrings(string num1, string num2) { reverse(num1); reverse(num2); std::string ret; int sz1 = num1.si原创 2017-02-10 20:30:49 · 305 阅读 · 0 评论 -
leetcode-453-Minimum Moves to Equal Array Elements
问题题目:[leetcode-453]思路这个题想了半天没想出来。 看了别人的帖子才会的,先把参考的帖子贴出来[LeetCode453题解]这个题麻烦主要是麻烦在每次只能是给n-1个元素+1。当然,显然的是每次肯定是最小的n-1个+1。想的到的办法就是模拟。觉得不可取。看了帖子之后得到的思路是:每次移动的肯定是最小的n-1个元素。但是这其实是相当于,把最大的元素-1。这一点我没有想到。所以,“移原创 2017-01-20 19:47:58 · 388 阅读 · 0 评论 -
leetcode-447-Number of Boomerangs
问题题目:[leetcode-447]思路这个题就是拼体力,其实也是拼实力。只要有一线生机,也要去做。这个题我做的时候数次向放弃,因为觉得自己的方法不好。但是无论如何还是坚持下来了,其实思路也很朴素。坚持就行。代码class Solution {public: int numberOfBoomerangs(vector<pair<int, int>>& points) {原创 2017-02-11 20:47:04 · 436 阅读 · 0 评论 -
leetcode-326-Power of Three
问题题目:[leetcode-326]思路想法很简单,只要能一直被3整除即可。最后,数字一定是1。反之,则不是3的次数幂。代码class Solution {public: bool isPowerOfThree(int n) { if(n<1) return false; while(n%3==0){ n /= 3;原创 2017-02-20 17:30:02 · 370 阅读 · 0 评论 -
leetcode-342-Power of Four
问题题目:[leetcode-342]思路换底公式即可。代码class Solution {public: bool isPowerOfFour(int num) { double tmp = log10(num)/log10(4); return tmp == (int)tmp; }};原创 2017-03-19 12:50:50 · 660 阅读 · 0 评论 -
leetcode-50-Pow(x, n)
问题题目:[leetcode-50]思路这个题目比我在牛客刷的要更好。 主要是多了一种情形是对于,INT_MIN的考虑。 如果把它转化为整数次方是0。 因为他的二进制形式是:[10000000000000000000000000000000] 所以,要增加对它的处理。代码class Solution {public: double myPow(double x, int n) {原创 2017-03-13 22:43:15 · 685 阅读 · 0 评论 -
leetcode-22-Generate Parentheses
问题题目:[Generate Parentheses]思路卡特兰数的思路。 任意时刻左括号的数量要多于右括号。 我的思路也很简单,那就是每一位挨个试探就好了。 搜索的思路。至于参数传递,我没有选择引用。而是值传递,这一块我不是很熟。 传递引用后面要将变化改回来。代码class Solution {public: vector<string> generateParenthesis(原创 2017-03-10 23:10:48 · 477 阅读 · 0 评论 -
leetcode-236-Ugly Number
问题题目:[leetcode-236]思路素数筛法的思路。但是第一遍TLE。 仔细想了下,这个两边循环的代码时间是没有问题的,因为之前的帖子也学习了。不是完全的O(N2)O(N^{2})的复杂度。所以,考虑整数的最大值2147483647。500002>INTMAX50000^{2} > INTMAX。 所以,我猜测可能是辅助空间开大了。因为之前看的和num一样大,那么当num给INT_MAX的原创 2017-02-19 11:57:56 · 393 阅读 · 0 评论 -
leetcode-229- Majority Element II
问题题目:[leetcode-229]思路参考[Major Element] 都是采用moore’s voting algorithm,只不过第一个问题是一定存在。但是本题不存在,投票完了之后需要验证。写代码需要注意一点:避免m和n重复的情形。 还有循环判断的顺序不能变!!!代码class Solution {public: vector<int> majorityElement(ve原创 2017-01-18 15:38:51 · 306 阅读 · 0 评论 -
leetcode-60-Permutation Sequence
问题题目:[leetcode-60]思路当然,用之前枚举的方法可以。不过,不出所料,TLE。毕竟当 k = n时, T(n) = n! = O(n!)只能用另外的思路:这个问题牵扯到另外一个具体的问题。[全排列的编码与解码]可以参考这个链接,讲的比较清楚。我下文的内容也完全参照这个链接,只不过我再自己梳理一遍,两个例题即可。 本质还是利用了阶乘的公式:Fact( n ) = n * Fact( n原创 2016-12-26 15:12:38 · 297 阅读 · 0 评论 -
leetcode-456-Convert a Number to Hexadecimal
问题题目:[leetcode-456]思路这个题主要涉及的是计算机中信息表示的方法。对于一个数字,在计算机中怎么表示的方法。对于有符号数,一般用(two’s complement)实现。当然,我们在解决这个题目的时候,并不按照之之前最基本的那一套去求解。而是充分考虑信息在计算机中的表示。我们知道有一个结论是:对于用补码表示的任何一个数,一定存在一个无符号数与它的表示一致。当然,这也很容易理解,对于同原创 2017-01-02 20:30:45 · 433 阅读 · 0 评论 -
大整数-减法
问题描述 本文主要给出大数减法的一般思路。关于大数的一般性阐述可以参看大整数-加法-demo这篇博客。思路基本来说,还是大整数的那套思路。 要进行处理的数字,超过了计算机语言所能提供类型的最大范围。只能自己写数组存储每一位数字。由于不是内置类型,所以没有相应操作的支持。只能自己写,人工模拟减法操作。加法主要是:从低位到高位,逐位相加,超过10的部分要”进位”减法主要是:从低位到高位,逐位原创 2016-08-16 20:12:50 · 3815 阅读 · 0 评论 -
大整数-乘法(一)
问题描述 本文主要给出大数乘法的一般思路。说明大数乘法的两种思路,并且结合两道题目给出对于大数和常规整数乘法代码优化的必要性。思路基本来说,还是大整数的那套思路。 要进行处理的数字,超过了计算机语言所能提供类型的最大范围。只能自己写数组存储每一位数字。由于不是内置类型,所以没有相应操作的支持。只能自己写,人工模拟减法操作。但是对于大数乘法这一块,自己在看了点网上的资料之后,以为自己明白了大数原创 2016-08-17 19:49:49 · 669 阅读 · 0 评论 -
Fibonacci数列基础
问题描述 主要讲一下fibonacci数列的基础。思路斐波那契数列(Fibonacci sequence),又称黄金分割数列。指的是这样的一个数列0、1、1、2、3、5、8、13、21、34……。这个数列从第三项开始,每一项都是前两项的和。其递归公式如下: F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)显然,这是一个线性递推数列。可以用递推或者递归的原创 2016-08-19 19:52:30 · 477 阅读 · 0 评论 -
快速幂-demo
问题描述 本文主要给出快速幂以及快速幂结合求模操作的一般方法思路当幂的数字太大时,计算的次数较大。 需要简化计算,可以采用快速幂。 二分幂的办法。下面这是一种思路: 当b较大时,将其进行分解。1. b为偶数时,a^b = a^(b/2) * a^(b/2)2. b为奇数时,a^b = a^(b/2) * a^(b/2) * a可用递归实现。 如果用非递归可在递归的基础上进行修改。但原创 2016-08-28 20:59:16 · 584 阅读 · 0 评论 -
快速幂 jobdu-1447
问题看下面的问题: [ jobdu-1442] 题目描述: Xinlv wrote some sequences on the paper a long time ago, they might be arithmetic or geometric sequences. The numbers are not very clear now, and only the first three原创 2016-08-31 00:04:04 · 343 阅读 · 0 评论 -
nod51-1242斐波那契数列-矩阵快速幂
本文主要讲斐波那契数列结合矩阵快速幂求解的办法。问题先看下面的问题: [ nod51-1242] 题目描述: 斐波那契数列的定义如下: F(0) = 0 F(1) = 1 F(n) = F(n - 1) + F(n - 2) (n >= 2) (1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, …) 给原创 2016-09-11 22:25:07 · 409 阅读 · 0 评论 -
poj3070斐波那契数列求解
问题先看下面的问题: [ poj-3070] Description: In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2. For example, the first ten terms of the Fibonacci sequence are: 0, 1,原创 2016-09-11 22:41:37 · 1590 阅读 · 0 评论 -
jobdu1443矩阵快速幂
本文主要根据之前讲过的二分求幂,通过一道题目引入矩阵快速求幂的方法。问题先看下面的问题: [ jobdu-1443] 题目描述: 题目描述: A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973。 输入: 数据的第一行是一个T,表示有T组数据。 每组数据的第一行有n(2 <= n <= 10)和k(2 <= k < 10^9原创 2016-09-08 09:32:18 · 324 阅读 · 0 评论 -
错排公式-计数
问题题目:[不容易系列之一]思路本质是计数的题目。拿到也是没有直接的思路。考虑DP的思路进行分析。分析第i个状态和之前状态的关系。不妨先直观的理解:假如现在N-1个数错排,那么加入第N个数之后,将第i(1<=i<=N-1)个数字放到第N个位置上,然后把第N个数放到第i个位置上,则前N个数字依然保持错排的特性。这是一种情形,一共有(N-1)*F(N-1)种。其中F(N-1)表示前N-1个数错排的个数。原创 2016-11-23 15:15:07 · 606 阅读 · 0 评论 -
N阶楼梯-计数
问题题目:[N阶楼梯]思路本质应该是计数的方法。但是具体分析的时候,比较像DP。分析第N个状态,然后判断其与之前状态的关系。 显然,想要到达第N个状态,有两种办法。N-1阶时,走一步。N-2阶时,走两步。 完成一件事的N个步骤是乘法关系,多种方法是加法关系。设F[i]表示第i层楼梯的方法,所以有: F[N]=F[N−1]∗1+F[N−2]∗1(1)F[N] = F[N-1]*1 + F[N原创 2016-11-23 14:36:54 · 479 阅读 · 0 评论 -
lintcode-不同的二叉查找树
问题题目:[不同的二叉查找树]思路这个题还是不错的,从找规律入手。本质是分治法,发现重复子问题。然后DP优化。整体的思路还是很清晰的。 主要参考了这篇链接[n个不同节点构成多少不同的二叉搜索树],讲的很清楚。 当N=1时,毫无疑问,只有一种形态。不放记f(1)为N个节点时的二叉树形态。 当N=2时,固定一个根节点,那么剩下的一个节点,要么在左枝,此时右枝为空;要么在右枝,此时左枝为空。所以f(原创 2017-04-10 14:53:51 · 371 阅读 · 0 评论