习题集链接:https://ac.nowcoder.com/acm/contest/19850

看来是不好意思再自称这为题解了(划)
之所以换了个说法是因为前面几篇都是以读者没做出来题后一看就会为出发点写了方法或者代码主体
这个嘛,只能保证我自己一看就会
(而且部分题我也才会,两句话讲不明白,细说又有误导人的可能性)

——写在前头的一些废话——
用c学数据结构的时候
栈/队列(优先队列):数组
树/二叉平衡/查找树:链表(四种旋转至今记不熟)
完全/满二叉树:看情况用数组或链表
大/小顶堆:带哨兵节点的数组
图:邻接表二维数组,无向图有时候用一位数组,邻接矩阵链表 (入门班似乎没讲到这)

当时没啥感觉,听完这课后
深感STL的便利orz

——A——
没用过的数从小到大用一遍,然后递归到下一个下标,下标到9时输出,return

            L[step]=i;
            flag[i]=1;
            func(step+1);
            flag[i]=0;

用swap似乎会乱序

——B——
按早和晚的差值排序,大的早上吃

——C——
排序,遍历到n-2,有就输出

——D——
课上讲了

bool cmp(string a,string b){

    return a+b>b+a;
}
//两个strcat和一个strcmp()

——E——
课上讲了
栈,或者a+1b-1

——F——
课上讲了

while(cin>>a[0] && a[0])//这个学到了

和栈顶元素一样就pop,判空

——G——
还是课上讲了
maxn[i]存L[i]往后最大值,max[n]=0
// >= maxn[i+1] 出栈

——H——
栈空入栈
用每次读的和top判断,注意oo变O后看新top是不是O

——I——
课上讲了
简单的栈

——J——
讲了
queue 队列,先进先出
map <string,bool> 存插队情况,不是Q.front(),提前out就true

——K——
去重,去重,去重,不去重卡死在16.67%
写了两个方法
1开一个数组存sqrt(50M)以下的质数,开三个数组存小于50M的质数2,3,4次方,开一个数组把前三组各取一个加起来不大于50M的存起来,sort,读n把小于等于n的过一遍,反正不会内存超限
2存质数,三层循环(2,3,4次方)一个一个试,大了就break,反正不会TLE

——L——
讲了
转自雨巨:“容器里面判相等,是用: a<b是假 b<a也是假来判断的,
几乎所有的大小比较 后台其实都是用小于号实现的”

创建结构体,重载小于号,set插入insert删除erase查找S.find(xxx)!=S.end()
用scanfprintf,cincout会超时
顺带一提set是红黑树实现

——M——
map <string,int>
map也是红黑树

N讲了,我没写,https://www.nowcoder.com/study/live/678/7/2 01:37:50

后记:前面习题课没怎么听,STL实在不熟听了下,发现基本全讲了?
那写个啥
写个啥