2022-04 Task01 交大ACM C++算法(1)

 C++

什么是算法

(这个基本都学过)

算法通常是由一段有输入有输出的代码描述的,该代码的输入输出就是一个具体问题的条件和答案。

算法的表示形式

  • 1、流程图 2、自然语言 3、伪代码 4、编程语言

算法的特性:有穷性,确定性,可行性,输入,输出

错题记录:

1、算法是解决一类问题的计算步骤。计算机的发明,不是为了解决一个问题,而是为了解决一类问题。(一类问题!)

什么是数据结构

数据结构研究的是

1、抽象层面上的一组有特定关系的数据的存储预处理 2、数据的逻辑结构和数据的物理结构以及它们之间的相互关系 3、数据结构是解决问题的过程中使用的容器

常见的数据结构:

常见的数据结构有数组、链表、栈、队列、树、图等

数据结构常见的操作:

常见操作:创建、清除、插入、删除、检索、更新、访问、遍历等

模拟与高精度

模拟算法

  • 将刚才要手动执行的实验流程“模拟一遍” 如脚本文件,调用脚本完成实验流程

  • 扫雷小游戏:
    #include <bits/stdc++.h>
    using namespace std; 
    string s;
    int a[110][110];
    int mx[8] = {-1, -1, -1, 0, 0, 1, 1, 1}; //八个相邻方向x坐标的变化
    int my[8] = {-1, 0, 1, -1, 1, -1, 0, 1}; //八个相邻方向y坐标的变化
    
    //方块上出现数字,则表示其周围八个方块中共有多少颗地雷
    int calc(int i,int j){
        int ans = 0;
        for(int k = 0; k < 8; k++){//周围八个方块中地雷的个数
            if(a[i + mx[k]][j + my[k]] == 1) //每次计算一个格周围八个的个数
                ans++;
        }
        return ans;
    }
    int main() {
        // 请补全代码,实现题目功能
        int n, m; //矩阵行列
        while(true){
            cin >> n >> m;
            if(n == 0 && m == 0){
                break;
            }
            memset(a, 0, sizeof(a)); //数组清零
            for(int i = 1; i <= n; i++){
                cin >> s;
                for(int j = 0; j <= m; j++){
                    if(s[j] == '*')
                        a[i][j+1] = 1;//如果该位置是地雷 对应数组位置为1
                }
            }
            for(int i = 1; i <= n; i++){
                for(int j = 1; j <= m; j++){
                    if(a[i][j] == 1){
                        cout << "*"; //是地雷就输出地雷
                    }else{
                        cout << calc (i , j); //不是地雷就输出周围有结果地雷
                    }
                   
                }
                cout << endl;
            }
            cout << endl;
            
        }
        return 0;
    }

高精度

  • 单精度:能用一个内置类型存储的整数。 高精度:不能用内置类型存储的大整数,通常用数组存储每一个数位。

  • 使用高精度大整数的第一步 存储 大端序,小端序(类似于计组) 通常采用小端序(135 ==> 存储是 531)存储 方便模拟竖式计算,因为我们习惯于从低位到高位,小端序地位存储在下标靠前的地方

  • 高精度 加法,减法运算

算法评价与复杂度

算法“评价员”

  • 评价算法的维度:时间和空间 为什么要评价算法:

  • (1)计算资源有限,包括CPU的计算速度和内存

  • (2)我们的等待时间是有限的

算法的评价指标

  • 时间复杂度 空间复杂度:算法执行过程中所需要的存储空间。

用于打比赛的ACM算法模板 常用函数与STL 重要公式与定理 1. Fibonacci Number 2. Lucas Number 3. Catalan Number 4. Stirling Number(Second Kind) 5. Bell Number 6. Stirling's Approximation 7. Sum of Reciprocal Approximation 8. Young Tableau 9. 整数划分 10. 错排公式 11. 三角形内切圆半径公式 12. 三角形外接圆半径公式 13. 圆內接四边形面积公式 14. 基础数论公式 大数模板,字符读入 数论算法 1. Greatest Common Divisor最大公约数 2. Prime素数判断 3. Sieve Prime素数筛法 4. Module Inverse模逆元 5. Extended Euclid扩展欧几里德算法 6. Modular Linear Equation模线性方程(同余方程) 7. Chinese Remainder Theorem中国余数定理(互素于非互素) 8. Euler Function欧拉函数 9. Farey总数 9. Farey序列构造 10. Miller_Rabbin素数测试,Pollard_rho因式分解 图论算法 1. 最小生成树(Kruscal算法) 2. 最小生成树(Prim算法) 3. 单源最短路径(Bellman-ford算法) 4. 单源最短路径(Dijkstra算法) 5. 全源最短路径(Folyd算法) 6. 拓扑排序 7. 网络预流和最大流 8. 网络最小费用最大流 9. 网络最大流(高度标号预流推进) 10. 最大团 11. 二分图最大匹配(匈牙利算法) 12. 带权二分图最优匹配(KM算法) 13. 强连通分量(Kosaraju算法) 14. 强连通分量(Gabow算法) 15. 无向图割边割点和双连通分量 16. 最小树形图O(N^3) 17. 最小树形图O(VE) 几何算法 1. 几何模板 2. 球面上两点最短距离 3. 三点求圆心坐标 4. 三角形几个重要的点 专题讨论 1. 树状数组 2. 字典树 3. 后缀树 4. 线段树 5. 并查集 6. 二叉堆 7. 逆序数(归并排序) 8. 树状DP 9. 欧拉路 10. 八数码 11. 高斯消元法 12. 字符串匹配(KMP算法) 13. 全排列,全组合 14. 二维线段树 15. 稳定婚姻匹配 16. 后缀数组 17. 左偏树 18. 标准RMQ-ST 19. 度限制最小生成树 20. 最优比率生成树(0/1分数规划) 21. 最小花费置换 22. 区间K大数 23. LCA - RMQ-ST 24. LCA – Tarjan 25. 指数型母函数 26. 指数型母函数(大数据) 27. 单词前缀树(字典树+KMP) 28. FFT(大数乘法) 29. 二分图网络最大流最小割 30. 混合图欧拉回路 31. 无源汇上下界网络流 32. 二分图最小点权覆盖 33. 带约束的轨道计数(Burnside引理) 34. 三分法求函数波峰 35. 单词计数,矩阵乘法 36. 字符串和数值hash 37. 滚动队列,前向星表示法 38. 最小点基,最小权点基
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值