2018/4/27

计算几何

一.简介

计算几何属于ACM算法中比较冷门的分类,在省赛中只在前几年考察过,这两年还没有考过,而且和高精度计算一样,遇到题目主要靠套模板,因此对题意的理解至关重要,而且往往题目描述还常为英文,所以还是需要一定的题量支撑,来判断具体考察的是什么。

二.题型分类

下列仅为一部分,可与《算法与实现》第三章计算几何互相补充。

1.点

判断点是否在多边形中★★

平面最近点对/最远点对★

曼哈顿距离

点集的有序化(极角序,水平序)

2.线段

判断线段是否在多边形内★

线段求交★

向量叉积/点积★

3.面(二维计算几何)

判断四点共面★

三角形相关重点

计算多个矩形组合成的图形的周长(降维思想)★★

凸包问题 Graham算法 滚包裹法 ★★

旋转卡壳

半平面交★

多边形重心★

4.三维计算几何

三维点积

三维叉积

三维凸包

三.模板整理

《算法与实现》第三章已经特别全,建议两天的时候抽出半天的时间慢慢把这一章所有函数看一遍。再加上-f_zyj的模板的计算几何单元,基本上省赛难度的几何题所用模板都有了。计算几何在省赛被考到,基本上都是模板题,不需要怎么改,但是其模板往往都是50行以上,又长又复杂,所以敲模板时一定要认真,别犯低级错误。

2018/4/25

DP

一.简介

在ACM中,动态规划是一种将一个复杂问题分为多个简单的小问题的思想。在使用动态规划时,原问题须满足重叠子问题和最优子结构这个性质。

运用动态规划思想设计的算法一般比朴素的算法高效很多。因为在计算某个状态的时候,已经被计算的子问题将不需要重复计算,而是调用之前存储下的结果。这样就减少了大量的重复计算。

动态规划思想的本质是在一个有向无环图中,求一个函数的最优值,也可以看做是一个加入了“记忆化”的搜索过程。

二.算法分类

1.基础DP ★★★

1.1 整数划分 五种

1.2 双向DP

2.链(环)式动态规划 ★★★

2.1背包问题

01背包

完全背包

多重背包

混合背包

二维费用背包

分组背包

2.2 连续序列

最大连续子序列 MCS

最长公共子序列LCS  (有的会用到滚动数组)

最长上升子序列 LIS

最大连续子矩阵

首尾相连的最大字段和

最大M子段和

3. 其他较难动态规划 (常用到状态压缩)

3.1区间DP ★★

3.2概率(期望)DP ★★

3.3数位DP★

3.4树形DP★

3.5集合DP

3.6斜率DP

三.模板整理

分类中★号越多越需要整理,但注意★号越多也更需要先理解。因为比赛中遇到的往往都是原算法分类的变形,要求可以灵活地修改模板。

四.练习题集

NYOJ动态规划分类

HDUOJ 46道 见文件夹(有几道比较难,可放到最后做)

XYNUOJ 动态规划分类

五.其他

动态规划是一种用途很广的问题求解方法,它本身并不是一个特定的算法,而是一种思想,一种手段。动态规划的理论性和实践性都比较强,一方面需要理解“状态”、“状态转移”、“最优子结构”、“重叠子问题”等概念,另一方面又需要根据题目的条件灵活设计算法,可以这么说,对动态规划的掌握情况在很大程度上能直接影响一个选手的分析和建模能力。

数据结构

一.简介

数据结构在比赛中通常用于对一些题目逻辑简单,但是测试数据比较大,用朴素(模拟或暴力)算法,会导致超时或超出内存限制的题目。重点算法需要熟悉掌握和灵活应用。

二.算法分类

1.线性表

栈  单调栈★

队列 双端队列 优先队列★

链表

块状链表

2.集合

2.1散列表★

2.2并查集 /带权并查集★

2.3二分查找★

3.排序 //虽然ACM比赛中排序大部分都是直接用sort,但是花一些时间去明白下面排序算法,有利于提高以后对其他算法的抽象理解能力,还是很有必要的

3.1朴素排序算法

插入排序

冒泡排序

3.2高效排序算法

归并排序算法★

快速排序算法

线性排序算法

4.树的基本概念★

4.1二叉树

二叉树的先序,后序,中序遍历和层次遍历。★

二叉树的链式表示法和数组表示法

二叉排序树(二叉搜索树)★

Treap名次树

平衡二叉树 Size Balance Tree

伸展树 实现可分裂与合并的序列

4.2  RMQ问题 ST表 ★

线段树 动态范围最小值问题 ★

主席树 查询区间内有多少不同的数 ★

划分树

笛卡尔树

4.3堆 (完全二叉树)

二叉堆

左偏树★

5.其他

树状数组★

逆序数★

滚动数组

树链剖分

资料中没有的部分可百度学习。另外可以把html文件和mhtml文件的默认打开方式从IE调为自己用的浏览器,IE真的是太卡了。

三.模板整理

同数学模块一样,本模块算法也比较多,而且有些短时间可能难以明白。请务必先学懂学通带★号的部分,其他的难度过高,出现在省赛的几率很低,仅做了解,知道其作用和整理下模板题目即可。

字符串

一.简介

字符串处理在ACM省赛中是每年必出,而且往往是铜牌必A题,难度不高,但是考验做题速度和准确性,特别考察对小细节的处理,可谓是坑点十足,而且特别消耗时间。所以在赛场说往往都是被排到第4道或者第5道题来做,基本上没有队伍会选择首先做字符串题目。

二.算法分类

0.简单模拟题

1.(四则运算)表达式计算

2.Trie 字典树

3.字符串匹配KMP

4.后缀数组

5.扩展KMP

6.最长公共前缀(LCP)

7.基于哈希值的LCP算法

8.最长重复子串

9.最长回文子串manacher

10.字符串散列

11.串的最小表示

12.AC自动机(做两三道题即可)

三.模板整理

上述每一种都可以整理一下。比赛中也是对上述某种模板的改编,决不会简简单单考模板。

STL标准模板库

一.简介

STL和数据结构在ICPC竞赛的作用类似,大部分情况都是题目很难用朴素算法在规定的时间和内存条件中完成,才不得不用的一种优化方式。

在ACM竞赛中,需要用到数组、字符串、队列、堆栈、链表、平衡二叉检索树等数据结构和排序、搜索算法,以提高程序的时间、空间运行效率。这些数据结构如果都需要手工来编写,那是相当麻烦的事情,幸运的是C++中包含了一个C++ STL,又称C++泛型库,它在std命名空间中定义了常用的数据结构和算法,使用起来十分方便。

二.内容范围

1.string 字符串 流式读写 头文件<string> ( stringstream  头文件<sstream>)

2.排序和检索 sort  头文件<algorithm>

3.不定长数组:vector 容器

4.集合set

5.映射map

6.栈,队列与优先队列

7.list双向链表容器

8.bitset位集合容器

9.deque双端队列容器(不太重要)

三.补充内容

关于sort:(重要)

1.待排序/查找的元素可以放在数组里,也可以放在vector里。前者用sort(a,a+n)的方式调用,后者用sort(v.begin,y.end())的方式调用。

2.lower_bound的作用是查找“大于或者等于x的第一个位置”。

upper_bound的作用是查找“大于或者等于x的第一个位置”。

unique函数可以删除有序数组中的重复元素。

四.模板整理

可以像数据结构一样每种整理一个经典的模板题,多了意义也不大,关键是理解并灵活应用和修改。

图论

模块中经典算法的思想;

最短路径:Dijkstra、bellman-ford、spfa、floyd、heap(堆)+Dijkstra;

最小生成树:prim、Kruskal;(图的其他存储形式实现)

topology-sort_拓扑;

重构图;

并查集;

二分图的最大匹配_ 匈牙利算法;

最大流的增广路_ KM算法;

差分分约束系统的建立和求和;

最小费用最大流;

KE算法;

Dinic算法;

双连通分量;

强连通分支及其缩点;

图的割边和割点;

最小割模型、网络流规约;

度限制最小生成树和第K最短;

最短路、最小生成树、二分图、最大流(抽象建模);

最优比率生成树;

最小树形图;

次小生成树;

无向图、有向图的最小环;

一 简介

图(graph)是数据结构和算法学中最强大的框架之一。图几乎可以用来表现所有类型的结构或系统,从交通网络到通信网络,从下棋游戏到最优流程,从任务分配到人际交互网络,图都有广阔的用武之地。在历届比赛中总会有1-2到题目与图论相关,图论问题往往会和现实问题相结合,而对于同一道问题,总会有好几种解法。而不同的解法往往并不是都可以有效的解决问题,因此,在解决问题时需要对题目进行仔细的研究,考虑是否存在特殊情况(有重边,是否存在回路,是否存在负权值),选出最适合的算法,才能快速解决问题。

二 算法分类

1.拓扑排序

2.最短路径

3.最小生成树

4.欧拉回路

5.二分匹配

6.并查集

三.题目汇总:

1.XYNUOJ中NYOJ图论分类所有题目

2.HDUOJ上的题目 优先做AC数高的题目

3.HDU 图论

以下是最小生成树+并查集

Hdu 官方分类网址:http://acm.hdu.edu.cn/typeclass.php

 

【HDU】

1213 How Many Tables 基础并查集★

1272 小希的迷宫 基础并查集★

1325&&poj1308 Is It A Tree? 基础并查集★

1856 More is better 基础并查集★

1102 Constructing Roads 基础最小生成树★

1232 畅通工程 基础并查集★

1233 还是畅通工程 基础最小生成树★

1863 畅通工程 基础最小生成树★

1875 畅通工程再续 基础最小生成树★

1879 继续畅通工程 基础最小生成树★

3371     Connect the Cities   简单最小生成树★

1301 Jungle Roads 基础最小生成树★

1162 Eddy's picture 基础最小生成树★

1198 Farm Irrigation 基础最小生成树★

1598 find the most comfortable road 枚举+最小生成树★★

1811 Rank of Tetris 并查集+拓扑排序★★

3926 Hand in Hand 同构图★

3938 Portal   离线+并查集★★

2489     Minimal Ratio Tree dfs枚举组合情况+最小生成树★

4081     Qin Shi Huang's National Road System 最小生成树+DFS★★

4126     Genghis Khan the Conqueror 枚举+最小生成树+DFS(难)★★★★

1829 A Bug's Life 基础种类并查集★

1558 Segment set 计算几何+并查集★

3461 Code Lock 并查集(有点难想到)★★

3367 Pseudoforest 最大生成树★

2473 Junk-Mail Filter 并查集+设立虚父节点(马甲)★★

3172 Virtual Friends 带权并查集★

3635 Dragon Balls 带权并查集★

3047 Zjnu Stadium 带权并查集★

3038 How Many Answers Are Wrong 种类并查集★★

2818 Building Block 带权并查集★

3234 Exclusive-OR 异或并查集(难)★★★

2121     Ice_cream’s world II   最小树形图(要输出根有点恶心)★★

4009     Transfer water 最小树形图(模板题)★

3311   Dig The Wells    斯坦纳树(状压DP)(模板题)★★

4085 Peach Blossom Spring 斯坦纳树(状压DP)(有可能是森林...)★★★

2586 How far away ? LCA★

2874 Connections between cities LCA★

3486 Interviewe RMQ★

2888 Check Corners 二维RMQ★

3183  A Magic Lamp RMQ(有点难想到,有点难联系到RMQ)★★

XYNUOJ-1923 食物链 种类并查集★★

===============================以下是最短路系列

【HDU】

1548     A strange lift 基础最短路(或bfs)★

2544     最短路   基础最短路★

3790    最短路径问题 基础最短路★

2066     一个人的旅行 基础最短路(多源多汇,可以建立超级源点和终点)★

2112     HDU Today 基础最短路★

1874     畅通工程续 基础最短路★

1217     Arbitrage    货币交换 Floyd (或者 Bellman-Ford 判环)★

1245     Saving James Bond 计算几何+最短路★

1317     XYZZY   Bellman-Ford判环,有负权★

1535     Invitation Cards    有向图的来回最短路,(反向建图)★

1546     Idiomatic Phrases Game   最短路★

2680     Choose the best route    最短路★

2923     Einbahnstrasse 最短路★

3339     In Action   最短路+背包★

2224     The shortest path 双调旅行商问题★★

2807     The Shortest Path 矩阵运算+最短路(floyd)★★

1595     find the longest of the shortest枚举+最短路(删掉任意一条边的最长最短路)★★

3986     Harry Potter and the Final Battle 枚举+最短路(删掉任意一条边的最长最短路)★★

1599     find the mincost route floyd求最小环★

1839 Delay Constrained... 二分下限+最短路(带限制最短路)★★

3631 Shortest Path                   Floyd插点法★★

4114 Disney's FastPass 最短路+二维状压DP(难)★★★

3832     Earth Hour 三点连通(斯坦纳树)★

3873     Invade the Mars Dij变体(好题!,带限制最短路)★★★

4063 Aircraft 几何构图+最短路★★★★

 

hdu4179 Difficult Routes dis[][]开二维状态的最短路(带限制最短路)★★

 

1869 六度分离 Floyd最短路★

1385     Minimum Transport Cost     最短路+输出路径(输出字典序最小路径,有点恶心)★★

1224     free DIY Tour 最短路+输出路径★

1142     A Walk Through the Forest   最短路+记忆搜索★★

1596     find the safest road    乘积最小的最短路★

1598     find the most comfortable road 二分速度差+最短路(带限制最短路)★★

2722     Here We Go(relians) Again 最短路★

2962     Trucking   二分+最短路(带限制最短路)★★

1690     Bus System 最短路★

2433     Travel 删边+最短路之和(预处理桥边)★★★

2363     Cycling 二分+最短路(带限制最短路)★★

2377     Bus Pass 最短路(寻找一个点的最长最短路最小)★★

2833     WuKong 最短路+记忆化搜索(求两条最短路的最多公共点)★★

1688     Sightseeing 最短次短路条数★★

3191     How Many Paths Are There 次短路条数★★

2482     Transit search 最短路★★★

============================以下是二分匹配系列

普通匹配,多重匹配

【HDU】

1068 Girls and Boys

1150 Machine Schedule

1151 Air Raid

1179 Ollivanders: Makers of Fine Wands since 382 BC.

1281 棋盘游戏

1498 50 years, 50 colors

1507 Uncle Tom's Inherited Land*

1528 Card Game Cheater

1845 Jimmy’s Assignment

2063 过山车

2119 Matrix

2444 The Accomodation of Students

2768 Cat vs. Dog

3081 Marriage Match II

3360 National Treasures

1045 也可搜索

1350 最小路径覆盖

3118 类似二分匹配

2819 完全匹配

1668 二分+多重匹配

3605 多重匹配

3861 强连通+二分匹配

2236 无题II

hdu3468

hdu4185 奇偶匹配

============================以下是KM算法系列、

【HDU】

2255 奔小康赚大钱

1533 Going Home

1853 Cyclic Tour

3488 Tour

3435 A new Graph Game

2426 Interesting Housing Problem

2853 Assignment

3718 Similarity

3722 Card Game

3395 Special Fish

2282 Chocolate

2813 One fihgt one

2448 Mining Station on the Sea

3315 My Brute

3523 Image copy detection

【HDU】

强连通:

1269   迷宫城堡   判断是否是一个强连通

2767 Proving Equivalences   至少加几条边让整个图变成强连通

3836 Equivalent Sets   至少加几条边让整个图变成强连通

1827    Summer Holiday   传递的最小费用

3072     Intelligence System   传递的最小费用

3861 The King’s Problem 强连通+二分匹配

3639 Hawk-and-Chicken   强连通缩点 + 树形dp(累加子节点的总权值)

3594 Cactus 仙人掌图

 

双连通:

2242 考研路茫茫——空调教室   双联通缩点+树形DP

2460 Network  边双连通

3849 By Recognizing These Guys, We Find Social Networks Useful  双连通求桥

3896 Greatest TC   双连通

4005 The war   边双连通

 

LCA:

2586 How far away ?

2874 Connections between cities

3078 Network   LCA+排序

3830 Checkers   二分+LCA

============================以下是欧拉回路系列

【HDU】

1878 欧拉回路  判断

3018 Ant Trip 一笔画问题

1116

2894 兹鼓欧拉回路

1956

3472 混合欧拉

2337 Catenyms   欧拉路径

1392 Ouroboros Snake   兹鼓欧拉回路

1780   code

1637   混合欧拉

拓扑排序

【HDU】

1285 确定比赛名次

2094 产生冠军

2647 Reward

3342 Legal or Not

1811 Rank of Tetris   拓扑+并查集

数论

一.简介

数论是ACM中的重点内容。历年竞赛题目,一般都有1~2道题目与数论有密切关系。数论涉及的概念和算法很多,用途也非常广泛。掌握与数论有关的方法,是参赛者需要具备的必要技能。数论的学习应该注意简单的概念要能熟练掌握,可以手写代码。较难理解的概念和知识点应注意模板的整理,模板的整理要注意规范接地气,变量名函数名简单易懂通用,写明模板函数的作用,在比赛中能快速上手使用,最好是本人理解后所写的。

二.算法分类

分类一:

参考《算法与设计》中的

第1章 数学:

1.1矩阵

1.2整除与剩余 ★

1.3素数和函数 ★

1.4数值计算

1.5其他 ★ (高精度整数现在不用看)

第5章 论题选编  中的

5.2 转换 ★

5.4 计算

第6章 代数

第9章 组合数学 ★

分类二:

参考《知识与入门》中的第三章《数学基础》

1.概率论:

1.1事件与概率 ★

1.2期望与方差 ★

2.代数学

2.1矩阵       ★

2.2行列式   ★

2.3解线性方程组 ★

2.4多项式 ★

2.5复数

2.6群

3.组合学

3.1 排列与组合 ★

3.2 鸽巢原理  ★

3.3 容斥原理  ★

3.4 特殊计数序列

3.5  polya 定理

4.数论概念

4.1整除 ★

4.2不定方程

4.3同余方程和欧拉定理 ★

4.4原根、离散对数和二项同余方程 ★

4.5连分数

 

分类三:

重要的:

a) 欧几里德算法求最大公约数

b) 筛法求素数

c) 康托展开

d) 逆康托展开

e) 同余定理

f) 次方求模

g) 扩展欧几里德算法

f) 求逆元?

g) 同余方程

h) 中国剩余定理

以下了解即可:

a) 积性函数的应用

b) 欧拉定理

c) 费马小定理

d) 威乐逊定理

e) 群论基础

h) Polya定理与计数问题

i) Catalan数

三.题目汇总:

1.XYNUOJ中NYOJ数学分类所有题目

2.HDUOJ上的下列题目 优先做AC数高的题目

kk_想要学习的知识相关推荐

  1. 想要学习Python爬虫的你,真的了解爬虫最基础的知识储备吗?

    想要学习爬虫一定要知道爬虫最基础的相关知识储备,从爬虫是什么?爬虫能干什么?爬虫是怎么运行的?等等一起来学习,希望有给小白提供到学习上的帮助. 爬虫定义.分类和流程 http和https 爬虫定义 网 ...

  2. 想要学习物联网工程方面的知识,我们应该学习些什么基础技术呢?

    最近几年,大学里开展了一门新的专业--物联网工程,它隶属于计算机系,但又与计算机科学与技术有所区别,物联网工程相对计科更强调硬件方面,想要学习物联网工程方面的知识,我们应该学习些什么基础技术呢? 想要 ...

  3. 零基础自学python看什么书-零基础想要学习Python编程 ,不知道看哪本书?

    前言 Python现在非常火,语法简单而且功能强大,很多同学都想学Python!所以小的给各位看官们准备了高价值Python学习视频教程及相关电子版书籍,欢迎前来领取! 想要学习Python编程不知道 ...

  4. 自学前端开发:想要学习成为一名优秀的前端开发者,代码之外需要关注的问题

    不要只知道蒙着头写代码,想要学习成为一名优秀的前端开发者,你还有许多代码之外值得关注的问题. 学好英语 一定要学好英语,虽然英文不好也可以学会前端.但你一定会遇到比英语好的人更多的困难.因为你只能看中 ...

  5. 入门Vue.js要学习哪些知识?

    入门Vue.js首先需要从最基础的知识学起,比如Vue.js的概念.作用.特点等等.只有对Vue.js有一个大致的初步了解,我们才能明白为什么掌握它如此重要.下面一起来具体看看入门Vue.js.js要 ...

  6. 零基础学python用哪本书好-零基础想要学习Python编程 ,不知道看哪本书?

    前言 Python现在非常火,语法简单而且功能强大,很多同学都想学Python!所以小的给各位看官们准备了高价值Python学习视频教程及相关电子版书籍,欢迎前来领取! 想要学习Python编程不知道 ...

  7. 计算机要学什么知识,学电脑要先学什么 学电脑要学习什么知识

    21世纪是信息的时代,电脑已经与我们的生活密不可分了.所以说如果要与时代接轨就要先学习电脑.那么学习电脑要先学习什么呢?下面小编整理了<学电脑要先学什么 学电脑要学习什么知识>,为大家解惑 ...

  8. 初学计算机应该学些什么,学电脑要先学什么 学电脑要学习什么知识

    学电脑要先学什么 学电脑要学习什么知识2017-09-10 11:39:23文/李男 21世纪是信息的时代,电脑已经与我们的生活密不可分了.所以说如果要与时代接轨就要先学习电脑.那么学习电脑要先学习什 ...

  9. 给一些想要学习Java同学的一些建议

    最近在授课过程中,发现了各式各样学生在学习Java时遇到的问题.有同学会问我:"杨老师,Java可以自学吗",这就好像一千个人心中有一千个哈利波特一样,这个答案不绝对也不唯一,Ja ...

最新文章

  1. HBase表结构设计(结构、创建、压缩、分区、命名空间等)
  2. python读写二进制
  3. linux下的各种系统错误errno描述一览
  4. C/C++基础知识点(一)
  5. 安卓python安装库_如何快速在安卓上搭建python3环境
  6. document.body.scrollTop
  7. 安装Windows Server 2008 测试机
  8. Memory Networks
  9. Oracle 常见错误代码处理 1
  10. Smart View的客户化开发
  11. 对计算机硬盘进行格式化时,在安装操作系统之前,如何对硬盘进行分区和格式化(新手必看)...
  12. sql server 2000(迷你sql2000) jdbc驱动
  13. 3文聚焦:RNA m6A甲基化修饰在不同农作物中的研究进展(马铃薯+水稻+玉米+小麦)|易基因
  14. 原型工具Axure:常用效果制作(选中、淘宝网导航、轮播图、toast效果、呼出键盘、省市二级联动、步进器、订单详情案例、中继器)
  15. CDH 5.14.2 server启动报错 Can't DROP FOREIGN KEY `FK_SERVICE_CONFIG_REVISION`; check that it exists
  16. 股票预测和股票分析就用FineBI!
  17. 金山毒霸--血淋淋的教训
  18. CentOS-6.2安装Nvidia显卡驱动
  19. mybatis 多表查询 一对一 一对多查询
  20. 安卓 jni 开发错误 UnsatisfiedLinkError: Native method not found

热门文章

  1. vtkImageCheckerboard生成棋盘格,跟随鼠标移动显示
  2. MSP430学习心得
  3. acwing算法基础课——差分
  4. 一名合格的拼多多运营需要具备哪些技能?
  5. SSLOJ 1165.穹妹的求助
  6. 什么样的导师最坑学生?
  7. 锦江展焕新演绎,憬黎公寓住造理想
  8. 神之意志是什么?他想要做什么?
  9. 查询指定数据库指定表的指定字段的SQL语句
  10. 【医学信息学】研究和统计——队列研究和数据分析