初赛

时间复杂度

主定理(必考)

\[T(n) = aT(\frac{n}{b})+f(n)
\]

其中,\(n\)为问题的规模,\(a\)为递推下子问题的数量,\(\frac{n}{b}\)为每个子问题的规模,\(f(n)\)为递推后做的额外的计算工作

在以下几种情况中, 主定理有用:

\[\begin{cases}
若\exists \epsilon,使得f(n)=O(n^{\log_b^a-\epsilon}), &则T(n)=O(n^{\log_b^a}) \\
若f(n)=O(n^{\log_b^a}), & 则T(n)=O(n^{\log_b^a}\lg n) \\
若\exists \epsilon, 使得f(n)=O(n^{\log_b^a+\epsilon}), &则T(n)=O(f(n)) \\
\end{cases}\]

感性理解, \(n^{\log_b^a}\)和\(O(f(n))\)那个大取决于那个, 相等就乘一个\(\lg n\)

画一棵递归树, 总共\(\log_b^n\)层, 底层叶子树为\(a^{\log_b^n}=b^{\log_b^a\log_b^n}=n^{\log_b^a}\)

然后不会了

9. 若某算法的计算时间表示为递推关系式:

T(N)=2T(N/2)+logN

T(1)=1

则该算法的时间复杂度为()。

A.O(N) B. O(NlogN)

C.O(Nlog2N) D. O(N2)

答案: A. \(\log_b^a=1\), 蛋是\(\log N\)没法表示成\(N\)的指数形式, 不过由主定理可以大致估算在\(O(N)\)左右

排序

冒泡排序&插入排序

冒泡:

辅助空间:\(O(1)\)

最好:\(O(n)\)

最差&平均:\(O(n^2)\)

稳定


选择排序

辅助空间:\(O(1)\)

最好&最差&平均:\(O(n^2)\)

不稳定


归并排序



辅助空间:\(O(n)*logn\)

最好&最差&平均:\(O(nlogn)\)

稳定


快速排序



辅助空间:\(O(1)*logn\)

最好&平均:\(O(nlogn)\)

最差:\(O(n)\)

不稳定


堆排序



辅助空间:\(O(1)\)

最好&最差&平均:\(O(nlogn)\)

不稳定

void swap(int K[], int i, int j)
{
int temp = K[i];
K[i] = K[j];
K[j] = temp;
} //大顶堆的构造,传入的i是父节点
void HeapAdjust(int k[],int p,int n)
{
int i,temp;
temp = k[p];
for (i = 2 * p; i <= n;i*=2) //逐渐去找左右孩子结点
{
//找到两个孩子结点中最大的
if (i < n&&k[i] < k[i + 1])
i++;
//父节点和孩子最大的进行判断,调整,变为最大堆
if (temp >= k[i])
break;
//将父节点数据变为最大的,将原来的数据还是放在temp中,
k[p] = k[i]; //若是孩子结点的数据更大,我们会将数据上移,为他插入的点提供位置
p = i;
}
//当我们在for循环中找到了p子树中,满足条件的点,我们就加入数据到该点p,注意:p点原来数据已经被上移动了
//若没有找到,就是相当于对其值不变
//插入
k[p] = temp;
} //大顶堆排序
void HeapSort(int k[], int n)
{
int i;
//首先将无序数列转换为大顶堆
for (i = n / 2; i > 0;i--) //注意由于是完全二叉树,所以我们从一半向前构造,传入父节点
HeapAdjust(k, i, n); //上面大顶堆已经构造完成,我们现在需要排序,每次将最大的元素放入最后
//然后将剩余元素重新构造大顶堆,将最大元素放在剩余最后
for (i = n; i >1;i--)
{
swap(k, 1, i);
HeapAdjust(k, 1, i - 1);
}
} int main()
{
int i;
int a[11] = {-1, 5, 2, 6, 0, 3, 9, 1, 7, 4, 8 };
HeapSort(a, 10); for (i = 1; i <= 10; i++)
printf("%d ", a[i]); system("pause");
return 0;
}

基数排序

基数(几个桶)\(r\)

最大位数\(d\)

空间:\(O(n+rd)\)

最好&最坏&平均:\(O(d*(n+r))\)

稳定


/*算法:基数排序*/ #include <iostream> using namespace std;
/*********************************************************
Function:rxsort
Description:基数排序
Input:
数组A[l,h];
数组中最大元素的位数d,例如最大数为999,则d为3;
进制数k,如果是10进制数,k为10;
Output:排序好的数组;
Others:对数字1234来说,预定第0位为4,第1位为3,依次类推;
*********************************************************/
bool rxsort(int A[],int l,int h,int d,int k){
if(NULL==A||l>h)
return false;
int size = h-l+1; int* counts = new int[k];//用于计数排序的辅助数据,详见计数排序
int* temp = new int[size];//用于存储重新排序的数组
int index;
int pval=1;
//依次处理不同的位
for(int i=0;i<d;i++){
//counts数组清零
for(int j=0;j<k;j++)
counts[j] = 0; for(int j=l;j<=h;j++){
/*
1.data[j]/pval:去掉数字data[j]的后i个数,例如:
当data[j]=1234,i=2时,此时pval=100,data[j]/pval=12;
2.(data[j]/pval)%k:取数字data[j]/pval的最后一位数
3.(int)(data[j]/pval)%k:取数字data[j]的第i位数
*/
index = (int)(A[j]/pval)%k;
/*
统计数组A中每个数字的第i位数中各个数字的频数,用于计数排序;
*/
counts[index]++;
}
//计算累加频数,用户计数排序
for(int j=1;j<k;j++)
counts[j] = counts[j] + counts[j-1];
//使用倒数第i+1位数对A进行排序
for(int j=h;j>=l;j--){
index = (int)(A[j]/pval)%k;
temp[counts[index]-1] = A[j];
counts[index]--;
}
//将按第i为数排序后的结果保存回数组A中
for(int j=0;j<size;j++)
A[j+l] = temp[j];
//更新pval
pval = pval*k;
}
delete[] counts;
delete[] temp;
} int main(){
int A[] = {712,303,4,18,89,999,70,26};
rxsort(A,0,7,3,10);
for(int i=0;i<8;i++)
cout<<A[i]<<" ";
}
————————————————
版权声明:本文为CSDN博主「BQW_」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/bqw18744018044/article/details/81810190

希尔排序



插入排序的加强,对固定间隔插排,倍减间隔

空间:\(O(1)\)

平均:\(O(n^{1.3})\)

最差:\(O(n^2)\)

最好:\(O(n)\)

不稳定

#include<iostream>

using namespace std;
const int increment = 3;
void shellSort(int a[],int len)
{
int temp = 0;
unsigned gap = len/increment; // 步长初始化
while(gap) // while gap>=1
{
for (unsigned i = gap; i < len; ++i) // 分组,在每个子序列中进行插入排序
{
temp = a[i];//将当前的元素值先存起来方便后面插入
unsigned j = i;
while (j >= gap && temp < a[j-gap])//寻找插入位置
{
a[j] = a[j - gap];
j -= gap;
}
a[j] = temp;
}
gap = gap/increment;
}
}
int main()
{
int array[10] = {4,2,3,1,7,8,6,9,5,10};
cout<<"排序前的元素:"<<endl;
for(int num=0;num<10;num++)
{
cout<<array[num]<<" ";
}
cout<<endl;
shellSort(array,10);
cout<<"排序后的元素:"<<endl;
for(int num=0;num<10;num++)
{
cout<<array[num]<<" ";
}
return 0;
}
————————————————
版权声明:本文为CSDN博主「tqgwx」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zztingfeng/article/details/98470164

总结

/ 冒泡&插入排序 选择排序 归并排序 快速排序 堆排序 基数排序 希尔排序
空间 \(O(1)\) \(O(1)\) \(O(n)*logn\) \(O(1)*logn\) \(O(1)\) \(O(n+r)\) \(O(1)\)
最好 \(O(n)\) \(O(n^2)\) \(O(nlogn)\) \(O(nlogn)\) \(O(nlogn)\) \(O(d(n+r))\) \(O(1)\)
最差 \(O(n^2)\) \(O(n^2)\) \(O(nlogn)\) \(O(n^2)\) \(O(nlogn)\) \(O(d(n+r))\) \(O(n^2)\)
平均 \(O(n^2)\) \(O(n^2)\) \(O(nlogn)\) \(O(nlogn)\) \(O(nlogn)\) \(O(d(n+r))\) \(O(n^{1.3})\)
稳定? 稳定 不稳定 稳定 不稳定 不稳定 稳定 不稳定

11、在待排序的数据表已经为有序时,下列排序算法中时间复杂度会减少的是(BD)。

A 堆排序(无关) B、希尔排序O(n) C、冒泡排序 比较次数不变 D、插入排序O(n)

逻辑运算

位运算+逻辑运算的优先级

逻辑非(!,┐) = 按位反(~)

>

位移运算(<<,>>)

>

不等号(>=,<=)

>

等号(==,!=)

>

按位与(&)

>

按位异或(^)

>

按位或(|)

>

逻辑与(&&,∧)

>

逻辑或(||,∨)

A B 合取\(\wedge\) 析取\(\vee\) 蕴含\(\rightarrow\) 双蕴含\(\leftrightarrow\)
T T T T T T
T F F T F F
F T F T T F
F F F F T T

C++指针

P,NP,NPC,NPhard

https://blog.csdn.net/qq_29176963/article/details/82776543

及地址

图论

注意: 以下判定必须图联通

汉密尔顿 ?

汉密尔顿(回)路
经过图中每个结点恰好一次的(回)路
汉密尔顿图
含有 汉密尔顿回路 的图称为汉密尔顿图

一些性质:

  • 假设 \(G\) 是一个 \(n(n≥2)\) 阶简单图,如果 \(G\) 中\(\forall\) \(u\) 和 \(v\) ,都满足 \(deg(u) + deg(v) ≥ n-1\), 则 \(G\) 中存在 哈密尔顿道路 证明略(推荐
  • 假设 \(G\) 是一个 \(n(n≥3)\) 阶简单图,如果 \(G\) 中\(\forall\) \(u\) 和 \(v\) ,都满足 \(deg(u) + deg(v) ≥ n\) 则 \(G\) 中存在 哈密尔顿回路
  • 假设 \(G\) 是一个 \(n(n≥3)\) 阶简单图,如果 \(G\) 中任意顶点的次数都至少是 \(\lceil \frac{n}{2} \rceil\) ,则 \(G\) 是哈密尔顿图

欧拉

欧拉(回)路
经过图中每条恰好一次的(回)路
欧拉图
含有 欧拉回路 的图称为欧拉图

判定:

  1. 无向连通图存在欧拉路的条件:
  • 所有点度都是偶数,则可取任意一点作为起点。
  • 或者恰好有两个点度是奇数,则奇数点度点一定是欧拉路的起点和终点
  1. 有向连通图存在欧拉路的条件:
  • 每个点的入度等于出度,则存在欧拉回路(任意一点有度的点都可以作为起点)
  • 或者除两点外,所有入度等于出度。这两点中一点的出度比入度大,另一点的出度比入度小,则存在欧拉路。取出度大者为起点,入度大者为终点。

  • 先序遍历+中序遍历=一棵确定的二叉树
  • 后序遍历+中序遍历=一棵确定的二叉树
  • 即有中序遍历才能确定

下列关于图的说法正确的是():

A、欧拉图的每一个顶点都能作为某条欧拉闭迹的起点

B、 一个图有欧拉闭迹当且仅当该图有零个奇点。

C、 若一个无向图有奇数条边,则它必然不是二分图。

D、若G是汉密尔顿图,则对G上的汉密尔顿圈C,任意删去n个点,最多可将C划分为n段,反之亦然。

答案:A

注意:B不对,还要求连通

19.下列说法正确的是( ) 算法

A.SPFA算法无法用来判断给定图是否存在负环

B. 当图中不存在负权环但是存在负权边,Dijkstra算法一定不能求最短路

C. 当图中不存在负权环但是存在负权边,bellman-ford算法一定能求最短路

D.相比于稀疏图,在稠密图上更适合使用SPFA算法

答案:C

注意:B不对,由于pq是优化,可以直接考虑n^2版本, 一个点只会去更新其他点一次, 只要构造一张真确距离第二次才能更新某个点的图即可; C正确; D.如完全图, Dij是n ^2而SPFA=nm=n ^3

14 在一个带权连通图G中,权值最小的边一定包含在G的() 生成树中。

A. 某个最小 B. 任何最小 C. 广度优先 D.深度优先

答案: A; (最小生成树) 审清题意

特殊的计数及常见排列组合问题

卡特兰数

前几项为 :

\[\begin{aligned}
& 1, 2, 5, 14, 42,\\
& 132, 429, 1430, 4862, 16796, \\
& 58786, 208012, 742900, 2674440, 9694845, \dots \\
\end{aligned}\]

一般递推式:

\[Cat_i = \sum_{j=0}^N Cat_j * Cat_{i-j-1}
\]

在数据范围不大,模数不一定是质数 时可用

一般递推式的解: 通向公式1

\[Cat_i = C(2*n,n) - C(2*n,n+1)
\]

通项公式1化简: 通项公式2

\[\begin{aligned}
& Cat_i = \frac{1}{i+1}C(2*i,i) \\
& Cat_i = C(2*i,i) - C(2*i,i+1) \\
& Cat_i =\frac{(2*i)!}{i! * i!} -\frac{(2*i)!}{(i-1)! * (i+1)!} \\
& Cat_i = \frac{(2*i)!*(i+1)}{i! * i!*(i+1)}-\frac{(2*i)!*i}{i!*i! *(i+1)}\\
& Cat_i = \frac{1}{i+1} * (\frac{(2*i)!}{i! * i!}) \\
& Cat_i = \frac{1}{i+1} * C(2 * i, i) \\
\end{aligned}\]

通项公式2化简:递推式2

\[\begin{aligned}
& Cat_i = \frac{1}{i+1} * C(2 * i, i) \\
& Cat_{i-1} = \frac{1}{i} * C(2 * (i-1), i-1) \\
& C(2*i,i) = (2*i)! / i! / i! \\
& C(2*(i-1),i-1) = (2)*i-2)! / (i-1)! / (i-1)! \\
& C(2*i,i) = C(2*(i-1),i-1) * (2*i-1) * (2*i) / i / i \\
& Cat_i = \frac{1}{i} * C(2 * (i-1), i-1) * \frac{i}{i+1} * (2*i-1) * (2*i) / i / i \\
& Cat_i = Cat_{i-1} * \frac{i}{i+1} * (2*i-1) * (2*i) / i / i \\
& Cat_i = Cat_{i-1} * \frac{2*(2*i-1)}{i+1}\\
\end{aligned}\]

一类斯特林数

第一类斯特林数 \(S1(n,m)\) 表示的是将 \(n\) 个不同元素构成 \(m\) 个圆排列的数目。

\(S1(n, m) = (n - 1) \cdot S1(n - 1, m) + S1(n - 1, m - 1)\)

即放在之前某个元素左边 + 单独成环

\(S1(n, 0) = 0, S1(1,1) = 1\)

二类斯特林数

第二类斯特林数 \(S2(n,m)\) 表示的是把 \(n\) 个不同元素划分到 \(m\) 个集合的方案数。

\(S2(n, m) = m \cdot S2(n - 1, m) + S2(n - 1, m - 1)\)

即放在之前某个集合 + 单独成集合

\(S2(n, 0) = 0, S2(1,1) = 1\)

常见排列组合问题

八种基本放球问题 *

1球相同,盒相同,可以为空 *

  • 等价于整数拆分
  • 性质: 将\(N\)拆分乘不超过\(M\)个数的方案数,等同于拆分成最大不超过\(M\)的方案数

将整数\(N\)分解为不超过\(M\)个整数的方案数

设\(dp[i][j]\)为\(i\)分为\(j\)个数(带0)的方案

  • 假设选出的数非减排列
  • 所有的状态可以从一些子状态整体+1不变转移, 这样不会破坏非严格递增的性质

即:

  • 子状态增加一个0(空盒)在开头, \(dp[i][j-1]\)
  • 子状态整体\(+1\), \(dp[i-j][j]\)

\(dp[i][j]=dp[i][j-1]+dp[i-j][j]\)

\(ans = dp[N][M]\)

如果求分成不超过\(M\)且不重复的方案数,则稍作修改:

\(dp[i][j]=dp[i][j-1]+dp[i-j][j-1]\)

2球相同,盒相同,不可以为空 *

与前一种情况类似, 且更加简单

  • 思路相同, 由于不可以为空, 不能从子状态加一个空盒转移
  • 根据性质, 可以用子状态加一个单独的\(1\)(最小单位)转移

即:

  • 子状态加一个单独\(1\), \(dp[i-1][j-1]\)
  • 子状态整体\(+1\), \(dp[i-j][j]\)

\(dp[i][j]=dp[i-1][j-1]+dp[i-j][j]\)

\(ans=dp[N][M]\)

同样, 球同盒同可以为空也可用\(\sum_{i=1}^{M}dp[N][i]\)计算

3球不同,盒不同,可以为空 *

对于每一个球, 都有\(N\)个盒子任意选择

\(ans=M^N\)

或是二类斯特林数 * 排列 求和

\(ans = \sum_{k=1}^{m} S2(n, k) \cdot A(m, k)\)

4球不同,盒相同,不可以为空 *

第二类斯特林数

5球不同,盒不同,不可以为空 *

第二类斯特林数 * 盒子的排列数

6球不同,盒相同,可以为空 *

对二斯求和

7球相同,盒不同,不可以为空 *

组合数

在\(N\)个球中插入\(M-1\)个隔板,即\(C_{n-1}^{m-1}\)

递推

\(dp[i][j]\)代表前\(i\)个球放入前\(j\)个盒子的方案数

  • 将\(i\)放入当前盒子\(j\)中,\(dp[i-1][j]\)
  • \(j\)为新开的盒,\(dp[i-1][j-1]\)

8球相同,盒不同,可以为空 *

组合数计算

可以转化为不空,将球数量增加\(M\)个,在每个盒子中先放一个

在进行插板, 即\(C_{n+m-1}^{m-1}\)(最后在拿掉原先的\(M\)个)

递推+组合数

或者\(DP\)推,先推出不空的\(DP\),\(ans=sigma(DP[n][j]*C_m^{m-j})\),比较烦

错位排列 *

考虑递推, 设\(f[i]\)为前\(i\)个数的错排方案数:

  • 由于第\(i\)个数不能放在自己的位置上, 只能放在\([1,i-1]\)的某个位置\(j\)上
  • 那么原先\(j\)上的数要重新选择位置

选择之前的一个数有\((i-1)\)种方案, 而对于重选位置:

  • 位置\(j\)上的数放在\(i\)上, 现在剩下\((i-2)\)个数都有限制, \(f[i-2]\)
  • 位置\(j\)上的数不放在\(i\)上, 相当于给\(j\)加了一个限制, 现在\((i-1)\)个数有限制, \(f[i-1]\)

\(f[i]=(i-1)*(f[i-1]+f[i-2])\)

圆排列 *

两种思路:

  • 固定一个点, 剩下的全排列, \((n-1)!\)
  • 先全排列, 因为在圆上, 转一圈都相同, \(n!/n\)

重复排列

有\(k\)种物品, 每一种有\(a[i]\)个, 总共\(N\)个,求排列的方案数

即全排列的方案数, 除以每一种内部排列的方案数

\[\frac{N!}{\prod_{i=1}^{k}a[i]!}
\]

重复组合 * important

\(n\)种不同的球, 每种球无限个, 从中选\(k\)个的方案数

等价于将\(k\)次选择(相同)分配到\(n\)种球上

即\(k\)个球放到\(n\)个不同的盒子, 可以为空的情况

\(C_{k-1+n}^{n-1}\)

3、3、 给定4个变量x1,x2,x3,x4,满足1<=xi<=10,求方程x1+x2+x3+x4=30的解数()。

A.282 B.288 C.360 D.362

答案: 写成\(10-x_1+10-x_2+10-x_3\)

\(2x^2-3x+1=0\), \(x=(2+-1)/4\) \(x1=1/2, x2 = 1\)

\(f(n) = A * (\frac{1}{2})^{n-1} + B\)

\[\begin{cases}
A + B = 1 \\
1/2 * A + B = 3/2
\end{cases}\]

\(B = 2\)

数列

平方和公式

\[\sum_{i=1}^{n} i^2 = \frac{n(n + 1)(2n + 1)}{6}
\]

证明:

\[\begin{aligned}
& (n + 1) ^ 3 = n ^ 3 + 3n ^ 2 + 3n + 1 \\
& (n + 1) ^ 3 - n ^ 3 = 3n ^ 2 + 3n + 1 \\
& (n + 1) ^ 3 - n ^ 3 + n ^ 3 - (n - 1) ^ 3 + \dots + 2 ^ 3 - 1 ^ 3 = 3\sum_{i=1}^{n} i^2 + 3\sum_{i=1}^{n} i + n\\
& n ^ 3 + 3n ^ 2 + 3n = 3\sum_{i=1}^{n} i^2 + \frac{3n(n + 1)}{2} + n\\
& \sum_{i=1}^{n} i^2 = \frac{2n ^ 3 + 3n ^2 + 2n}{6} = \frac{n(n + 1)(2n + 1)}{6} \\
\end{aligned}\]

特征根求通向+10-x_4=10$

转化成\(y_1+y_2+y_3+y_4=10\) 其中\(0\le y \le 9\), 用隔板法\(C_{10+4-1}^{4-1} - 4\) , \(-4\)表示减去某一个\(y=10\)的方案

15、 四面体的顶点和各棱中点共10个点,从中取4个不共面的点,不同的取法有多少种?

  • 总共: \(C_{10}^{4}\)
  • 对于每一面, 选择这一面的\(4\)个, 不合法 : \(4*C_{6}^{4}\)
  • 对于每一条边, 选\(3\)个点, 然后选择对面那一面上横边的中点, 不合法\(6*1\)
  • 选择一个由中位线组成的平行四边形, 不合法:\(3\)

减去不合法的方案: \(C_{10}^{4} - 4 * C_{6}^{4} - 6 - 3 = 141\)

16、 以一个正方体的顶点为顶点,能组成多少个不同的四面体? 类似上一题:

  • 总共: \(C_8^4\)
  • 选择一个面, 不合法: 6
  • 选择一个对角面, 不合法: 6

58

17、 6本不同的书全部分给5名同学每人至少一本,有多少种不同的分法? 5个人中, 有一个人有2本, 其他人都是1本

  • 先选择一个有2本的人, \(5\)
  • 在6本中选择2本给这个人, \(C_6^2\)
  • 剩下的4本和4个人, 进行全排列匹配\(A_4^4\)

\(ans=5*C_6^2*A_4^4=1800\)

20、 8本不同的书分给3名同学,其中1名同学2本、另两人3本,有多少种不同分法?

  • 先选一个2本的人, 给他2本书, \(C_3^1*C_8^2\)
  • 剩下2个3本的人, 这时不需要在从中选一个人了, 因为\(C_6^3\)已经确定两个人的分配了, 一个人3本

\(ans=C_3^1*C_8^2*C_6^3=1680\)

23、 7个相同的小球,任意放入4个不同的盒子中,共有多少种不同的方法?

转化为不为空的情况, 在每个盒子中放一个, 于是在\(10\)个球中插\(3\)个隔板

\(ans=C_{10}^3=120\)

28、 10双不相同的鞋子混装在一只口袋中,从中任取4只,4只鞋子恰有2只成双的方法数?

  • 先选一对, \("10"\)
  • 剩下18只, 选择了某一只, 与其成对的就不能选, \(18*16/2\)

\(ans=10*18*16/2=1440\)

31、 6本不同的书分给甲、乙、丙三人,每人至少一本,有多少种不同的分法?

只知道分类讨论怎么做:

37、 一些学生接受调查,这些学生中准备参加会计师考试的有63人,准备参加英语考试的有89人,准备参加计算机考试的有47人,三种都准备参加的有24人,只准备参加两种考试的有46人,不参加其中任何一种考试的有15人。请问有多少学生接受调查?

注意 : 是只参加2种的有...人, 画图易得至少参加2人的有46+243人, 有容斥可得答案为(63+89+47)-(46+243)+24+15 = 120

27、10双不相同的鞋子混装在一只口袋中,从中任取4只,4只鞋子没有成双的方法数?

答案:

  1. \(20*18*16*14/A_4^4=3360\)
  2. \(C_{20}^4 - C_{10}^{1}*18*16/2 - C_{10}^{2}=3360\)

数列

平方和公式

\[\sum_{i=1}^{n} i^2 = \frac{n(n + 1)(2n + 1)}{6}
\]

证明:

\[\begin{aligned}
& (n + 1) ^ 3 = n ^ 3 + 3n ^ 2 + 3n + 1 \\
& (n + 1) ^ 3 - n ^ 3 = 3n ^ 2 + 3n + 1 \\
& (n + 1) ^ 3 - n ^ 3 + n ^ 3 - (n - 1) ^ 3 + \dots + 2 ^ 3 - 1 ^ 3 = 3\sum_{i=1}^{n} i^2 + 3\sum_{i=1}^{n} i + n\\
& n ^ 3 + 3n ^ 2 + 3n = 3\sum_{i=1}^{n} i^2 + \frac{3n(n + 1)}{2} + n\\
& \sum_{i=1}^{n} i^2 = \frac{2n ^ 3 + 3n ^2 + 2n}{6} = \frac{n(n + 1)(2n + 1)}{6} \\
\end{aligned}\]

特征根求通向

一阶

待定系数法

二阶







Lucas定理

\(C(n, m) \mod p = C(n / p , m / p) \cdot C(n \mod p, m \mod p) \mod p\)

哈希

二次探查法

\(+1^2, -1^2, +2^2, -2^2, +3^2, -3^2\)

平均查找长度

成功~~~

找到第一个空的位置

按照顺序插入元素, 例如这个位子还没有放过, 直接放即可, 长度为\(1\), 若已经放过, 而下一个位子没放, 则长度为\(2\)

{7, 14}, mod 7

0 1
7 14
1 2

平均的分母为已插入的个数

不成功~~~

找到第一个非空的位置

按照位置去找, 注意定义为不在散列表中的元素, 初始位置为\([0, mod- 1]\)

{7、8、30、11、18、9、14}, mod 7

0 1 2 3 4 5 6 7 8 9
7 14 8 11 30 18 9
3 2 1 2 1 5 4 - - -

平均的分母为mod

哈弗曼编码 ?

\(n = 2n_0 - 1\)

概率期望

17. 随机抛硬币, 连续三次为 "正反正" 时就停止, 问期望抛几次

答案: 设E[i]表示匹配了前\(i\)位时到达目标的期望步数, 画树形图可得

\[\begin{cases}
E0 = (E1 + E0) / 2 + 1 \\
E1 = (E2 + E1) / 2 + 1 \\
E2 = (E0 + E3) / 2 + 1 \\
E3 = 0 \\
\end{cases}\]

解得E0 = 10

错题

其他错题(算数, 推理)

9、孙某和张某是考古学家老李的学生。有一天,老李拿了一件古物来考验两人,两人都无法验证出来这件古物试谁的。老李告诉了孙某拥有者的姓,告诉张某拥有者的名,并且在纸条上写下以下几个人的人名,问他们知道谁才是拥有者?

纸条上的名字有:沈万三、岳飞、岳云、张飞、张良、张鹏、赵括、赵云、赵鹏、沈括。

孙某说:如果我不知道的话,张某肯定也不知道。

张某说:刚才我不知道,听孙某一说,我现在知道了。

孙某说:哦,那我也知道了。

请问:那件古物是谁的(B)?

A、赵括 B、岳飞 C、岳云 D、赵鹏

(1)剩下 岳, 赵

(2)排除 岳, 赵 中重名的

(3)排除 岳飞 赵括 赵鹏 中重姓的

include

using namespace std;

int f(int n,int k){

if (n == k || k == 0) return 1;

else return f(n - 1, k) + f(n - 1, k - 1);

}

int main() {

int n,k,m;

cin >> n >> k;

cout << f(n,k);

return 0;

}

6 此题的时间复杂度为多项式级别,请判断是否正确(B)?

A. 正确 B.错误

相当于O(ans)

5.将数组{8, 23, 4, 16, 77, -5, 53, 100}中的元素按从大到小的顺序排列,每次可以交换任意两个元素,最少需要交换( )次。

找出三个环, 答案应当是每个环的大小-1加起来

2.如果在某个进制下等式\(7*7=41\)成立,那么在该进制下\(12*12=\)( )也成立。

A.100 B. 144 C. 164 D.196

算错, 可以由前一个等式得他是\(12\)进制, 或者可以将后一等式写成\((X+2)^2=X^2+4X+4\)直接得到

4、若有18个元素的有序表存放在一维数组A[19]中,第一个元素放A[1]中,现进行二分查找,则查找A[3]的比较序列的下标依次为( )

A. 1,2,3 B. 9,5,2,3

C. 9,5,3 D. 9,4,2,3

答案: [1,18]->9->[1,8]->4->[1,3]->2->[3,3]->3

3、给定4个变量x1,x2,x3,x4,满足1<=xi<=10,求方程x1+x2+x3+x4=30的解数()。

A.282 B.288 C.360 D.362

答案: A

前两个分一组, 后两个分一组, 算出每一组和为多少的方案数, 然后乘起来相加

https://blog.csdn.net/qq_34454069/article/details/81055250

草稿写好看点!!!方便检查---

初赛Part2的更多相关文章

  1. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part2:clusterware安装和升级

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part2:clusterware安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 3.安装Clus ...

  2. Linux平台 Oracle 11gR2 RAC安装Part2:GI安装

    三.GI(Grid Infrastructure)安装 3.1 解压GI的安装包 3.2 安装配置Xmanager软件 3.3 共享存储LUN的赋权 3.4 使用Xmanager图形化界面安装GI 3 ...

  3. SCNU ACM 2016新生赛初赛 解题报告

    新生初赛题目.解题思路.参考代码一览 1001. 无聊的日常 Problem Description 两位小朋友小A和小B无聊时玩了个游戏,在限定时间内说出一排数字,那边说出的数大就赢,你的工作是帮他 ...

  4. 2016百度之星 初赛2A ABEF

    只做了1001 1002 1005 1006.剩下2题可能以后补? http://acm.hdu.edu.cn/search.php?field=problem&key=2016%22%B0% ...

  5. 【生活没有希望】NOIP2010初赛 烽火传递 smartoj1475

    整天初赛题做做,生活没有希望 用单调队列优化的dp 因为满足后来的总比先来的(在某些方面)更优 所以能用单调队列 n2变成n #include <cstdio> ],b[],c[]; in ...

  6. Hadoop入门学习笔记---part2

    在<Hadoop入门学习笔记---part1>中感觉自己虽然总结的比较详细,但是始终感觉有点凌乱.不够系统化,不够简洁.经过自己的推敲和总结,现在在此处概括性的总结一下,认为在准备搭建ha ...

  7. NOIP2014初赛分数线及金华上线名单

    NOIP2014初赛分数线及金华上线名单 分数线:提高组81.5,普及组93 这分数线还能再高些吗?悲催的浙江. 金华上线普及组名单: 地市 姓名 学校 年级 参赛语种 成绩 金华 成浩鹏 稠州丹溪校 ...

  8. [NOIP2010初赛]烽火传递+单调队列详细整理

    P1313 [NOIP2010初赛]烽火传递 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述   烽火台又称烽燧,是重要的防御设施,一般建在险要处或交通要道上 ...

  9. HDU 5690:2016"百度之星" - 初赛 All X

    原文链接:https://www.dreamwings.cn/hdu5690/2657.html All X Time Limit: 2000/1000 MS (Java/Others)    Mem ...

随机推荐

  1. java1.8 AQS AbstractQueuedSynchronizer学习

    AQS concurrent并发包中非常重要的顶层锁类,往往用的比较多的是ReentrantLock,然而ReentrantLock的实现依赖AbstractQueuedSynchronizer在到上 ...

  2. AOP软件设计

    什么是面向方面的编程? 为什么面向方面的软件设计? 术语 关注 视口 关注点分离 人工制品 横切 方面 编织 零件 形式主义 第二节 案例研究 关注 人工制品 横切 方面 AspectJ 加入点 切入 ...

  3. 在Azure DevOps Server (TFS)的流水线中编译和测试Xcode移动应用(iPhone)

    概述 Xcode是开发基于苹果macOS系统的桌面应用和移动应用的主要IDE工具.使用Azure DevOps Server (原名TFS)系统中的pipelines流水线功能,可以方便的集成Xcod ...

  4. 【08月14日】A股ROE最高排名

    个股滚动ROE = 最近4个季度的归母净利润 / ((期初归母净资产 + 期末归母净资产) / 2). 查看更多个股ROE最高排名 兰州民百(SH600738) - ROE_TTM:86.45% - ...

  5. markdown 希腊字母

    字母名称 大写 markdown原文 小写 markdown原文alpha A A α \alphabeta B B β \betagamma Γ \Gamma γ \gammadelta Δ \De ...

  6. BFS(四):搜索状态判重

    在采用广度优先算法进行搜索时,一个需要重点注意的是在搜索过程中判重和去重.前面介绍的几个例子中,判重都较简单,如采用vis[]数组,若vis[i]==0,则i未访问过,i入队列:若vis[i]!=0, ...

  7. springboot 使用 freemarker 无法正常跳转的问题?

    1.springboot 使用 freemarker 无法正常跳转的问题? 参考:https://blog.csdn.net/Lin_xiaofeng/article/details/79122053 ...

  8. ASP.NET MVC IOC 之 Autofac 系列开篇

    本系列主要讲述Autofac在.NET MVC项目以及webform中的使用. autofac为IOC组件,实现控制反转,主要结合面向接口编程,完成较大程度的解耦工作. 作为初学者,将学习到的每一步, ...

  9. FCC-学习笔记 Convert HTML Entities

    FCC-学习笔记  Convert HTML Entities 1>最近在学习和练习FCC的题目.这个真的比较的好,推荐给大家. 2>中文版的地址:https://www.freecode ...

  10. Flink使用SideOutPut替换Split实现分流

    以前的数据分析项目(版本1.4.2),对从Kafka读取的原始数据流,调用split接口实现分流. 新项目决定使用Flink 1.7.2,使用split接口进行分流的时候,发现接口被标记为deprac ...