初赛

时间复杂度

主定理(必考)

\[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. Python爬取糗事百科示例代码

    参考链接:http://python.jobbole.com/81351/#comment-93968 主要参考自伯乐在线的内容,但是该链接博客下的源码部分的正则表达式部分应该是有问题,试了好几次,没 ...

  2. etcd+https部署

    关闭防火墙 关闭selinux 下载所需的包(cfssl,生成证书工具) mkdir /usr/local/src/etcd/ cd /usr/local/src/etcd/ wget https:/ ...

  3. Oracle 增删改(INSERT、DELETE、UPDATE)语句

    Ø  简介 本文介绍 Oracle 中的增删改语句,即 INSERT.DELETE.UPDATE 语句的使用.是时候展现真正的技术了,快上车: 1.   插入数据(INSERT) 2.   修改数据( ...

  4. centos6利用cgroup冻结一个程序运行

    操作步骤: 安装cgroup服务 yum install libcgroup 配置cgroup vim /etc/cgconfig.conf group stopit{ #添加一个cgroup组 fr ...

  5. js和C#互相调用

    快速上手 js和C#互相调用. C#调用js比较容易.JS调用C#代码,现有两种方法.老方法的缺点是只支持单页,如果切换页面,原有创建的变量就失效了.新方法没有这些问题. 老方法: Cefsharp ...

  6. Java生鲜电商平台-商品的spu和sku数据结构设计与架构

    Java生鲜电商平台-商品的spu和sku数据结构设计与架构 1. 先说明几个概念. 电商网站采用在商品模块,常采用spu+sku的数据结构算法,这种算法可以将商品的属性和商品的基本信息分离,分开维护 ...

  7. win10笔记本电脑连wifi显示“无internet,安全”解决办法

    吹一波, 不出意外的话,这应该是网上最全最详细的解决办法......毕竟妹子的电脑遇到了问题,咱一定要给她解决啊. 问题描述:连上了WiFi,显示“无Internet,安全”.但实际上她的电脑是有网的 ...

  8. 澄清Fundebug录屏技术的几点误会

    1. "视频"并非真的视频.也不是通过连续播放大量截图来实现 首先请大家观看这个视频: 视频中,当鼠标点击"场景重现",会立即播放一段"视频" ...

  9. linux设备驱动程序-设备树(1)-dtb转换成device_node

    linux设备驱动程序-设备树(1)-dtb转换成device_node 本设备树解析基于arm平台 从start_kernel开始 linux最底层的初始化部分在HEAD.s中,这是汇编代码,我们暂 ...

  10. linux关闭ACPI电源管理模块

    一.运行环境 # cat /etc/redhat-release CentOS release 6.2 (Final) # uname -a Linux web-server- -.el6.x86_6 ...