登入帳戶  | 訂單查詢  | 購物車/收銀台(0) | 在線留言板  | 付款方式  | 運費計算  | 聯絡我們  | 幫助中心 |  加入書簽
會員登入   新用戶登記
HOME新書上架暢銷書架好書推介特價區會員書架精選月讀2023年度TOP分類瀏覽雜誌 臺灣用戶
品種:超過100萬種各類書籍/音像和精品,正品正價,放心網購,悭钱省心 服務:香港台灣澳門海外 送貨:速遞郵局服務站

新書上架簡體書 繁體書
暢銷書架簡體書 繁體書
好書推介簡體書 繁體書

11月出版:大陸書 台灣書
十月出版:大陸書 台灣書
九月出版:大陸書 台灣書
八月出版:大陸書 台灣書
七月出版:大陸書 台灣書
六月出版:大陸書 台灣書
五月出版:大陸書 台灣書
四月出版:大陸書 台灣書
三月出版:大陸書 台灣書
二月出版:大陸書 台灣書
一月出版:大陸書 台灣書
12月出版:大陸書 台灣書
11月出版:大陸書 台灣書
十月出版:大陸書 台灣書
九月出版:大陸書 台灣書

『簡體書』算法竞赛入门经典——算法实现

書城自編碼: 3624395
分類:簡體書→大陸圖書→計算機/網絡程序設計
作者: 陈锋
國際書號(ISBN): 9787302571278
出版社: 清华大学出版社
出版日期: 2021-05-01

頁數/字數: /
書度/開本: 16开 釘裝: 平装

售價:HK$ 122.5

我要買

share:

** 我創建的書架 **
未登入.


新書推薦:
不被大风吹倒
《 不被大风吹倒 》

售價:HK$ 65.9
人生解忧:佛学入门四十讲
《 人生解忧:佛学入门四十讲 》

售價:HK$ 107.8
东野圭吾:分身(东野圭吾无法再现的双女主之作 奇绝瑰丽、残忍又温情)
《 东野圭吾:分身(东野圭吾无法再现的双女主之作 奇绝瑰丽、残忍又温情) 》

售價:HK$ 64.9
浪潮将至
《 浪潮将至 》

售價:HK$ 86.9
在虚无时代:与马克斯·韦伯共同思考
《 在虚无时代:与马克斯·韦伯共同思考 》

售價:HK$ 57.2
斯大林格勒:为了正义的事业(格罗斯曼“战争二部曲”的第一部,《生活与命运》前传)
《 斯大林格勒:为了正义的事业(格罗斯曼“战争二部曲”的第一部,《生活与命运》前传) 》

售價:HK$ 184.8
日内交易与波段交易的资金风险管理
《 日内交易与波段交易的资金风险管理 》

售價:HK$ 85.8
自然信息图:一目了然的万物奇观
《 自然信息图:一目了然的万物奇观 》

售價:HK$ 140.8

 

建議一齊購買:

+

HK$ 147.5
《算法竞赛入门经典——训练指南》
+

HK$ 97.4
《算法竞赛入门经典(第2版)》
+

HK$ 230.7
《算法训练营:海量图解+竞赛刷题(进阶篇)》
+

HK$ 80.7
《算法竞赛入门到进阶 ACM-ICPC、CCPC、中学NOI竞》
+

HK$ 99.1
《算法竞赛入门经典——习题与解答》
+

HK$ 127.7
《算法设计与分析基础(第3版)》
編輯推薦:
《算法竞赛入门经典——算法实现》是累计畅销22万册的信息学奥赛红宝书——《算法竞赛入门经典》的配套算法代码实现书。
这是一本你可以在日常练习、赛前的高强度练习以及竞赛现场,快速查阅和调用代码,助你通关夺魁的书。
本书全面覆盖ACM/ICPC/NOI/NOIP等信息学竞赛的经典题型和算法要点,239道真题,240余套代码,所有算法都经过多次优化、打磨,在历届竞赛中被广泛采用,大放异彩。借助这些代码模板,你可以大大减轻因反复琢磨代码实现细节而导致调试时间不够用的压力。
这不是一本入门图书。想看懂它,需要你具备一定的算法基础。这本书,如果你能独立完成大部分,你的算法能力完全能达到现今IT公司内程序员的中上水准。
《算法竞赛入门经典——算法实现》——ACM/ICPC/NOI高效备考 完美通关案头工具书!
內容簡介:
《算法竞赛入门经典——算法实现》精选《算法竞赛入门经典(第2版)》和《算法竞赛入门经典——训练指南(升级版)》中的经典题目,按算法要点和竞赛考点重新进行分拆和归类,提供了240余套简洁、高效、规范的完整代码模板。此外,也加入了一些虽然未在两本书中出现,但实际上对初学者入门非常重要的题目代码。借助于这些模板,读者在练习环节和比赛时,可大大减轻因来回琢磨代码实现细节而导致调试时间大幅增加的压力。
《算法竞赛入门经典——算法实现》共分7章,第1章介绍C 编程基础与STL,第2章介绍算法设计与优化,第3章介绍数学相关算法,第4章介绍数据结构,第5章介绍字符串,第6章介绍计算几何,第7章介绍图论。
《算法竞赛入门经典——算法实现》题目覆盖了ACM/ICPC/NOI/NOIP等算法竞赛的大多数经典题型和细分算法要点,内容全面,信息量大,非常适合选手在练习环节和比赛时参考使用。
關於作者:
陈锋,任职于厦门宇道信隆信息科技有限公司,担任技术总监职务,专注于人工智能以及算法技术在金融科技领域的应用。同时担任四川大学ACM/ICPC算法竞赛集训队特邀指导老师,榕阳编程NOI、NOIP指导教练。所带学员多次获得ICPC金/银牌,进入NOI省队等。曾出版《算法竞赛入门经典——训练指南》《算法竞赛入门经典——习题与解答》《算法竞赛入门经典——算法实现》等畅销书。
目錄
第1章 C 编程基础与STL 1
第2章 算法设计与优化 20
2.1 算法优化策略 20
2.2 贪心算法 28
2.3 搜索算法 34
2.4 动态规划算法 60
第3章 数学 91
3.1 数论 91
3.2 组合计数 113
3.3 概率与期望 127
3.4 组合游戏 134
3.5 置换 136
3.6 矩阵和线性方程组 139
3.7 快速傅里叶变换(FFT) 146
3.8 数值方法 156
3.9 数学专题 159
第4章 数据结构 165
4.1 基础数据结构 165
4.2 区间信息维护 188
4.3 排序二叉树 202
4.4 树的经典问题与方法 212
4.5 动态树与LCT 229
4.6 离线算法 237
4.7 kd-Tree 249
4.8 可持久化数据结构 254
4.9 嵌套和分块数据结构 263
第5章 字符串 275
5.1 Trie、KMP以及AC自动机 275
5.2 后缀数组、Hash和Manacher 282
5.3 后缀自动机 287
第6章 计算几何 298
6.1 二维几何基础 298
6.2 与圆有关的计算问题 302
6.3 二维几何常用算法 311
6.4 三维几何基础 328
6.5 几何专题算法 342
第7章 图论 362
7.1 深度优先遍历 362
7.2 短路问题 374
7.3 生成树相关问题 395
7.4 二分图匹配 404
7.5 网络流问题 420
內容試閱
近三年,笔者在工作及创作之余,一直在参与大学生ACM/ICPC以及中学生NOI系列竞赛的培训工作,在此期间认识了很多朋友,大家一起交流算法学习及比赛趣事,互相促进,甚是开心。
很多算法初学者,甚至一些算法高手,都跟我反馈,弄明白算法的基本原理之后,迫切地希望能有一本介绍相关算法代码实现的图书,以方便大家在练习环节和比赛时作为参考。对于大学生来说,因为ICPC竞赛允许自带资料,因此他们对这样的算法代码实现书有着更迫切的期望,通过调用这些简洁、规范的代码实现,可以大大减轻他们比赛时因来回琢磨代码实现细节而导致调试时间大幅增加的压力。
而在省选以及NOI赛场上也出现过因为没有掌握较好的模板代码,导致考场上实现时间大幅度增加,终与奖牌失之交臂的憾事。许多中学生在学习计算几何时并不知道刘汝佳老师在《算法竞赛入门经典(第2版)》《算法竞赛入门经典——训练指南》中提供了简洁、完整的模板代码,这也是本书创作的一个动机。
本书内容
本书不介绍具体的算法理论知识,而是精选《算法竞赛入门经典(第2版)》和《算法竞赛入门经典——训练指南》中的典型题目,按算法要点和竞赛考点重新进行分拆和归类,并提供240余套简洁、高效、规范、完整的实现代码模板。此外,也加入了一些虽然未在两本书中出现,但实际上对初学者入门非常重要的题目代码。
全书共分为7章,各章的具体内容如下。
第1章介绍C 编程基础与STL中的常用算法实现,共计15道真题的算法实现。
第2章介绍算法设计与优化,包含算法优化策略、贪心算法、搜索算法、动态规划算法等内容,共计56道真题的算法实现。
第3章介绍数学相关算法,包含数论、组合计数、概率与期望、组合游戏、置换、矩阵和线性方程组、快速傅里叶变换(FFT)、数值方法、数学专题等内容,共计46道真题的算法实现。
第4章介绍数据结构相关算法,包含基础数据结构、区间信息维护、排序二叉树、树的经典问题与方法、动态树与LCT、离线算法、kd-tree、可持久化数据结构、嵌套和分块数据结构等内容,共计52道真题的算法实现。
第5章介绍字符串相关算法,包含Trie与KMP以及AC自动机、后缀数组、后缀自动机等内容,共计13道真题的算法实现。
第6章介绍计算几何相关算法,包含二维几何基础、圆有关的计算问题、二维几何常用算法、三维几何基础、几何专题算法等内容,共计21道真题的算法实现。
第7章介绍图论相关算法,共包含深度优先遍历、短路问题、生成树相关问题、二分图匹配、网络流问题,共计36道真题的算法实现。
本书只关注近些年在正式比赛(包括ACM/ICPC区域赛、NOIP以及NOI这样的全国性比赛)中常见的算法实现。书中所有真题都极具典型性,每道题在求解过程中都经过了严密、仔细的剖析和反复的优化,终择选较优的算法代码进行实现。
系列书学习说明
至此,“算法艺术与信息学竞赛”系列已包含如下4本书。
《算法竞赛入门经典(第2版)》(以下简称《入门经典》),是系列中的核心算法理论书。如果你是个新手,刚刚步入信息学奥赛大阵营,欢迎你学习此书,它将系统地讲解C/C 语言基础知识,数据结构知识,以及信息学奥赛和ACM/ICPC中的常考必考算法知识点、技巧和剖析。
《算法竞赛入门经典——训练指南》是《入门经典》的姊妹篇,主要针对更多的算法竞赛题型进行横向拓展,以及更广范围内的讲解和训练,“覆盖面广,点到为止,注重代码”是本书的特点。
《算法竞赛入门经典——习题与解答》是《入门经典》的配套习题详解,将其中的多数练习题,尤其是限于篇幅无法展开的练习题,进行了细致的解析,使其更简单、易学,快速提升读者的算法思维能力。更适合初学者配合着《入门经典》一起学习。
《算法竞赛入门经典——算法实现》是一本高效备考工具书,择选近些年来信息学奥赛中、经典的比赛真题,给出优化过的各类代码实现模板,通过它可快速备考各类竞赛。
读者可以根据自己的学习情况和备战目标,分时分段选择不同的图书,以效果地发挥“1 1>2”的事半功倍的效果。
感谢广大读者朋友们,你们的信任和支持是我在算法道路上能持续前行的动力。
祝大家读书快乐!

第1章 C 编程基础与STL
STL是C 标准模板库(Standard Template Library)的简称,使用得当能够省去不少代码篇幅。
例1-1 【输入输出函数】TeX中的引号(Tex Quotes, UVa 272)
在TeX中,左双引号是“``”,右双引号是“‘’”。输入一篇包含双引号的文章,你的任务是把它转换成TeX的格式。
【样例输入】

”To be or not to be,” quoth the Bard, ”that
is the question”.

【样例输出】

``To be or not to be, ‘’ quoth the Bard, ``that
is the question‘’.

【代码实现】

// 陈锋
#include
int main() {
int c, first = 1;
char s[2][4] = {”‘’”, ”``”};
while ((c = getchar()) != EOF) {
if (c == ‘”’)
printf(”%s”, s[first]), first ^= 1;
else
printf(”%c”, c);
}
return 0;
}
/*
算法分析请参考:《算法竞赛入门经典(第2版)》例题3-1
注意:本题是如何使用first变量及其xor运算来控制是否为首次输出的
*/
例1-2 【计数排序与IO优化】年龄排序(Age Sort, UVa 11462)
给定n(0<n≤2 000 000)个居民的年龄(都是1~100的整数),把它们按照从小到大的顺序输出。
【代码实现】

// 陈锋
#include

using namespace std;
#define _for(i, a, b) for (int i = (a); i < (b); i)
typedef long long LL;
const int MAXN = 100;
int main() {
int n, a, cnt[MAXN 4];
while (scanf(”%d”, &n) == 1 && n) {
fill_n(cnt, MAXN 4, 0);
_for(i, 0, n) scanf(”%d”, &a), cnt[a];
_for(i, 0, MAXN) _for(j, 0, cnt[i])
printf(”%d%s”, i, (i == MAXN - 1 && j == cnt[i] - 1) ? ”” : ” ”);
puts(””);
}
}
/*
算法分析请参考:《算法竞赛入门经典—训练指南》升级版1.3节例题17
注意:本题中的fill_n函数比memset更方便,性能更好
*/

如果还要精益求精,可以优化输入输出,进一步降低运行时间,程序如下。

// 刘汝佳
#include
#include
#include // 为了使用isdigit宏

inline int readint() {
char c = getchar();
while(!isdigit(c)) c = getchar();

int x = 0;
while(isdigit(c)) {
x = x * 10 c - ‘0’;
c = getchar();
}
return x;
}

int buf[10]; // 声明为全局变量可以减小开销
inline void writeint(int i) {
int p = 0;if(i < 0) putchar(‘-’), i = -i;
if(i == 0) p ; // 特殊情况:i等于0时需要输出0,而不是什么也不输出
else while(i) {
buf[p ] = i % 10,i /= 10;
}
for(int j = p - 1; j >= 0; j--) putchar(‘0’ buf[j]); // 逆序输出
}

int main() {
int n, x, c[101];
while(n = readint()) {
memset(c, 0, sizeof(c));
for(int i = 0; i < n; i ) c[readint()] ;
int first = 1;
for(int i = 1; i <= 100; i )
for(int j = 0; j < c[i]; j ) {
if(!first) putchar(‘ ’);
first = 0;
writeint(i);
}
putchar(‘\’);
}
return 0;
}
例1-3 【字符函数;常量数组】回文词(Palindromes, UVa 401)
输入一个字符串,判断它是否为回文串以及镜像串。输入字符串保证不含数字0。所谓回文串,就是反转以后和原串相同,如abba和madam。所谓镜像串,就是左右镜像之后和原串相同,如2S和3AIAE。注意,并不是每个字符在镜像之后都能得到一个合法字符。在本题中,每个字符的镜像如图1-1所示(空白项表示该字符镜像后不能得到一个合法字符)。
图1-1 镜像字符
输入的每行包含一个字符串(保证只有上述字符,不含空白字符),判断它是否为回文串和镜像串(共4种组合)。每组数据之后输出一个空行。
【样例输入】

NOTAPALINDROME
ISAPALINILAPASI
2A3MEAS
ATOYOTA

【样例输出】

NOTAPALINDROME -- is not a palindrome.

ISAPALINILAPASI -- is a regular palindrome.

2A3MEAS -- is a mirrored string.

ATOYOTA -- is a mirrored palindrome.

【代码实现】

// 刘汝佳
#include
using namespace std;
string rev = ”A 3 HIL JM O 2TUVWXY51SE Z 8 ”,
msg[] = {
”not a palindrome”,
”a regular palindrome”,
”a mirrored string”,
”a mirrored palindrome”
};

char r(char c) {
if (isalpha(c)) return rev[c - ‘A’];
return rev[c - ‘0’ 25];
}

int main() {
char s[32];
while (scanf(”%s”, s) == 1) {
int len = strlen(s), p = 1, m = 1;
for (int i = 0; i < (len 1) / 2; i ) {
if (s[i] != s[len - 1 - i]) p = 0; // 不是回文串
if (r(s[i]) != s[len - 1 - i]) m = 0; // 不是镜像串
}
printf(”%s -- is %s.\”, s, msg[m * 2 p]);
}
return 0;
}
/*
算法分析请参考:《算法竞赛入门经典(第2版)》例题3-3
注意:本题中输入字符串应该使用scanf而不是gets,以避免出现读入空行的问题
*/
例1-4 【字典序】环状序列(Circular Sequence, ACM/ICPC Seoul 2004, UVa 1584)
长度为n的环状串有n种表示方法,分别为从某个位置开始顺时针得到的字母序列。例如,图1-2所示的环状串有10种表示方法:CGAGTCAGCT、GAGTCAGCTC、AGTCAGCTCG等。在这些表示法中,字典序小的称为“小表示”。
输入一个长度为n(n≤100)的环状DNA串(只包含A、C、G、T这4种字符)。输入样式对应该串所有表示方法中的一种表示法,你的任务是输出该环状串的小表示。例如, CTCC的小表示是CCCT,CGAGTCAGCT的小表示为AGCTCGAGTC。
【代码实现】

// 刘汝佳
#include
using namespace std;
// 环状串s的表示法p是否比表示法q的字典序小
int less_than(const string& s, int p, int q) {
int n = s.length();
for (int i = 0; i < n; i ) {
char cp = s[(p i) % n], cq = s[(q i) % n];
if (cp != cq) return cp < cq;
}
return 0; // 相等
}

int main() {
ios::sync_with_stdio(false), cin.tie(0);
int T;
string s;
cin >> T;
while (T--) {
cin >> s;
int ans = 0, n = s.length();
for (int i = 1; i < n; i )
if (less_than(s, i, ans)) ans = i;
for (int i = 0; i < n; i ) cout << (s[(ans i) % n]);
cout << endl;
}
return 0;
}
/*
算法分析请参考:《算法竞赛入门经典(第2版)》例题3-6
注意:main()函数的行可以加速STL的IO操作,但不能再和stdio中的printf混用
同类问题:Periodic Strings, UVa 455
*/

 

 

書城介紹  | 合作申請 | 索要書目  | 新手入門 | 聯絡方式  | 幫助中心 | 找書說明  | 送貨方式 | 付款方式 香港用户  | 台灣用户 | 海外用户
megBook.com.hk
Copyright © 2013 - 2024 (香港)大書城有限公司  All Rights Reserved.