- 博客(222)
- 资源 (1)
- 收藏
- 关注
原创 切换lab
贮藏修改:如果您暂时不想提交这些修改,但又不想丢失它们,可以使用贮藏命令将其保存起来。在切换分支之前,您需要提交或贮藏这些修改。命令后,Git会将您的本地修改贮藏起来,并将工作目录和索引状态还原到贮藏之前的状态。完成上述步骤后,您的贮藏的修改将被恢复到工作目录中,您可以继续进行其他操作。这将应用最近的一次贮藏,将修改重新应用到您的工作目录和索引中。请注意,根据您的情况,您可能还需要处理。如果您希望在应用贮藏后将其从贮藏列表中删除,可以使用。查看贮藏列表,并选择特定的贮藏进行应用。恢复贮藏的修改可以使用。
2023-06-01 21:07:14 669
原创 配置MIT6.S081环境
注意必须使用ubuntu20.04版本,因为后面安装RISC-V交叉编译工具时,某个文件只有ubuntu20.04才有镜像源。如果第一次使用则需要在终端添加(具体的不记得了,在主目录和xv6目录下都添加下面代码则没错)在xv6目录下打开两个窗口后,用vim打开对应的文件,则可以进行调试。需要开启两个窗口,都是在xv6源码目录下。为了便于调试,则安装vim并配置vim。在主目录下安装qemu。
2023-05-27 17:41:15 1382
原创 快捷方式1
Version=1.0Type=ApplicationName=GolandExec=/home/<用户名>/GoLand/bin/goland.shIcon=/home/<用户名>/GoLand/bin/goland.svgTerminal=falseStartupNotify=trueCategories=Development;
2023-05-14 22:30:54 250
原创 二、线性表_顺序存储(动态)
各种操作动态分配空间初始化在 i 插入 e O(n)增加动态数组的长度获取i位置的值查询e所处的位置完整程序动态分配空间#define InitSize 100typedef struct{ int *date; int MaxSize,length;}SqList; 初始化void InitList(SqList &L){ //L.date(int *)malloc(sizeof(int)*InitSize); 分配空间 L.date=new int[InitSize];
2022-02-11 18:31:41 210
原创 二、线性表_顺序存储(静态)
各种操作静态分配空间初始化在 i 插入 e O(n)删除 i 节点获取i位置的值查询e所处的位置完整程序静态分配空间#define MaxSize 50typedef struct{ int date[Maxize]; int length;}SqList;初始化void InitList(SqList &L){ for(int i=0;i<MaxSize;i++) L.date[i]=0; L.length=0;}在 i 插入 e O(n)i节点及后面节
2022-02-11 18:23:06 170
原创 离散化(模板)
所谓离散化是指,原本一个很大的数据范围,映射后在一个很小的区间802. 区间和思路1.首先将所有数的下标存在一个数组 alls 中2.把需要查询区间范围也存入 alls ,然后去重排序3.根据插入的数据,把该值映射进一个数组4.利用前缀和,求区间的范围简言之,就是把所有需要用到的数组下标存起来,把下标和值映射进一个数组。相比于传统写法就节省了很多空间源码#include<bits/stdc++.h>using namespace std;typedef pair.
2022-01-12 18:21:42 285
原创 区间合并(模板)
所谓区间合并就是把有交集的区间范围合并成一个区间803. 区间合并思路:由这个题来介绍一下区间合并的具体实现首先看题目,题目的意思求合并之后,有几个不相交的区间1.所以可以将区间按左区间从小到大排序2.合并:第二个区间的起点在第一个区间的范围里,则更新区间的右端点(取两个区间的最大值)源码#include<bits/stdc++.h>using namespace std;const int N=100010;typedef pair<int,int>.
2022-01-12 17:30:38 333
原创 蓝桥杯STL
c++基础 c=max(a,b); c=min(a,b); //交换变量值 swap(a,b) //绝对值 m=abs(m); //查找 lower_bound(first,last,value);//查找有序数组第一个小于等于value的值 upper_bound(first,last,value);//查找有序数组第一个大于等于value的值 //引用 取别名就是小名 int a=10; int &b=a; //对b的操作也就是对a的操作,a,
2022-01-04 19:50:35 988
原创 数论(模板)-质数
1.判断质数//(1)试除法 int is_prime(int n){ if(n<2) return 0; for(int i=2;i<n;i++) if(n%i==0) return 0; return 1;}//降低复杂度/*d|n (n/d)|nd<=(n/d)d^2<=nd<=sqrt(n)*/ int is_prime(int n){ if(n<2) return 0; for(int i=2;i<=n/i;i+
2021-12-24 15:40:11 342
原创 数论-约数模板
求约数vector<int> get_divisors(int n){ vector<int> res; for(int i=1;i<=n/i;i++){ if(n%i==0){ res.push_back(i); if(i!=n/i) res.push_back(n/i); } } sort(res.begin(),res.end()); return res;} .2.约数个数//(a1+1)*(a2+1) 表示可以取0-d1个数
2021-12-23 18:46:14 747
原创 一维前缀和模板
题目链接:795. 前缀和核心计算公式 s[i]-s[j-1] 计算j-i 的区间和源码#include<bits/stdc++.h>using namespace std;const int N=1e6+10;int n,m;int a[N],s[N];int main(){ cin>>n>>m; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=.
2021-07-14 13:15:48 186
原创 位运算模板
原题链接:801. 二进制中1的个数思路x: 101000010~x: 010111101~x+1: 010111110x&(-x): 000000010由上可知:lowbit(x)的作用为取出最低位的1 之后只需要减去最低位继续计算即可源码#include<bits/stdc++.h>using namespace std;int lowbit(int x){ //求最低位1的位置 即可以统计1的个数 return (x.
2021-07-14 13:10:42 148
原创 800. 数组元素的目标和
原题链接:800. 数组元素的目标和思路运用双指针i,j分别标记a数组首位和b数组末位依次遍历判断是否存在相等的情况源码#include<bits/stdc++.h>using namespace std;int n,m,x;const int N=100010;int a[N],b[N];int main(){ cin>>n>>m>>x; for(int i=0;i<n;i++) cin>>a[.
2021-07-14 13:08:13 92
原创 双指针模板
原题链接:最长连续不重复子序列思路:运用双指针: i,j首先将数存入一个数组a[]中然后依次遍历:i++(不出现重复的数时) 当出现重复数时 j指针前移求最长区间,只需要:求[i,j]区间的长度源码#include<bits/stdc++.h>using namespace std;const int N=100010;int a[N],q[N]; int n; int main(){ cin>>n; for(int i=0;i&.
2021-07-14 12:58:36 186
原创 Mysql使用过程
启动Mysql服务器1.以管理员身份运行cmd2.找到安装MySQL下的bin文件路径例:cd D:\my sql\mysql-8.0.25-winx64\bin (自己安装的路径)3. 启动MySQLnet start mysql进入MySQL交互操作界面mysql -u root -p之后输入密码,便进入了。创建和使用数据库create database study; (注意加分号)use study;...
2021-06-19 18:48:01 112
原创 迷宫(蓝桥杯)
思路创建一个结构体,用来存坐标,步数,所走路字典序。创建数组存每步的走法并对应最小的字典序。源码(不知道错哪里)#include<bits/stdc++.h>using namespace std;struct pos{ int x,y,step; string s;};int n,m;int sx=1,sy=1,fx=30,fy=50;int dx[]={1,0,0,-1};int dy[]={0,-1,1,0};char dir[]={'D','L','R',.
2021-04-12 18:49:32 287
原创 P1825 [USACO11OPEN]Corn Maze S
链接:P1825 [USACO11OPEN]Corn Maze S思路1.输入地图,寻找起始点2. 起始点入队,扩展3.判断是否找到终点4.判断是否进入穿越点(函数) 源码#include<bits/stdc++.h>using namespace std;const int maxn=350;struct pos{ int x,y,d;};queue<pos> Q;char mp[maxn][maxn];int vis[maxn][maxn],n
2021-04-12 15:11:48 437
原创 P1135 奇怪的电梯
DFS#include<bits/stdc++.h>using namespace std;int n,a,b;int k[305],vis[305];int minn=0x7fff;void dfs(int x,int step){ if(step>minn) return ;//剪枝 if(x==b){ //如果找到,则更新最小值 minn=min(step,minn); return ; } for(int i=-1;i<=1;i+=2.
2021-04-11 09:09:21 158
原创 P1824 进击的奶牛
思路核心就是二分+判断+贪心思想源码#include<bits/stdc++.h>#define maxn 1000010#define INF 1e9using namespace std;int a[maxn],n,c;bool p(int d){ int k=0,last=-INF; for(int i=1;i<=n;i++){ if(a[i]-last>=d) last=a[i],k++; } return k>=c;}int.
2021-04-08 17:30:20 234
原创 P1873 砍树
思路就跟二分差不多,只是多了一个函数判断,是否满足题目的木材数。源码#include<bits/stdc++.h>#define maxn 1000010using namespace std;long long a[maxn],n,m;bool p(int h){//判断当前高度 long long tot=0; for(int i=1;i<=n;i++){ if(a[i]>h) tot+=a[i]-h; } return tot>=.
2021-04-08 17:13:38 88
原创 P1102 A-B 数对
思路排序,然后根据A=B+C 找到A的起始下标和终止下标,就能求出数对的个数//upper_bound(begin,end,val)寻找val元素的最后一个位置(也就是下一个元素的坐标) //lower_bound(begin,end,val)寻找val元素的第一个位置(从0开始)源码#include<bits/stdc++.h>using namespace std;int n,c;long long a[200005];int main(){ cin>&g.
2021-04-08 16:40:57 118
原创 二分算法(模板)
P2249 【深基13.例1】查找思想就是用二分算法,将数组分为两部部分,每次折半查找。int find(int x){ int l=1,r=n; while(l<=r){ int mid=(l+r)/2; if(a[mid]==x) return mid; else if(a[mid]>x) r=mid-1; else l=mid+1; } return -1;}但是这个算法有缺陷,如果数组里面有重复出现的数,则会直接跳出,而不会找最小数组的下标。改进
2021-04-08 16:09:09 257
原创 P1605 迷宫
思路迷宫问题:注意事项:特别要注意边界(如果从0开始,则往四周走容易越界)错误示范:#include<bits/stdc++.h>using namespace std;//迷宫问题:注意事项:特别要注意边界(如果从0开始,则往四周走容易越界) int n,m,t;int sx,sy,fx,fy;int zx,zy;int dx[]={0,0,-1,1};int dy[]={-1,1,0,0};int mp[10][10],vis[10][10];int an.
2021-04-06 17:22:39 111
原创 等差数列(最大公约数)
思路a a+d a+2d a+3d a+4d a+5d a+6d则只要求最大公约数 d源码#include<bits/stdc++.h>using namespace std;//a a+d a+2d a+3d a+4d a+5d a+6d//则只要求最大公约数 d int gcd(int a,int b){ if(b==0) return a; else { return gcd(b,a%b); }}const int N=100010;int .
2021-04-06 16:21:34 223
原创 后缀表达式
思路思路: 如果全是加号,答案就是所有数字直接相加。 如果存在减号: 如果全是正数,那么至少有一个被减去,所以把最小的那个减去即可。 如果有正有负,那么所有正数匹配正号,所有负数匹配负号,因此将它们的绝对值直接相加 (...+....-(+...+...)) 如果全是负数,那么除了维持一个最大的负数(因为负数越大它的绝对值越小)为负数之后外,其他的全部翻正。(...+...-(...+...-...+))源码#include<bits/stdc++.h>/*思路.
2021-04-05 20:42:03 379
原创 1239. 乘积最大
链接:乘积最大# 整体思路该题的题解是整理了一下 y总视频里面讲解思路,希望对看完视频还不大理解的同学有点帮助首先我们知道 如果 k == n ,那么就证明所有的数字是全部都选, 如果 k < n , 那么就要思考怎样去选择了:1.k 如果是偶数的话,选出来的结果一定是非负数 , 原因如下: (1) # 负数的个数是偶数个的话,负负得正,那么一定是非负数 (2) # 负数的个数如果是奇数个的话,那么我们就只选偶
2021-04-05 19:34:25 167
原创 常见的日期计算问题(模板)
1.判断日期的合法性int months[]={0,31,28,31,30,31,30,31,31,30,31,30,31}; //建立月份数组 // 1.判断日期合法性 //1111 22 11bool check(int data){ int year=data/10000; int month=data%10000/100; int day=data%100; //判断月份 if(month<=0||month>=13) return false; //判断天,特判
2021-04-05 18:40:46 1113 5
原创 P1135 奇怪的电梯
思路注意判断每次上下移动是否符合要求。源码#include<bits/stdc++.h>using namespace std;int n,a,b;int k[205],vis[205];int ans=0x7ffffff;void dfs(int now,int step){ if(now==b){ ans=min(step,ans); return ; } if(step>ans){ return ; } if(now+k[now]<.
2021-03-30 15:23:36 135
原创 四阶数独
思路 int row=(x-1)/4+1; //设置行 1 2 3 4为第一行 先让x-1 可以确保 设置为 1 int col=(x-1)%4+1; // 设置列 也同理 int block=(row-1)/2*2+(col-1)/2+1; //设置每块 为啥row要*2 因为每两行有两块,则需要扩大两倍 源码#include<bits/stdc++.h>using namespace std;#define size 5int a[size*s.
2021-03-29 18:35:41 1908
原创 P1010 [NOIP1998 普及组] 幂次方(递归)
思路源码#include<bits/stdc++.h>using namespace std;//2 10 进入 do while() 首先判断 x&i为假 执行一次++i x右移位 i=1 x=1 //继续进入 if() 为真 i==1 s="2"+s 退出while 返回 s//do while(++i,x>>=1) 当while里面有一个为0(假),则退出while string run(int x,int i=0,str.
2021-03-24 20:34:40 217
原创 P1259 黑白棋子的移动(分治)
思路注意题目中的4个黑棋和4个白棋的情况。这是递归结束的标志源码#include<bits/stdc++.h>using namespace std;//int n;char a[200];void prt(char a[]){for(int i=0;i<=2*n-1+2;i++)cout<<a[i];cout<<endl;return ; }void sw(char a[],int x ,int y);void f(int m){.
2021-03-23 20:18:01 296
原创 P3612 [USACO17JAN]Secret Cow Code S
思路//当 N为原始的下一位// cow wco//发现把最后一位提前以后,两边的不变。//若要寻找大于初始的一半,则只需要减去前面的一半//但题目又把最后一个字符提前 则寻找减去 len+1//还有一点 若n-len-1等于0的话,则说明是原来的最后一位源码#include<bits/stdc++.h>using namespace std;int main(){ char a[105],ch; long long n,num=0; while(scanf("%.
2021-03-23 16:58:55 150
原创 P1044 [NOIP2003 普及组] 栈(卡特兰数)
卡特兰数什么是卡特兰数思路//初始化:当进栈的个数为0,1 时 方法为1;//n个数 当x为最后一个出栈 前面有f[x-1]种方法 后面有f[n-x]种//方案数:f[x-1]*f[n-x]//每个数都可能最后一个出去。//所以方案数为每种情况的和。源码#include<bits/stdc++.h>using namespace std;//初始化:当进栈的个数为0,1 时 方法为1;//n个数 当x为最后一个出栈 前面有f[x-1]种方法 后面有f[n-x]种.
2021-03-21 18:42:45 223
原创 P1002 [NOIP2002 普及组] 过河卒(动态规划)
思路有递推可以知道。到点(x,y)的方法等于到点(x-1,y)+(x,y-1)的方法和。则可以写出ans[i][j]=max(ans[i][j],ans[i-1][j]+ans[i][j-1]);由马的点可以知道,有9个点不能走,所以要标记一下。最后一点如果马的坐标很小的话,马可以走的点可能为负数,则可以把棋盘+2源码#include<bits/stdc++.h>using namespace std;const int dx[]={0,-1,-2,-2,-1,1,2,.
2021-03-21 18:11:06 591
原创 P2036 [COCI2008-2009#2] PERKET
思路选择调料,然后刷新最小值。注意当酸为1时,苦为0时,可以不选。减少时间复杂度。源码#include<bits/stdc++.h>using namespace std;int a[11],b[11],ans=999999;int n; void dfs(int cnt,int x,int y){ if(cnt>n){ //终止条件,调料选完 if(x==1&&y==0) return ; //可以不选 ans=min(ans.
2021-03-19 18:27:52 526
原创 P1149 [NOIP2008 提高组] 火柴棒等式
思路用数组存每个数的火柴数,然后再计算。要注意数的取值范围。源码#include<bits/stdc++.h>using namespace std;int a[10]={6,2,5,5,4,5,6,3,7,6};int n;int ans;int fun(int n){ int num=0; while(n/10!=0){ //若不这样写,初始为0,则不会计算 num+=a[n%10]; n=n/10; } num+=a[n]; return.
2021-03-18 21:11:05 285
原创 P3654 First Step (ファーストステップ)
思路每行k个或每列k个注意特例k==1时 每个计算了两次源码#include<bits/stdc++.h>using namespace std;char a[1005][1005];int r,c,k;int ans;void dfsr(int x,int y,int r){ if(r==k){ ans++; return ; } if(a[x][y+1]=='.') dfsr(x,y+1,r+1); }void dfsu(int x,int .
2021-03-18 20:34:41 99
原创 next_permutation的用法
定义next_permutation(start,end)表示在[ start,end)内存的数组中产生严格的下一个字典序排序例题P1706 全排列问题#include<bits/stdc++.h>using namespace std;typedef long long LL;int a[10];int main(){ long long A,B,C,x,y,z,cnt=0; cin>>A>>B>>C; for(int i=1;i&
2021-03-18 19:31:54 525
原创 P2089 烤鸡
思路创建两个来保存数据。源码#include<bits/stdc++.h>using namespace std;int n;int a[11];int ans1,ans2[100000][11]; //ans1方案数,ans2[][]用来存每种方案//用dfs来搜索 void dfs(int cnt,int k){ if(cnt>10){ if(k==n){ //终止条件 ans1++; for(int i=1;i<=10;i++){ .
2021-03-17 20:13:07 124
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人