2019年11月NOIP笔记总结
2019-11-25 10:54
1前言 本篇主要讲的是我最近学的关于堆和树的知识。 (我好菜呀) 峰位于中国境内。2内容 ①树
有n个节点的树有(n-1)条边 树:无环无向图,任意两点之间只有一条边 经过所有边回到原点--哈密尔顿回路
经过所有点回到原点--欧拉回路 中序:父亲在中间,左儿子在左边,左儿子在右边(人脑习惯) vectora :定义不定长数组
a.push_back :加入元素 a.size() :获取元素个数 二叉树:每个节点最多有两个子树的树。
完全二叉树:一棵深度为h的二叉树,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h
层所有的结点都连续集中在最左边,这就 是完全二叉树。 满二叉树:除最后一层无任何子节点外,每一层上的所有结点都有两个子 结点的二叉树。
将权值从大到小排序 取2个数做子节点,建一个空白父节点 将新建的树放回序列 重复步骤2 生成哈夫曼树 B:只有0的 I:只有1的
F:其他的j ②图 堆就是完全二叉树。 最大堆:根结点的键值是所有堆结点键值中最大者的堆。
最小堆:根结点的键值是所有堆结点键值中最小者的堆。 最小堆排序 #include using namespace std; int
n; int heap[11]={0,1,8,2,11,12,4,6}; int ans[8]; void d(int i) {
int t; while(i*2<=n) { t=i;
if(heap[2*i] { t=2*i;
} else {
t=i; } if(2*i+1<=n)
{ if(heap[2*i+1]
{
t=2*i+1; } }
if(t!=i) {
swap(heap[t],heap[i]); i=t;
} else break; }
return; } int main() { heap[1]=10; n=7; d(1); int k = 0;
while(n>0) { k++; ans[k] = heap[1];
heap[1] = heap[n]; n--;
d(1); } for(int i=1;i<=7;i++) {
cout<<ans[i]<<" "; } return 0; } 正确结果:2 4 6 8 10
11 12 ③其他 queue->队列 位运算 x>>1 除以2 x<<1 乘以2
可以用来计算x的n次方 pow函数 power :求冥 pow(x,y) :求x的y次方
floor(x)向下取整,返回一个<=x的int整型。 ceil(x)向上取整,返回一个>=x的int整型。
用一个数据和数据的关系,通过图和线段之间的关系来表示。 前提条件:BFS FBI树 3一些问题 VIM是什么?好像是个编译器?
我同学写了一个神奇的代码,哪位大佬明白是什么意思? #include #include #define int1 long long
using namespace std; priority_queueq1; queueq2; queueq3; int1
n,m,t,q,u,v; int main() {
cin>>n>>m>>q>>u>>v>>t; for(int
i=1; i<=n; i++) { int1 a;
cin>>a; q1.push(a); } int1 tag=0; for(int
i=1; i<=m; i++) { int1
x=-1000000000,y=-1000000000,z=-1000000000;
if(!q1.empty()) x=q1.top(); if(!q2.empty())
y=q2.front(); if(!q3.empty()) z=q3.front();
int1 a; a=max(x,max(y,z)); if(a==x)
q1.pop(); else if(a==y) q2.pop(); else
if(a==z) q3.pop(); a+=(i-1)q; if(i%t==0)
cout<<a<<" "; int1 px=a(long long)u/v;
q2.push(px-iq); q3.push(a-px-iq); }
cout<<endl; for(int i=1; i<=n+m; i++) { int1
x=-100000000000,y=-100000000000,z=-100000000000;
if(!q1.empty()) x=q1.top(); if(!q2.empty())
y=q2.front(); if(!q3.empty()) z=q3.front();
int1 a; a=max(x,max(y,z)); if(a==x)
q1.pop(); else if(a==y) q2.pop(); else
if(a==z) q3.pop(); if(i%t==0)
cout<<a+m*q<<" "; } } 好了,本月的笔记到此结束。
--end--
声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com