
算法
harkbox
时间不等人
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
hash学习PatB1005 继续(3n+1)猜想
1005 继续(3n+1)猜想 (25 分)卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对 n=3 进行验证的时候,我们需要计算 3、5、8、4、2、1,则当我们对 n=5、8、4、2 进行验证的时候,就可以直接判定卡拉兹猜想的真伪,而不需要重复计算,因为这 4 个数已经在验证3的时候遇到过了,我们称 5、8、4、2 是被 3“覆盖”的数。我们称一个数列中的某个数 n 为“关原创 2022-03-26 11:24:32 · 150 阅读 · 0 评论 -
hash学习Pat1047编程团体赛
注意:1.使用sscanf将字符串转为数字,会存在一个测试点过不去2.直接使用sscanf控制格式来获得数字#include <iostream>#include<string>#include<stdlib.h>#include<stdio.h>#include<string.h>//1047 编程团体赛/*思路: 1.直接利用hash【1001】和即可并用max保存最大的队伍号由于格式一样,当作字符串来输入一行,根据s原创 2022-03-26 10:28:38 · 453 阅读 · 0 评论 -
hash1043 输出PATest
#include <iostream>#include<string>#include<stdlib.h>#include<stdio.h>#include<string>//1043 输出PATest/*直接hash统计人数即可 思路:1.利用数组按照顺序保存其本来的ascii码的位置 统计这六种字符数目2.按照顺序输出,并减一,若减为0则跳过 */using namespace std;int main() {原创 2022-03-26 09:48:43 · 190 阅读 · 0 评论 -
PAT1033旧键盘打字 测试点分析
1033 旧键盘打字 (20 分)旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样?输入格式:输入在 2 行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过 105个字符的串。可用的字符包括字母 [a-z, A-Z]、数字 0-9、以及下划线 _(代表空格)、,、.、-、+(代表上档键)。题目保证第 2 行输入的文字串非空。注意:如果上档键坏掉了,那么大...原创 2022-03-25 10:34:45 · 378 阅读 · 0 评论 -
多项式的一种特殊解法
#include<iostream>#include<vector>#include<ctime>#include<cmath>using namespace std;//多项式解法 y= 1+2*x+3*x^2+......void main(){ clock_t start = clock(); //提出x的解法 int ...原创 2019-12-09 20:00:50 · 377 阅读 · 0 评论 -
猴子选大王扩展
1.数组方法代码如下#include<iostream>#include<vector>using namespace std;/*约瑟夫问题的数组解法例如数组模拟环形链表,需要一个实时确定正确下标来做判断的值,需要一个确定位置的值*/void main(){ int a[1000] = { 0 }; int n; cin >>...原创 2019-12-03 11:53:23 · 144 阅读 · 0 评论 -
同余问题习题总结
1.学号问题对于这道题而言,重要的是如何比较余数的问题,我们可以利用桶排法来进行解题。代码如下#include<iostream>#include<vector>using namespace std;/*找到一个最小的数m,使得当前的数对m都不同余我们可以利用桶排法的思想,如果那个余数存在那么就为1,本来为0,如果下次继续碰到那么可以直接退出...原创 2019-11-12 18:05:20 · 501 阅读 · 0 评论 -
用扩展欧几里德算法解不定方程
对于形如ax+by=c的方程称为不定方程那么我们可以利用扩展欧几里德算法求出该方程的整数解我们可以类比对于这个方程而言,我们可以先找到一个特解,然后让c等于0找出通解,那么我们就可以确定这个方程的解系了那么我们首先要知道,我们利用扩展欧几里德算法解出的解是方程c为gcd(a,b)时的解,那么我们要确保c可以整除gcd(a,b),这样才存在解。那么我们另a1=a/gcd(a,...原创 2019-11-12 17:27:32 · 433 阅读 · 0 评论 -
递归分治问题刷题
1.汉洛塔问题这个问题可以从只有一个盘子进行逆推,可以写成递归代码代码如下#include<iostream>#include<vector>using namespace std;/*汉罗塔问题 ,可以从一开始推测*/void printf(int n, char a, char b){ cout << n << "=...原创 2019-11-10 12:39:16 · 152 阅读 · 0 评论 -
快速幂
对于计算a^b%m这个式子,常规方法是a乘以b-1个a,但我们可以使用快速幂进行求解。对于2^5可以写作2*2^4;而对于2^6我们可以写作2^3*2^3那么我们可以看到对于这个问题而已这是一个递归方法,代码如下#include<iostream>#include<vector>using namespace std;/*使用递归与迭代的不同方...原创 2019-10-28 19:07:49 · 97 阅读 · 0 评论 -
数论 梅森素数
梅森素数定义:if m是一个正整数 and 2^m-1是一个素数 then m是素数 if m是一个正整数 and m是一个素数 then M(m)=2^m-1被称为第m个梅森数 if p是一个素数 and M(p)是一个素数 then M(p)被称为梅森素数Lucas-Lehmer判定法:判定一个梅森数是否是梅森素数设p是素数,第p个梅森数为M(p)为2^p-1,r1 = 4,...原创 2019-10-27 13:27:14 · 598 阅读 · 0 评论 -
数论 组合素数
组合素数 - nefu119题意:求解C(2n,n)恰好被p整除多少次由组合数公式可以将其转化为:(2 * n)!/(n! * n!)则将题目转化为求解分子关于q的幂,减去分子关于q的幂用公式n!的素因子分解中素数p的幂为[n/p]+[n/p^2]+[n/p^3]...0 (p^t <= n) 我们首先计算的是2*n可以被P整除的个数,但是包含了(n!*n!)的个数,及...原创 2019-10-27 10:04:42 · 433 阅读 · 0 评论 -
数论算法总结-素数
1.如果给定一个数n,要你计算小于n的素数的个数,如果n足够大,那么素数的个数等价于x/ln(x);代码如下:#include<iostream>#include<vector>#include<math.h>using namespace std;/*这是判断素数个数的位数*/void pr(int n){ int k = 1;...原创 2019-10-26 17:45:28 · 301 阅读 · 0 评论 -
1244:和为给定数
时间限制: 1000 ms 内存限制: 65536 KB提交数: 4550 通过数: 1576【题目描述】给出若干个整数,询问其中是否有一对数的和等于给定的数。【输入】第一行是整数n(0 < n ≤ 100,000),表示有n个整数。第二行是n个整数。整数的范围是在0到108之间。第三行是一个整数m(0≤m≤230),表示需要得...原创 2019-10-22 18:22:33 · 820 阅读 · 0 评论 -
1243月度开销
【题目描述】农夫约翰是一个精明的会计师。他意识到自己可能没有足够的钱来维持农场的运转了。他计算出并记录下了接下来 N (1 ≤ N ≤ 100,000) 天里每天需要的开销。约翰打算为连续的M (1 ≤ M ≤ N) 个财政周期创建预算案,他把一个财政周期命名为fajo月。每个fajo月包含一天或连续的多天,每天被恰好包含在一个fajo月里。约翰的目标是合理安排每个fajo月包含的天数...原创 2019-10-22 17:36:38 · 790 阅读 · 0 评论 -
五指山(nefu 84)
西游记中孙吾空大闹天宫,如来佛祖前来降伏他,说道:“我与你打个赌赛;你若有本事,一筋斗打出我这右手掌中,算你赢,再不用动刀兵苦争战,就请玉帝到西方居住,把天宫让你;若不能打出手掌,你还下界为妖,再修几劫,却来争吵。”那大圣闻言,暗笑道:“这如来十分好呆!我老孙一筋斗去十万八千里。他那手掌,方圆不满一尺,如何跳不出去?”急发声道:“既如此说,你可做得主张?”佛祖道:“做得!做得!”伸开右手,却似个...原创 2019-10-19 16:23:11 · 304 阅读 · 0 评论 -
第二周算法总结(分治问题 最大子数组)
1.最大子数组问题不在描述,按照算法导论所提供的分治思想 对于一个数组,要想存在最大子数组,必须存在负数,这样问题才存在意义。利用分治思想,将一个数组分成两部分,最大子数组肯定存在于这两个子数组之一或者是一个跨过中点的数组。代码如下#include<iostream>#include<vector>using namespace std;i...原创 2019-10-19 15:32:14 · 233 阅读 · 0 评论 -
青蛙的约会问题
解题如下:/;代码如下:#include<iostream>#include<vector>using namespace std;int exced(int m, int n, int &x, int &y){ if (n == 0) { x = 1; y = 0; return m; } int r = e...原创 2019-10-14 18:41:30 · 429 阅读 · 0 评论 -
第一周算法总结(归并排序 插入排序)
1.插入排序原理与玩扑克牌的插牌方式相同,不在多说。代码如下:oid pr(vector<int>&a){ for (int j = 1; j <= a.size() - 1; j++) { int i = j - 1; int key = a[j]; while (i >= 0 && a[i] >= key)...原创 2019-10-13 14:54:56 · 159 阅读 · 0 评论 -
欧几里德算法及其扩展
1欧几里得算法欧几里德算法又被称为辗转相除法。我们可以进行数学证明证明如下:代码实现如下:递归代码int pr(int a, int b){ if (b == 0) { return a; } else { return pr(b, a%b); }}非递归实现int pr(int a, int b){ int r = a%b;...原创 2019-10-12 20:35:25 · 205 阅读 · 0 评论