04 2020 档案
摘要:关于指令集问题,这里做一个深度的总结,之前总是被各种“指令集结构”、“指令集设计”等名词混淆,所以单独拿出来这一块细分一下; 指令集结构的分类: 总的来说,指令集结构的类别主要由一个因素决定:以何种存储单元存储操作数; 根据堆栈存储操作数、累加器存储操作书、通用寄存器存储操作数,可以分为三种指令集结
阅读全文
摘要:裸的弗洛伊德算法,题目中指定,再阐述一下思想; 弗洛伊德思想: 对于n个结点,如果该节点当其他任意两个结点i,j的中继,可以缩短i和j之间的距离,则进行更新; 采用三个循环更新,复杂度为O(n^3); #include<iostream> #include<vector> #include<stri
阅读全文
摘要:两种主流思想: 1.直接全部扫描棋盘,按四个方向逐个遍历,不仅麻烦而且很傻; 2.每落一个子,直接对该子进行四个方向判定,且判定的时可以一个方向左右加和; #include<iostream> #include<vector> #include<string> using namespace std
阅读全文
摘要:之前总结过,大数问题,取模就是取商取余数; #include<iostream> #include<stdlib.h> #include<string> using namespace std; string devide(int& r, string s, int n) { string ss =
阅读全文
摘要:模拟大致的分母相加减的问题; 利用最大公约数和最小公倍数可以解决; 对于不同分母,求最小公倍数; 加和化简之后,采用最大公约数进行分子分母同除计算; 最小公倍数和最大公约数相关的问题之前总结过; #include<iostream> #include<string> #include<vector>
阅读全文
摘要:老生常谈的问题,留商取余; #include<iostream> #include<string> using namespace std; int n; string charge(int n) { string s=""; while (n != 0) { int r = n % 8; s =
阅读全文
摘要:没啥难度,还是难以判断测试用例的问题,也就是k是否大于10,否则就会采用字符串进行判断; #include<iostream> #include<vector> #include<queue> #include<string> using namespace std; int n, k; struc
阅读全文
摘要:实际是匹配子串问题,使用STL中的string::find()和string::erase()即可,自己还动手写了一遍自己的; #include<iostream> #include<stdio.h> #include<string> using namespace std; string s; s
阅读全文
摘要:水题; #include<iostream> #include<vector> using namespace std; const int maxn = 100; int m, n, p; int m1[maxn][maxn], m2[maxn][maxn],m3[maxn][maxn]; int
阅读全文
摘要:统计每个字符子串得重复字符个数,直接利用数学问题输出坐标就可以; #include<iostream> #include<string> #include<vector> using namespace std; string s; int n; struct point { int index =
阅读全文
摘要:对一个非方阵矩阵转置; 注意转置后列变成行,行变成列; #include<iostream> #include<stdlib.h> using namespace std; const int maxn = 500; int a[maxn][maxn]; int m, n; int main() {
阅读全文
摘要:题目:一个文件中的一串数字,用逗号分割,位23.34,4242.42,343.......,要求读出并排序; 之前总结过,还是要多看看注意一下; https://www.cnblogs.com/songlinxuan/p/12370059.html 代码: #include<iostream> #i
阅读全文
摘要:问题:座位排序,对于7个人A,B,、、、G,输入7行,每一行比如 A B 6,G C -2这种表示A在B前面6排,G在C前面-2排(在C后面2排),求出这7个人从前到后顺序,最前面的是第一排,输出结果 目前没看出这个要用什么数据结构在做,个人觉得直接设定一个基准坐标,循环计算各个点的数轴位置即可;
阅读全文
摘要:基本思想: 典型的平面最短举例点对得问题,专题总结过; 关键点: 无; #include<iostream> #include<vector> #include<algorithm> using namespace std; struct point { double x; double y; };
阅读全文
摘要:最简单的思想是直接进行遍历,也就是n*(n-1)的复杂度; 如果采用分治的思想会简单很多; 看了好几篇Blog,发现都不怎么讲人话,其实本质上是通过一维分治推出来的; 对于一维情况下: 对于一维数轴下找最近两点,可以按照坐标点进行分治; 直接递归二分区域,使得细分为左右各有一个点或者两个点的区域;
阅读全文
摘要:坑挺多的,没有现成的测试用例,不知道包含不包含JS,或者特殊标签的问题; 所以一切按照规格HTML来进行; 例如百度的简单网页:https://mbd.baidu.com/newspage/data/landingsuper?context=%7B%22nid%22%3A%22news_935486
阅读全文
摘要:有些题目在定义函数的时候采用的是char指针或者字符串传参,自己习惯STL的string,不太熟悉。所以这里对C语言中的Char数组做个总结; 关于Char字符串的初步概述: 相当于Int数组,只不过是char类型的。 但是需要注意的是Char数组在定义的时候一定要注意,结尾的'\0'是占一个位置的
阅读全文
摘要:以前一直以为闰年366天,只要被4整除就是闰年,实际不然; 1.天数问题: 闰年:366天; 平年:365天; 简记:平年胸平,365天,比较小; 2.如何判断: 闰年:两种情况; 1)四百的整数倍; 2)4的倍数,但不是一百的倍数,典型的如2100年,是平年而不是闰年; 平年:剩下的就是平年; 简
阅读全文
摘要:基本思想: 第一次见到01背包中的最小值背包问题,即相同容量下装满所能有的最小值,如果没法装满,则dp[m]=MAX; 具体思想和最大值01背包思想有出入; 最大值背包思想是从0开始,并且从后向前更新; 而最小值背包思想dp[0]作为边界,剩下初始化为最大值,遍历更新方式和最大值背包问题方式相同;
阅读全文
摘要:基本思想: 总结过; 关键点: 无; #include<iostream> #include<vector> #include<algorithm> using namespace std; const int maxn = 10000; int c, n; int dp[maxn]; int w[
阅读全文
摘要:基本思想: 还是要注意索引问题; 关键点: 无; #include<iostream> #include<string> #include<algorithm> #include<vector> using namespace std; vector<vector<int>> dp; int mai
阅读全文
摘要:基本思想: 总结过,不赘述; 关键点: 无; #include<iostream> #include<string> #include<vector> #include<algorithm> using namespace std; const int maxn = 110; int dp[maxn
阅读全文
摘要:基本思想: 思想已经领悟,但是卡在了一个最后的寻找方法上,卡了1个用例; 最后寻找的应该是中间节点,而不是遍历,找后续的最长序列。否则会遇到这种问题: 1 2 3 3 2 1; 使用找中间节点则是3是中间节点,总和为5,序列为1,2,3,2,1; 而如果用自己最初的思想,则是总和为6,序列为1,2,
阅读全文
摘要:基本思想: 无; 关键点: 无; #include<iostream> #include<vector> #include<algorithm> using namespace std; const int maxn = 10100; int n; int d[maxn]; int dp[maxn]
阅读全文
摘要:基本思想: 打表、递归、dp都可以; 关键点: 无; #include<iostream> using namespace std; const int maxn = 25; int n; int dp[maxn]; int main() { while (cin >> n) { dp[1] = 1
阅读全文
摘要:基本思想: 隐藏下的最大连续数和的问题,不容易看出来,从矩阵的性质中才可能看出来。 自己最初是想用二维DP来标识0-x,0-y的矩阵,但是发现不能表示非0起点的最大矩阵和; 一些大佬的思想是通过多行合并来计算,例如1-3行合并,则是找3*n的最大子矩阵,可以通过一次最长连续和求解,这个第一次见; 关
阅读全文
摘要:基本思想: 无; 关键点: 无; #include<iostream> #include<algorithm> using namespace std; typedef long long ll; const int maxn = 1000100; ll dp[maxn]; ll d[maxn];
阅读全文
摘要:基本思想: 只需要缕清关系即可; 对于第i个楼梯,可以得知有两种情况: 1.i-1 和 i两部跨; 2.i一步跨; 所以有: dp[i]=dp[i-1]+dp[i-2]; dp初始化的时候直接初始化dp[0],dp[1]即可; 关键点:无; #include<iostream> #include<a
阅读全文
摘要:基本思想: 最长不下降子序列的改良版; 只需要更改状态转移方程即可,dp数组内存储的是最大子序列和; dp[i] = max(dp[i], dp[j] + num[j]) 状态转移方程如上所示,且j的取值范围为0~i-1; 关键点: 无; #include<iostream> #include<st
阅读全文