指针以及结构体回顾
指针就是地址
[指针] [c++]123456789101112131415161718192021222324252627282930313233343536373839404142434445#include<bits/stdc++.h>using namespace std;int main(){ int a=10; int *p; //定义指针 p=&a; //让指针记录变量a的地址 等于是取a的地址赋给p //使用指针 *p=1000; //非定义时*表示解引用 找到指针指向的内存的数据 cout<<"*p="<<*p<<endl; cout<<"a="<<a<<endl; //此时均改为了1000 //空指针 用于给指针变量进行初始化 不可以访问 int *p1=NULL; //野指针 指针变量指向非法空间 必须避免 int *p2=(int *)0x1100; //常量指针 const修饰指针 指针指向的 ...
贪心
这道题要学一下重载运算符 思路就是如果先按右端点排序 区间有点就过无点 就加点在区间右端点
[905区间选点] [c++]12345678910111213141516171819202122232425262728293031323334353637#include<bits/stdc++.h>using namespace std;const int N=100010;int n;struct Range{ int l,r; bool operator < (const Range &w) const { return r<w.r; }}range[N];int main(){ cin>>n; for(int i=0;i<n;i++) { int l,r; cin>>l>>r; range[i]={l,r}; } ...
由浅入深dp2.0
[01背包1.0 关键代码] [c++]1234567891011121314151617181920212223242526272829303132333435363738int dfs(int x ,int spV, int sumW){ if(x>n) return 0; else if(spV<v[x]) return dfs(x+1,spV,sumW); else if(spv>=v[x]) { return max(dfs(x+1,spV,sumW),dfs(x+1,spV-v[x],sumW+w[x])); }}//记忆化搜索后int dfs(int x ,int spV) //sumW不影响边界 抹去{ if(mem[x][spV]) return mem[x][spV]; int sum=0; if(x>n) sum= 0; else if(spV<v[x]) sum= dfs(x+1,spV,sumW); else ...
二分法究极版
事情的起因是 蓝桥杯的时候二分法调了半天还错了 于是我决定重新进行一个归纳与记忆用记忆以及运用最好的方法
对于这种有序数组的查找 我们一般称其为二分查找例如 大致几类问题1.寻找大于5的第一个数的下标2.寻找大于等于5的第一个数的下标3.寻找大于5的最后一个数的下标…诸如此类那么如何进行记忆呢查找关于x的 check() 如果是对对对错型 则 mid<x或mid<=x 以此来确定分界线的位置如果是错错错对型 则将数组逆序存储然后我们再对l r的选取进行思考如果是mid<4: 1 2 3 |4 4 4 4 6 8 边界即在|处 l是3 小于4的第一个数 r是4 大于等于4的第一个数如果是mid<=4 1 2 3 4 4 4 4 4| 6 8 l是大于4的最后一个数怎么记呢 条件<4 就是在小于4的第一个数前划一竖线<=4 就是在最后一个<=4的数的右边划一个竖线
若有N个数 则从下标为1开始存初始化l指针为0 r指针为N+1
[二分查找] [c++]1234567891011int l=0,r=N+1 wh ...
蓝桥杯天梯赛补题
[分寝室] [c++]123456789101112131415161718192021222324#include<bits/stdc++.h>using namespace std;const int N=10000;int n0,n1,n;int a[N],b[N];int main(){ int a1=-1,b1=-1,m=100000; cin>>n0,n1,n; for(int i=1;i<=n-1;i++) { int j=n-i; if(a!=i && a%i=0 && b%j==0 && b!=j) { int aa=a/i,bb=b/j;res=abs(aa-bb); if(mn>res) a1=i,a2=j,m=res; } } if(a1==-1 && b1==-1) cout<<"NO Solution"; else cout<<a1< ...