- 博客(25)
- 收藏
- 关注
原创 指针与引用,内存管理
实际上也是占用的,内存中存储的是其指向变量的内存地址,只不过访问这块内存时编译器将直接转而访问其指向的内存。因此在程序中无法读取到这块内存本身。
2024-03-09 21:06:43 408 1
原创 复旦计院2014机试真题及答案详解
A二分查找大家一定都能熟练掌握二分查找啦!那么来计算二分的次数吧!约定二分的中点mid = (left + right) / 2。输入:第一行输入一个整数N(N<=10000)。第二行输入N个升序整数。第三行输入一个待查找的整数(必定在第二行中出现过)。输出:输出二分查找该整数时,进行过多少次二分。输入样例518 53 54 74 99 53输出样例2#include<iostream>#include<set>.
2022-03-20 12:42:29 177
原创 复旦计院2015机试真题及答案详解
A长方形中的正方形给出长方形的长和宽,每次从长方形里撕去最大的正方形,输出最后能得到多少正方形?#include<iostream>using namespace std;int main(){ int chang,kuan; cin >> chang >> kuan; int count; while(chang != kuan){ if(chang > kuan) chang = chang - .
2022-03-19 12:45:32 123
原创 复旦计院2016机试真题及答案详解
A最大长度子序列给定两个长度分别为NN和MM的字符串AA和BB,求既是AA的子序列又是BB的子序列的字符串长度最长是多少。输入格式第一行包含两个整数NN和MM。第二行包含一个长度为NN的字符串,表示字符串AA。第三行包含一个长度为MM的字符串,表示字符串BB。字符串均由小写字母构成。输出格式输出一个整数,表示最大长度。数据范围1≤N,M≤10001≤N,M≤1000输入样例:4 5acbdabedc输出样例...
2022-03-19 11:11:14 978
原创 C语言中堆与栈的区别
栈是由编译器在需要时分配的,不需要时自动清除的变量存储区。里面的变量通常是局部变量、函数参数等。堆是由malloc()函数(C++语言为new运算符)分配的内存块,内存释放由程序员手动控制,在C语言为free函数完成(C++中为delete)。栈和堆的主要区别有以下几点:(1)管理方式不同。栈编译器自动管理,无需程序员手工控制;而堆空间的申请释放工作由程序员控制,容易产生内存泄漏。(2)空间大小不同。栈是向低地址扩展的数据结构,是一块连续的内存区域。这句话的意思是栈顶的地址和栈的最大容量是系
2022-03-18 10:18:36 5190
原创 C++ 方便地将数字字符串转换成对应整数
做题目时经常遇到输入字符串,我们需要将其变换为对应整数。如将“20”变为int类型的20。其实并不需要for循环来做,只需要调用一个函数。atoi()1 功能atoi()函数将数字格式的字符串转换为整数类型。例如,将字符串“12345”转换成数字12345。2 格式该函数的格式为int atoi(const char* str)其中,参数str是要转换的字符串,返回值是转换后的整数。3 注意事项1、在“2 格式”中提到,atoi()函数的参数是要转换的字符串。
2022-03-16 14:05:47 5761
原创 复旦计院2017机试真题及答案详解
A中位数给定一个整数序列,求中位数。#include<iostream>#include<cstring>#include<algorithm>using namespace std;int main(){ int n; cin >> n; double d[n + 1]; for(int i = 1;i <= n;i++) cin >> d[i]; sort(d + 1.
2022-03-16 12:07:26 123
原创 Ubantu 更新setuptools和pip时报错Command “python setup.py egg_info“ failed with error code 1 in /
在安装一个包时报了上述错误,网上的解决方案都是更新setuptools和pip。pip install --upgrade setuptoolspython -m pip install --upgrade pip但是我在更新setuptools和pip的时候也报同样的错。解决方案:重新安装pipwget https://bootstrap.pypa.io/get-pip.pypython get-pip.py...
2022-03-15 21:34:42 1028
原创 复旦计院、工研院2018机试真题及答案详解
A 求众数众数就是一个序列中出现次数最多的数字。 如果不唯一,则输出小的那个值。 给定第一个代表有几个数字。1<=n<=10^5 每个数字在 int 范围内样例: 输入,(第一个代表有几个数字)810 3 8 8 3 2 2 2输出 2#include<iostream>#include<cstring>#include<map>using namespace std;map<int,int> a;i...
2022-03-14 10:04:52 539
原创 复旦计院、工研院2019机试真题及答案详解
A相隔天数输入一个 yyyymmdd 格式的时间,如 20190318,计算与 20190205 相差的天数,取绝对值,所有输入在 19000101 和 21000101 之间。样例输入:20190208输出:3#include<iostream>using namespace std;int month_day[13][2] {{0,0},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},{31,31.
2022-03-11 15:47:52 8795
原创 C++中如何定义下标为负数的二维数组
DP问题中数组下标通常都是有一定的意义的,但是在C++中如果我们需要用到f[-5][7](随便举的例子)这个数组值时,普通的数组定义是无法实现的。我们可以用vector<map<int,int>>这种方法实现下标为任意数字的二维数组。下面我们以一道DP问题来看看具体是怎么实现的。此题网上有许多种解法。这里使用最朴素的做法。状态定义:dp[i][j]表示前i个数中总和为j的方案的总数。状态划分:dp[i][j]中所有的方案可分为两部分,一部分为第i个数取正,则此
2022-03-10 13:47:04 2149
原创 复旦计院2020机试真题
直接暴力求解即可#include<iostream>using namespace std;const int N = 1010;int a[5],sum;bool flag;int main(){ int T; cin >> T; while(T--){ for(int i = 0;i < 5;i++) cin >> a[i]; flag = false; ..
2022-03-09 15:09:42 7415
原创 DP问题——滑雪(记忆化搜索典型例题)
给定一个RR行CC列的矩阵,表示一个矩形网格滑雪场。矩阵中第ii行第jj列的点表示滑雪场的第ii行第jj列区域的高度。一个人从滑雪场中的某个区域内出发,每次可以向上下左右任意一个方向滑动一个单位距离。当然,一个人能够滑动到某相邻区域的前提是该区域的高度低于自己目前所在区域的高度。下面给出一个矩阵作为例子: 1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9在给定矩阵...
2022-03-08 18:35:38 436
原创 DP问题——没有上司的舞会(树形DP典型例题)
状态表示:f[i][1/0]表示以i为根节点的树包含/不包含根节点时的最大快乐值状态划分:以是否包含根节点为标准划分包含根节点时 则一定不含根节点的子节点 。即f[i][1] = v[i] + f[子节点][0](v[i]表示节点i的快乐值)不包含根节点时 则根节点的子节点不一定包含。即f[i][0] = 算出所有情况后,取max(f[root][0],f[root][1])#include<iostream>#include<cstring>#in..
2022-03-08 18:00:34 181
原创 DP问题——整数划分(背包问题变形)
1、可看成完全背包问题。有n个物品,体积分别为1-n。背包体积为n。问共有多少种装法。状态表示:f[i][j]为前i个物品中装入体积为j的背包中的装法数量。状态划分:与完全背包问题相同#include<iostream>using namespace std;const int N =1010,mod = 1e9 + 7;int n,f[N][N];int main(){ cin >> n; for(int i = 0;i <= n..
2022-03-08 13:26:46 383
原创 DP问题——石子合并
状态定义:f[i][j]表示第i堆到第j堆合并的最小代价状态划分:按照最后一次是哪两堆合并划分。左边1堆,右边j-i堆;左边2堆,右边j-i - 1堆……左边j -i堆,右边1堆。不妨设左边为i到k堆,右边为k+1到j堆。故i到k堆合并所需代价为f[i][k],k+1到j堆合并所需代价为f[k+1][j]。最后一次合并为左边i到k堆合成的一堆与右边k+1到j堆合成的一堆合并,所需代价为a[i]+a[i+1]+...+a[j]。此式可用前缀和计算。即s[j] - s[i -1]。综上。f[i...
2022-03-08 12:23:49 165
原创 DP问题——最长公共子序列
状态定义:f[i][j]表示a串前i个字符与b串前j个字符中的最长公共子序列(记为c)。状态划分:分为四种情况1、c中含a[i]与b[j]2、c中含a[i],不含b[j]3、c中含b[j],不含a[i]4、c中不含a[i],b[j]四种情况可包含f[i][j]中所有可能情况情况1时a[i]、b[j]一定相等。f[i][j] = f[i - 1][j - 1] + 1;情况4时 f[i][j] = f[i - 1][j - 1]本题难点在于情况2、3,情况2包含于f[i..
2022-03-07 20:20:41 273
原创 DP问题——最长上升子序列
f含义为以第i个数结尾的最长上升子序列是多少。状态划分为前一个数是1~i-1中的一个。取其中最大值。#include<iostream>using namespace std;const int N = 1010; //const N变为常量int f[N],a[N]; int main(){ int n; cin >> n; for(int i = 1;i <= n;i++) {f[i] = 1;cin >> a[i..
2022-03-07 15:35:40 168
原创 DP问题——数字三角形
f[i][j]矩阵表示以a[i[j]为终点的路径和最大值。状态划分方法为前一步是该节点的左上方节点还是右上方节点。#include<iostream>#include<cstring>using namespace std;const int N = 510,INF = 1e9;int a[N][N],n,m,f[N][N];int main(){ cin >> n; for(int i = 1;i <= n;i++) ..
2022-03-07 12:00:43 109
原创 DP背包问题
1、01背包问题朴素做法#include<iostream>using namespace std;int n,V;const int N = 1010;int f[N][N],v[N],w[N];int main(){ cin >> n >> V; for(int i = 1;i <= n;i++) { cin >> v[i] >> w[i]; } .
2022-03-07 11:16:00 289
原创 复旦2021机试
#include<iostream> //9.10using namespace std;const int N = 100;int a[N],cnt = 0;void dfs(int x,int l){ int t = x/ 2; bool flag = true; while(t > 0) { if(a[t] > a[x]){ flag = false; brea...
2022-03-06 09:55:00 206
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人