早上
**今天早上老师讲了堆和二叉堆,又讲了两道相关的例题,丑数和合并果子。
还讲了优先队列,优先队列是一种抽象数据类型,它里面有一些元素,这些元 素也称为
队列中的结点,而优先队列中的结点至少要包含“有序性”这种性质
优先队列有三个基本操作:插入结点,取最小结点和删除最小结点
优先队列有多种实现方法。比如链表,这样插入结点(入队) 操作只需要O(1)的时间,但是取最小结点、删除最小结点 (出队)操作的时间为O(n);也可以用二叉排序树,这样三种 操作的时间都为O(log2n),但存在着二叉树的退化问题;用 的最多的方法还是堆(二叉堆)
完全二叉树性质:第i个结点的父结点、左孩子结点、右孩子 结点的下标分别为:i /2、2i、2i+1
还讲了put和get
下午
先打了一会儿例题,然后开始考试可是这两天的一些知识点还有些没理解,特别是早上的堆,地一体还好还是做的出来的,可是第二题一直改错,改了好久结果输出一直“Impossible”,结果导致其他几题做的时间已经不够了,本以为可以拿200分,可是如下图
> `#include
using namespace std;
stack s;
int sum=0;
bool fw(string st) {
char sh;
int x=0;
while(x<st.size()) {
sh=st[x];
if(sh=='('||sh=='': {
if(s.empty()) {
return 0;
}
if(s.top()!='<') {
sum++;
}
s.pop();
break;
}
case']': {
if(s.empty()) {
return 0;
}
if(s.top()!='[') {
sum++;
}
s.pop();
break;
}
case'}': {
if(s.empty()) {
return 0;
}
if(s.top()!='{') {
sum++;
}
s.pop();
break;
}
}
x++;
}
return s.empty();
}
int main() {
freopen("pi.in","r",stdin);
freopen("pi.out","w",stdout);
string st1;
getchar();
if(fw(st1)) {
cout<<sum;
} else {
cout<<"Impossible";
}
return 0;
}`
我~作亖~~~把getline改成了getchar,结果只得了10分:cold_sweat:,又又又又犯了这种错误十分的不应该,后面的最后一次比赛一定要