-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsearch.xml
557 lines (514 loc) · 153 KB
/
search.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>机试第11章</title>
<url>/2023/03/08/%E6%9C%BA%E8%AF%95%E7%AC%AC11%E7%AB%A0/</url>
<content><![CDATA[<h2 id="并查集"><a href="#并查集" class="headerlink" title="并查集"></a>并查集</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="type">const</span> <span class="type">int</span> MAXN = <span class="number">1000</span>;</span><br><span class="line"><span class="type">int</span> fa[MAXN], h[MAXN];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">init</span><span class="params">(<span class="type">int</span> n)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < n; ++i)</span><br><span class="line"> fa[i] = i, h[i] = <span class="number">0</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">find</span><span class="params">(<span class="type">int</span> x)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">if</span> (x != fa[x])</span><br><span class="line"> fa[x] = <span class="built_in">find</span>(fa[x]);</span><br><span class="line"> <span class="keyword">return</span> fa[x];</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">uni</span><span class="params">(<span class="type">int</span> x, <span class="type">int</span> y)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> x = <span class="built_in">find</span>(x), y = <span class="built_in">find</span>(y);</span><br><span class="line"> <span class="keyword">if</span> (x != y)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span> (h[x] < h[y])</span><br><span class="line"> fa[x] = y;</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span> (h[x] > h[y])</span><br><span class="line"> fa[y] = x;</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> {</span><br><span class="line"> h[x]++;</span><br><span class="line"> fa[y] = x;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="判断无向图是否连通"><a href="#判断无向图是否连通" class="headerlink" title="判断无向图是否连通"></a>判断无向图是否连通</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="function"><span class="type">bool</span> <span class="title">isConnected</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="type">int</span> cnt = <span class="number">0</span>; <span class="comment">// 连通分量个数</span></span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i < n; ++i)</span><br><span class="line"> <span class="keyword">if</span> (<span class="built_in">find</span>(i) == i)</span><br><span class="line"> cnt++;</span><br><span class="line"> <span class="keyword">return</span> cnt == <span class="number">1</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="判断有向图是否为树"><a href="#判断有向图是否为树" class="headerlink" title="判断有向图是否为树"></a>判断有向图是否为树</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="type">int</span> degree[MAXN]; <span class="comment">// 入度,在union时改变</span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">init</span><span class="params">(<span class="type">int</span> n)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < n; ++i)</span><br><span class="line"> degree[i] = <span class="number">0</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">isTree</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="type">bool</span> flag = <span class="literal">true</span>;</span><br><span class="line"> <span class="type">int</span> cnt = <span class="number">0</span>;</span><br><span class="line"> <span class="type">int</span> root = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < MAXN; ++i)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span> (fa[i] == i)</span><br><span class="line"> cnt++;</span><br><span class="line"> <span class="keyword">if</span> (degree[i] == <span class="number">0</span>)</span><br><span class="line"> root++;</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span> (degree[i] > <span class="number">1</span>)</span><br><span class="line"> {</span><br><span class="line"> flag = <span class="literal">false</span>;</span><br><span class="line"> <span class="keyword">break</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span> (cnt != <span class="number">1</span> || root != <span class="number">1</span>)</span><br><span class="line"> flag = <span class="literal">false</span>;</span><br><span class="line"> <span class="keyword">if</span> (cnt == <span class="number">0</span> || root == <span class="number">0</span>)</span><br><span class="line"> flag = <span class="literal">true</span>;</span><br><span class="line"> <span class="keyword">return</span> flag;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="最小生成树Kruskal算法"><a href="#最小生成树Kruskal算法" class="headerlink" title="最小生成树Kruskal算法"></a>最小生成树Kruskal算法</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="keyword">struct</span> <span class="title class_">edge</span></span><br><span class="line">{</span><br><span class="line"> <span class="type">int</span> s, e, w;</span><br><span class="line"> <span class="type">bool</span> <span class="keyword">operator</span><(<span class="type">const</span> edge &e) <span class="type">const</span></span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">return</span> w < e.w;</span><br><span class="line"> }</span><br><span class="line">};</span><br><span class="line">edge edges[MAXN * MAXN];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">kruskal</span><span class="params">(<span class="type">int</span> n, <span class="type">int</span> len)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="built_in">init</span>(n); <span class="comment">// 初始化并查集</span></span><br><span class="line"> <span class="built_in">sort</span>(edges, edges + len);</span><br><span class="line"> <span class="type">int</span> res = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < len; ++i)</span><br><span class="line"> {</span><br><span class="line"> edge cur = edges[i];</span><br><span class="line"> <span class="keyword">if</span> (<span class="built_in">find</span>(cur.s) != <span class="built_in">find</span>(cur.e))</span><br><span class="line"> {</span><br><span class="line"> <span class="built_in">uni</span>(cur.s, cur.e);</span><br><span class="line"> res += cur.w;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> res;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="最短路"><a href="#最短路" class="headerlink" title="最短路"></a>最短路</h2><h3 id="单源最短路Dijkstra算法"><a href="#单源最短路Dijkstra算法" class="headerlink" title="单源最短路Dijkstra算法"></a>单源最短路Dijkstra算法</h3><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string"><bits/stdc++.h></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="type">const</span> <span class="type">int</span> MAXN = <span class="number">1000</span>;</span><br><span class="line"><span class="type">const</span> <span class="type">int</span> INF = INT_MAX;</span><br><span class="line"></span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">edge</span></span><br><span class="line">{</span><br><span class="line"> <span class="type">int</span> to, length;</span><br><span class="line"> <span class="built_in">edge</span>(<span class="type">int</span> to, <span class="type">int</span> length) : <span class="built_in">to</span>(to), <span class="built_in">length</span>(length) {}</span><br><span class="line">};</span><br><span class="line"></span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">point</span></span><br><span class="line">{</span><br><span class="line"> <span class="type">int</span> num, dis;</span><br><span class="line"> <span class="built_in">point</span>(<span class="type">int</span> num, <span class="type">int</span> dis) : <span class="built_in">num</span>(num), <span class="built_in">dis</span>(dis) {}</span><br><span class="line"> <span class="type">bool</span> <span class="keyword">operator</span><(<span class="type">const</span> point &x) <span class="type">const</span></span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">return</span> dis > x.dis;</span><br><span class="line"> }</span><br><span class="line">};</span><br><span class="line"></span><br><span class="line">vector<edge> graph[MAXN];</span><br><span class="line"><span class="type">int</span> dis[MAXN];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">dijkstra</span><span class="params">(<span class="type">int</span> s)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> priority_queue<point> q;</span><br><span class="line"> q.<span class="built_in">push</span>({s, <span class="number">0</span>});</span><br><span class="line"> <span class="keyword">while</span> (!q.<span class="built_in">empty</span>())</span><br><span class="line"> {</span><br><span class="line"> <span class="type">int</span> u = q.<span class="built_in">top</span>().num;</span><br><span class="line"> q.<span class="built_in">pop</span>();</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < graph[u].<span class="built_in">size</span>(); ++i)</span><br><span class="line"> {</span><br><span class="line"> <span class="type">int</span> v = graph[u][i].to, d = graph[u][i].length;</span><br><span class="line"> <span class="keyword">if</span> (dis[v] > dis[u] + d)</span><br><span class="line"> {</span><br><span class="line"> dis[v] = dis[u] + d;</span><br><span class="line"> q.<span class="built_in">push</span>({v, dis[v]});</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="type">int</span> n, m;</span><br><span class="line"> cin >> n >> m;</span><br><span class="line"> <span class="built_in">memset</span>(graph, <span class="number">0</span>, <span class="built_in">sizeof</span>(graph));</span><br><span class="line"> <span class="built_in">fill</span>(dis, dis + n, INF);</span><br><span class="line"> <span class="keyword">while</span> (m--)</span><br><span class="line"> {</span><br><span class="line"> <span class="type">int</span> from, to, length;</span><br><span class="line"> cin >> from >> to >> length;</span><br><span class="line"> graph[from].<span class="built_in">push_back</span>({to, length});</span><br><span class="line"> graph[to].<span class="built_in">push_back</span>({from, length});</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="type">int</span> s, t;</span><br><span class="line"> cin >> s >> t;</span><br><span class="line"> <span class="keyword">if</span> (dis[t] == INF)</span><br><span class="line"> dis[t] = <span class="number">-1</span>;</span><br><span class="line"> cout << dis[t] << <span class="string">"\n"</span>;</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h3 id="多源最短路Floyd算法"><a href="#多源最短路Floyd算法" class="headerlink" title="多源最短路Floyd算法"></a>多源最短路Floyd算法</h3><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string"><bits/stdc++.h></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="type">const</span> <span class="type">int</span> INF = INT_MAX;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="type">int</span> n, target;</span><br><span class="line"> cin >> n >> target;</span><br><span class="line"> vector<vector<<span class="type">int</span>>> <span class="built_in">g</span>(n + <span class="number">1</span>, <span class="built_in">vector</span><<span class="type">int</span>>(n + <span class="number">1</span>, INF));</span><br><span class="line"> vector<vector<<span class="type">int</span>>> <span class="built_in">next</span>(n + <span class="number">1</span>, <span class="built_in">vector</span><<span class="type">int</span>>(n + <span class="number">1</span>));</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < n; ++i)</span><br><span class="line"> {</span><br><span class="line"> g[i][i] = <span class="number">0</span>;</span><br><span class="line"> next[i][i] = i;</span><br><span class="line"> }</span><br><span class="line"> <span class="type">int</span> src, dst, dis;</span><br><span class="line"> <span class="keyword">while</span> (cin >> src >> dst >> dis)</span><br><span class="line"> {</span><br><span class="line"> g[src][dst] = dis;</span><br><span class="line"> next[src][dst] = dst;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> k = <span class="number">0</span>; k < n; ++k)</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < n; ++i)</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j < n; ++j)</span><br><span class="line"> <span class="keyword">if</span> (g[i][k] == INF || g[k][j] == INF)</span><br><span class="line"> <span class="keyword">continue</span>;</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span> (g[i][k] + g[k][j] < g[i][j])</span><br><span class="line"> {</span><br><span class="line"> g[i][j] = g[i][k] + g[k][j];</span><br><span class="line"> next[i][j] = k;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="type">int</span> cur = <span class="number">1</span>;</span><br><span class="line"> cout << cur;</span><br><span class="line"> <span class="keyword">while</span>(cur!=target)</span><br><span class="line"> {</span><br><span class="line"> cur = next[cur][target];</span><br><span class="line"> cout << <span class="string">" "</span> << cur;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="拓扑排序"><a href="#拓扑排序" class="headerlink" title="拓扑排序"></a>拓扑排序</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="type">const</span> <span class="type">int</span> MAXN = <span class="number">500</span>;</span><br><span class="line">vector<<span class="type">int</span>> graph[MAXN];</span><br><span class="line"><span class="type">int</span> inDegree[MAXN];</span><br><span class="line"></span><br><span class="line"><span class="function">vector<<span class="type">int</span>> <span class="title">TopologicalSort</span><span class="params">(<span class="type">int</span> n)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> vector<<span class="type">int</span>> res;</span><br><span class="line"> priority_queue<<span class="type">int</span>, vector<<span class="type">int</span>>, greater<<span class="type">int</span>>> q;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i <= n; ++i)</span><br><span class="line"> <span class="keyword">if</span> (inDegree[i] == <span class="number">0</span>)</span><br><span class="line"> q.<span class="built_in">push</span>(i);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">while</span> (!q.<span class="built_in">empty</span>())</span><br><span class="line"> {</span><br><span class="line"> <span class="type">int</span> u = q.<span class="built_in">top</span>();</span><br><span class="line"> q.<span class="built_in">pop</span>();</span><br><span class="line"> res.<span class="built_in">push_back</span>(u);</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < graph[u].<span class="built_in">size</span>(); ++i)</span><br><span class="line"> {</span><br><span class="line"> <span class="type">int</span> v = graph[u][i];</span><br><span class="line"> inDegree[v]--;</span><br><span class="line"> <span class="keyword">if</span> (inDegree[v] == <span class="number">0</span>)</span><br><span class="line"> q.<span class="built_in">push</span>(v);</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> res;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="关键路径"><a href="#关键路径" class="headerlink" title="关键路径"></a>关键路径</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="type">const</span> <span class="type">int</span> MAXN = <span class="number">1e5</span>;</span><br><span class="line"><span class="type">const</span> <span class="type">int</span> INF = INT_MAX;</span><br><span class="line">vector<<span class="type">int</span>> graph[MAXN];</span><br><span class="line"><span class="type">int</span> inDegree[MAXN];</span><br><span class="line"><span class="type">int</span> earliest[MAXN], latest[MAXN], time[MAXN];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">CriticalPath</span><span class="params">(<span class="type">int</span> n)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> vector<<span class="type">int</span>> topology;</span><br><span class="line"> queue<<span class="type">int</span>> q;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i <= n; ++i)</span><br><span class="line"> <span class="keyword">if</span> (inDegree[i] == <span class="number">0</span>)</span><br><span class="line"> q.<span class="built_in">push</span>(i);</span><br><span class="line"></span><br><span class="line"> <span class="type">int</span> total = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span> (!q.<span class="built_in">empty</span>())</span><br><span class="line"> {</span><br><span class="line"> <span class="type">int</span> u = q.<span class="built_in">front</span>();</span><br><span class="line"> q.<span class="built_in">pop</span>();</span><br><span class="line"> topology.<span class="built_in">push_back</span>(u);</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < graph[u].<span class="built_in">size</span>(); ++i)</span><br><span class="line"> {</span><br><span class="line"> <span class="type">int</span> v = graph[u][i];</span><br><span class="line"> earliest[v] = <span class="built_in">max</span>(earliest[v], earliest[u] + time[u]);</span><br><span class="line"> inDegree[v]--;</span><br><span class="line"> <span class="keyword">if</span> (inDegree[v] == <span class="number">0</span>)</span><br><span class="line"> {</span><br><span class="line"> q.<span class="built_in">push</span>(v);</span><br><span class="line"> total = <span class="built_in">max</span>(total, earliest[v] + time[v]);</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = topology.<span class="built_in">size</span>() - <span class="number">1</span>; i >= <span class="number">0</span>; --i)</span><br><span class="line"> {</span><br><span class="line"> <span class="type">int</span> u = topology[i];</span><br><span class="line"> <span class="keyword">if</span> (graph[u].<span class="built_in">size</span>() == <span class="number">0</span>) <span class="comment">// 无后继的节点</span></span><br><span class="line"> latest[u] = total - time[u];</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> latest[u] = INF;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j < graph[u].<span class="built_in">size</span>(); ++j)</span><br><span class="line"> {</span><br><span class="line"> <span class="type">int</span> v = graph[u][j];</span><br><span class="line"> latest[u] = <span class="built_in">min</span>(latest[u], latest[v] - time[u]);</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> total;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
]]></content>
<tags>
<tag>机试</tag>
<tag>图论</tag>
</tags>
</entry>
<entry>
<title>cs专业单词</title>
<url>/2023/03/12/cs%E4%B8%93%E4%B8%9A%E5%8D%95%E8%AF%8D/</url>
<content><![CDATA[<h3 id="ChatGPT-Prompt"><a href="#ChatGPT-Prompt" class="headerlink" title="ChatGPT Prompt"></a>ChatGPT Prompt</h3><p>将输入的文本逐行按单词,词性,释义,发音分列,输出为markdown格式的表格,忽略小括号及其中的内容</p>
<h3 id="单词"><a href="#单词" class="headerlink" title="单词"></a>单词</h3><p>prompt,n.&,v.提示 [prɑmpt]</p>
<p>execute,v.实行,实施 [ˈɛksɪˌkjut]</p>
<p>argument,n.变元,自变量 [ˈɑrgjumənt]</p>
<p>macro,n.宏,宏功能,宏指令 [ˈmækroʊ]</p>
<p>restore,vt.恢复,复原 [rɪˈstɔr, -ˈstor]</p>
<p>decimal,n.&,a.十进制 [ˈdɛsəməl]</p>
<p>attribute,n.属性,标志,表征 [əˈtrɪbjut]</p>
<p>scope,n.范围,显示器 [skoʊp]</p>
<p>toggle,n.&,v.触发器;系紧 [ˈtɑgl]</p>
<p>reflow,v.&,n.回流,逆流 [ˈrifloʊ]</p>
<p>assign,vt.赋值,指定,分派 [əˈsaɪn]</p>
<p>abbreviate,vt.缩写,省略 [əˈbriːvɪeɪt]</p>
<p>delimiter,n.定界符,分界符 [dɪ’lɪmɪtə]</p>
<p>omit,vt.省略,删去,遗漏(ao,mai,te) [oˈmɪt</p>
<p>coprocessor,n.协同处理器(kou,pa,sei,se) [‘koʊˌproʊsesə]</p>
<p>overlay,v.覆盖,重叠(ou,wei,chi) [ˌoʊvərˈleɪ]</p>
<p>recall,vt.撤消,复活,检索(rui,kao,l) [rɪˈkɔl]</p>
<p>wildcard,n.通配符 [‘waɪldkɑd]</p>
<p>spill,v.漏出,溢出,漏失 [spɪl]</p>
<p>even,a.&,ad.偶数的 [ˈivən]</p>
<p>syntax,n.语法,文法,句法 [ˈsɪnˌtæks]</p>
<p>utility,n.&,a.实用程序;实用性,(,yo,u,t,i,li,t,i) [juˈtɪləti]</p>
<p>eject,n.弹出 [ɪ’dʒekt]</p>
<p>term,n.项,条款,术语 [tɜrm]</p>
<p>invoke,vt.调用,请求,,(in,wou,te) [ɪnˈvoʊk]</p>
<p>designated,a.指定的,特指的,,(da,si,nei,te,d) [‘dezɪɡneɪtɪd]</p>
<p>pertain,vi.附属,属于,关于,,(p,tin) [pərˈteɪn]</p>
<p>session,n.对话,通话,,(se,sheng) [ˈsɛʃən]</p>
<p>assembly,n.汇编,安装,装配,,(e,san,bo,li) [əˈsɛmbli]</p>
<p>retrieve,v.检索,,(e,chui,wu) [rɪˈtriv]</p>
<p>subtotal,n.&,v.小计,求部分和,,(sa,bo,tei,lou) [ˈsʌbtoʊtl]</p>
<p>partition,v.划分,分区,部分 [pɑrˈtɪʃn]</p>
<p>hexadecimal,a.十六进制的 [ˌhɛksəˈdɛsəməl]</p>
<p>nest,v.嵌套,后进先出 [nɛst]</p>
<p>modifier,n.修改量,变址数 [ˈmɑdɪfaɪə(r)]</p>
<p>interrupt,v.&,n.中断 [ˌɪntəˈrʌpt]</p>
<p>serial,a.串行的,串联的 [ˈsɪriəl]</p>
<p>corrupt,v.&,a.恶化;有毛病的 [kəˈrʌpt]</p>
<p>critical,a.&,n.临界的;临界值 [ˈkrɪtɪkəl]</p>
<table>
<thead>
<tr>
<th>单词</th>
<th>词性</th>
<th>释义</th>
<th>发音</th>
</tr>
</thead>
<tbody><tr>
<td>prompt</td>
<td>n.&,v.</td>
<td>提示</td>
<td>[prɑmpt]</td>
</tr>
<tr>
<td>execute</td>
<td>v.</td>
<td>实行,实施</td>
<td>[ˈɛksɪˌkjut]</td>
</tr>
<tr>
<td>argument</td>
<td>n.</td>
<td>变元,自变量</td>
<td>[ˈɑrgjumənt]</td>
</tr>
<tr>
<td>macro</td>
<td>n.</td>
<td>宏,宏功能,宏指令</td>
<td>[ˈmækroʊ]</td>
</tr>
<tr>
<td>restore</td>
<td>vt.</td>
<td>恢复,复原</td>
<td>[rɪˈstɔr, -ˈstor]</td>
</tr>
<tr>
<td>decimal</td>
<td>n.&,a.</td>
<td>十进制</td>
<td>[ˈdɛsəməl]</td>
</tr>
<tr>
<td>attribute</td>
<td>n.</td>
<td>属性,标志,表征</td>
<td>[əˈtrɪbjut]</td>
</tr>
<tr>
<td>scope</td>
<td>n.</td>
<td>范围,显示器</td>
<td>[skoʊp]</td>
</tr>
<tr>
<td>toggle</td>
<td>n.&,v.</td>
<td>触发器;系紧</td>
<td>[ˈtɑgl]</td>
</tr>
<tr>
<td>reflow</td>
<td>v.&,n.</td>
<td>回流,逆流</td>
<td>[ˈrifloʊ]</td>
</tr>
<tr>
<td>assign</td>
<td>vt.</td>
<td>赋值,指定,分派</td>
<td>[əˈsaɪn]</td>
</tr>
<tr>
<td>abbreviate</td>
<td>vt.</td>
<td>缩写,省略</td>
<td>[əˈbriːvɪeɪt]</td>
</tr>
<tr>
<td>delimiter</td>
<td>n.</td>
<td>定界符,分界符</td>
<td>[dɪ’lɪmɪtə]</td>
</tr>
<tr>
<td>omit</td>
<td>vt.</td>
<td>省略,删去,遗漏</td>
<td>[oˈmɪt]</td>
</tr>
<tr>
<td>coprocessor</td>
<td>n.</td>
<td>协同处理器</td>
<td>[‘koʊˌproʊsesə]</td>
</tr>
<tr>
<td>overlay</td>
<td>v.</td>
<td>覆盖,重叠</td>
<td>[ˌoʊvərˈleɪ]</td>
</tr>
<tr>
<td>recall</td>
<td>vt.</td>
<td>撤消,复活,检索</td>
<td>[rɪˈkɔl]</td>
</tr>
<tr>
<td>wildcard</td>
<td>n.</td>
<td>通配符</td>
<td>[‘waɪldkɑd]</td>
</tr>
<tr>
<td>spill</td>
<td>v.</td>
<td>漏出,溢出,漏失</td>
<td>[spɪl]</td>
</tr>
<tr>
<td>even</td>
<td>a.&,ad.</td>
<td>偶数的</td>
<td>[ˈivən]</td>
</tr>
<tr>
<td>syntax</td>
<td>n.</td>
<td>语法,文法,句法</td>
<td>[ˈsɪnˌtæks]</td>
</tr>
<tr>
<td>utility</td>
<td>n.&,a.</td>
<td>实用程序;实用性</td>
<td>[juˈtɪləti]</td>
</tr>
<tr>
<td>eject</td>
<td>n.</td>
<td>弹出</td>
<td>[ɪ’dʒekt]</td>
</tr>
<tr>
<td>term</td>
<td>n.</td>
<td>项,条款,术语</td>
<td>[tɜrm]</td>
</tr>
<tr>
<td>invoke</td>
<td>vt.</td>
<td>调用,请求</td>
<td>[ɪnˈvoʊk]</td>
</tr>
<tr>
<td>designated</td>
<td>a.</td>
<td>指定的,特指的</td>
<td>[‘dezɪɡneɪtɪd]</td>
</tr>
<tr>
<td>pertain</td>
<td>vi.</td>
<td>附属,属于,关于</td>
<td>[pərˈteɪn]</td>
</tr>
<tr>
<td>assembly</td>
<td>n.</td>
<td>汇编,安装,装配</td>
<td>[əˈsɛmbli]</td>
</tr>
<tr>
<td>retrieve</td>
<td>v.</td>
<td>检索</td>
<td>[rɪˈtriv]</td>
</tr>
<tr>
<td>subtotal</td>
<td>n.&v.</td>
<td>小计,求部分和</td>
<td>[ˈsʌbtoʊtl]</td>
</tr>
<tr>
<td>partition</td>
<td>v.</td>
<td>划分,分区,部分</td>
<td>[pɑrˈtɪʃn]</td>
</tr>
<tr>
<td>hexadecimal</td>
<td>a.</td>
<td>十六进制的</td>
<td>[ˌhɛksəˈdɛsəməl]</td>
</tr>
<tr>
<td>nest</td>
<td>v.</td>
<td>嵌套,后进先出</td>
<td>[nɛst]</td>
</tr>
<tr>
<td>modifier</td>
<td>n.</td>
<td>修改量,变址数</td>
<td>[ˈmɑdɪfaɪə(r)]</td>
</tr>
<tr>
<td>interrupt</td>
<td>v.&n.</td>
<td>中断</td>
<td>[ˌɪntəˈrʌpt]</td>
</tr>
<tr>
<td>serial</td>
<td>a.</td>
<td>串行的,串联的</td>
<td>[ˈsɪriəl]</td>
</tr>
<tr>
<td>corrupt</td>
<td>v.&a.</td>
<td>恶化;有毛病的</td>
<td>[kəˈrʌpt]</td>
</tr>
<tr>
<td>critical</td>
<td>a.&n.</td>
<td>临界的;临界值</td>
<td>[ˈkrɪtɪkəl]</td>
</tr>
</tbody></table>
]]></content>
<tags>
<tag>面试</tag>
</tags>
</entry>
<entry>
<title>机试第10章</title>
<url>/2023/03/08/%E6%9C%BA%E8%AF%95%E7%AC%AC10%E7%AB%A0/</url>
<content><![CDATA[<h2 id="前序遍历序列建二叉树"><a href="#前序遍历序列建二叉树" class="headerlink" title="前序遍历序列建二叉树"></a>前序遍历序列建二叉树</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line">string str;</span><br><span class="line"><span class="type">int</span> pos = <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line"><span class="function">TreeNode *<span class="title">build</span><span class="params">(string str, <span class="type">int</span> &pos)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="type">char</span> c = str[pos++];</span><br><span class="line"> <span class="keyword">if</span> (c == <span class="string">'#'</span>)</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">nullptr</span>;</span><br><span class="line"> TreeNode *root = <span class="keyword">new</span> <span class="built_in">TreeNode</span>(c);</span><br><span class="line"> root->lchild = <span class="built_in">build</span>(str, pos);</span><br><span class="line"> root->rchild = <span class="built_in">build</span>(str, pos);</span><br><span class="line"> <span class="keyword">return</span> root;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="根据前序序列和中序序列确定二叉树"><a href="#根据前序序列和中序序列确定二叉树" class="headerlink" title="根据前序序列和中序序列确定二叉树"></a>根据前序序列和中序序列确定二叉树</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="function">TreeNode *<span class="title">build</span><span class="params">(<span class="type">int</span> l1, <span class="type">int</span> r1, <span class="type">int</span> l2, <span class="type">int</span> r2, string &pre, string &in)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">if</span> (l1 > r1)</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">nullptr</span>;</span><br><span class="line"> TreeNode *root = <span class="keyword">new</span> <span class="built_in">TreeNode</span>(pre[l1]);</span><br><span class="line"> <span class="type">int</span> pos = in.<span class="built_in">find</span>(pre[l1]);</span><br><span class="line"> root->lchild = <span class="built_in">build</span>(l1 + <span class="number">1</span>, l1 + pos + <span class="number">1</span>, l2, pos - <span class="number">1</span>, pre, in);</span><br><span class="line"> root->rchild = <span class="built_in">build</span>(l1 + pos + <span class="number">2</span>, r1, pos + <span class="number">1</span>, r2, pre, in);</span><br><span class="line"> <span class="keyword">return</span> root;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function">TreeNode *<span class="title">make</span><span class="params">(string &pre, string &in)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">return</span> <span class="built_in">build</span>(<span class="number">0</span>, pre.<span class="built_in">size</span>() - <span class="number">1</span>, <span class="number">0</span>, in.<span class="built_in">size</span>() - <span class="number">1</span>, pre, in);</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="二叉排序树建树"><a href="#二叉排序树建树" class="headerlink" title="二叉排序树建树"></a>二叉排序树建树</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="function">TreeNode *<span class="title">insert</span><span class="params">(TreeNode *root, <span class="type">int</span> val, <span class="type">int</span> father)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">if</span> (!root)</span><br><span class="line"> {</span><br><span class="line"> root = <span class="keyword">new</span> <span class="built_in">TreeNode</span>(val);</span><br><span class="line"> cout << father << <span class="string">" "</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span> (val < root->val)</span><br><span class="line"> root->lchild = <span class="built_in">insert</span>(root->lchild, val, root->val);</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> root->rchild = <span class="built_in">insert</span>(root->rchild, val, root->val);</span><br><span class="line"> <span class="keyword">return</span> root;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="判断两棵树是否相同"><a href="#判断两棵树是否相同" class="headerlink" title="判断两棵树是否相同"></a>判断两棵树是否相同</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="function"><span class="type">bool</span> <span class="title">isEqual</span><span class="params">(TreeNode *x, TreeNode *y)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">if</span> (x == <span class="literal">nullptr</span> && y == <span class="literal">nullptr</span>)</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line"> <span class="keyword">if</span> ((x == <span class="literal">nullptr</span> && y != <span class="literal">nullptr</span>) || (x != <span class="literal">nullptr</span> && y == <span class="literal">nullptr</span>))</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line"> <span class="keyword">if</span> (x->val != y->val)</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line"> <span class="keyword">return</span> <span class="built_in">isEqual</span>(x->lchild, y->lchild) && <span class="built_in">isEqual</span>(x->rchild, y->rchild);</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="哈夫曼树最小带权路径长度和"><a href="#哈夫曼树最小带权路径长度和" class="headerlink" title="哈夫曼树最小带权路径长度和"></a>哈夫曼树最小带权路径长度和</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line">priority_queue<<span class="type">int</span>, vector<<span class="type">int</span>>, greater<<span class="type">int</span>>> q; <span class="comment">// 小根堆</span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> res = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">while</span> (q.<span class="built_in">size</span>() > <span class="number">1</span>)</span><br><span class="line">{</span><br><span class="line"> <span class="type">int</span> a = q.<span class="built_in">top</span>();</span><br><span class="line"> q.<span class="built_in">pop</span>();</span><br><span class="line"> <span class="type">int</span> b = q.<span class="built_in">top</span>();</span><br><span class="line"> q.<span class="built_in">pop</span>();</span><br><span class="line"> res += a + b;</span><br><span class="line"> q.<span class="built_in">push</span>(a + b);</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="哈夫曼树建树及哈夫曼编码"><a href="#哈夫曼树建树及哈夫曼编码" class="headerlink" title="哈夫曼树建树及哈夫曼编码"></a>哈夫曼树建树及哈夫曼编码</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="keyword">struct</span> <span class="title class_">cmp</span></span><br><span class="line">{</span><br><span class="line"> <span class="function"><span class="type">bool</span> <span class="title">operator</span><span class="params">()</span><span class="params">(TreeNode *lhs, TreeNode *rhs)</span></span></span><br><span class="line"><span class="function"> </span>{</span><br><span class="line"> <span class="keyword">return</span> lhs->val > rhs->val;</span><br><span class="line"> }</span><br><span class="line">};</span><br><span class="line"></span><br><span class="line">string tmp;</span><br><span class="line">vector<string> res;</span><br><span class="line">unordered_map<TreeNode *, <span class="type">int</span>> mp; <span class="comment">// 给每个节点赋序号</span></span><br><span class="line">priority_queue<TreeNode *, vector<TreeNode *>, cmp> q;</span><br><span class="line">res.<span class="built_in">resize</span>(q.<span class="built_in">size</span>());</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">build</span><span class="params">()</span> <span class="comment">// 建树</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">while</span> (q.<span class="built_in">size</span>() > <span class="number">1</span>)</span><br><span class="line"> {</span><br><span class="line"> TreeNode *a = q.<span class="built_in">top</span>();</span><br><span class="line"> q.<span class="built_in">pop</span>();</span><br><span class="line"> TreeNode *b = q.<span class="built_in">top</span>();</span><br><span class="line"> q.<span class="built_in">pop</span>();</span><br><span class="line"> TreeNode *root = <span class="keyword">new</span> <span class="built_in">TreeNode</span>(a->val + b->val);</span><br><span class="line"> root->lchild = a, root->rchild = b;</span><br><span class="line"> q.<span class="built_in">push</span>(root);</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">solve</span><span class="params">(TreeNode *root)</span> <span class="comment">// 编码</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">if</span> (!root)</span><br><span class="line"> <span class="keyword">return</span>;</span><br><span class="line"> <span class="keyword">if</span> (!root->lchild && !root->rchild)</span><br><span class="line"> {</span><br><span class="line"> res[mp[root]] = tmp;</span><br><span class="line"> <span class="keyword">return</span>;</span><br><span class="line"> }</span><br><span class="line"> tmp += <span class="string">"0"</span>;</span><br><span class="line"> <span class="built_in">solve</span>(root->lchild);</span><br><span class="line"> tmp.<span class="built_in">pop_back</span>();</span><br><span class="line"> tmp += <span class="string">"1"</span>;</span><br><span class="line"> <span class="built_in">solve</span>(root->rchild);</span><br><span class="line"> tmp.<span class="built_in">pop_back</span>();</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
]]></content>
<tags>
<tag>机试</tag>
<tag>数据结构</tag>
</tags>
</entry>
<entry>
<title>机试第12章</title>
<url>/2023/03/08/%E6%9C%BA%E8%AF%95%E7%AC%AC12%E7%AB%A0/</url>
<content><![CDATA[<h2 id="最大连续子序列和"><a href="#最大连续子序列和" class="headerlink" title="最大连续子序列和"></a>最大连续子序列和</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="type">const</span> <span class="type">int</span> MAXN = <span class="number">10000</span>;</span><br><span class="line"><span class="type">long</span> <span class="type">long</span> a[MAXN], dp[MAXN];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">long</span> <span class="type">long</span> <span class="title">solve</span><span class="params">(<span class="type">int</span> n)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="type">long</span> <span class="type">long</span> res = <span class="number">0</span>;</span><br><span class="line"> dp[<span class="number">0</span>] = a[<span class="number">0</span>];</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i < n; ++i)</span><br><span class="line"> {</span><br><span class="line"> dp[i] = <span class="built_in">max</span>(a[i], dp[i - <span class="number">1</span>] + a[i]);</span><br><span class="line"> res = <span class="built_in">max</span>(res, dp[i]);</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> res;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="最长递增子序列"><a href="#最长递增子序列" class="headerlink" title="最长递增子序列"></a>最长递增子序列</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="type">const</span> <span class="type">int</span> MAXN = <span class="number">1000</span>;</span><br><span class="line"><span class="type">int</span> a[MAXN], dp[MAXN];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">solve</span><span class="params">(<span class="type">int</span> n)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="type">int</span> res = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < n; ++i)</span><br><span class="line"> {</span><br><span class="line"> dp[i] = <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j < i; ++j)</span><br><span class="line"> <span class="keyword">if</span> (a[i] > a[j])</span><br><span class="line"> dp[i] = <span class="built_in">max</span>(dp[i], dp[j] + <span class="number">1</span>);</span><br><span class="line"> res = <span class="built_in">max</span>(res, dp[i]);</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> res;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="最大上升子序列和"><a href="#最大上升子序列和" class="headerlink" title="最大上升子序列和"></a>最大上升子序列和</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="type">const</span> <span class="type">int</span> MAXN = <span class="number">1000</span>;</span><br><span class="line"><span class="type">int</span> a[MAXN], dp[MAXN];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">solve</span><span class="params">(<span class="type">int</span> n)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="type">int</span> res = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < n; ++i)</span><br><span class="line"> {</span><br><span class="line"> dp[i] = a[i];</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j < i; ++j)</span><br><span class="line"> <span class="keyword">if</span> (a[i] > a[j])</span><br><span class="line"> dp[i] = <span class="built_in">max</span>(dp[i], dp[j] + a[i]);</span><br><span class="line"> res = <span class="built_in">max</span>(res, dp[i]);</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> res;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="最长公共子序列"><a href="#最长公共子序列" class="headerlink" title="最长公共子序列"></a>最长公共子序列</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="type">const</span> <span class="type">int</span> MAXN = <span class="number">1000</span>;</span><br><span class="line"><span class="type">int</span> dp[MAXN][MAXN];</span><br><span class="line"><span class="type">char</span> s1[MAXN], s2[MAXN];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">solve</span><span class="params">(<span class="type">int</span> n, <span class="type">int</span> m)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i <= n; ++i)</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j <= m; ++j)</span><br><span class="line"> <span class="keyword">if</span> (i == <span class="number">0</span> || j == <span class="number">0</span>)</span><br><span class="line"> {</span><br><span class="line"> dp[i][j] = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">continue</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span> (s1[i] == s2[j])</span><br><span class="line"> dp[i][j] = dp[i - <span class="number">1</span>][j - <span class="number">1</span>] + <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> dp[i][j] = <span class="built_in">max</span>(dp[i - <span class="number">1</span>][j], dp[i][j - <span class="number">1</span>]);</span><br><span class="line"> <span class="keyword">return</span> dp[n][m];</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="编辑距离"><a href="#编辑距离" class="headerlink" title="编辑距离"></a>编辑距离</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="function"><span class="type">void</span> <span class="title">solve</span><span class="params">(string &s1, string &s2)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="type">int</span> n = s1.<span class="built_in">size</span>(), m = s2.<span class="built_in">size</span>();</span><br><span class="line"> vector<vector<<span class="type">int</span>>> <span class="built_in">f</span>(n + <span class="number">1</span>, <span class="built_in">vector</span><<span class="type">int</span>>(m + <span class="number">1</span>, <span class="number">0</span>));</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i <= n; ++i)</span><br><span class="line"> f[i][<span class="number">0</span>] = i;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i <= m; ++i)</span><br><span class="line"> f[<span class="number">0</span>][i] = i;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i <= n; ++i)</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">1</span>; j <= m; ++j)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span> (s1[i - <span class="number">1</span>] == s2[j - <span class="number">1</span>])</span><br><span class="line"> f[i][j] = <span class="built_in">min</span>(f[i - <span class="number">1</span>][j - <span class="number">1</span>], <span class="built_in">min</span>(f[i - <span class="number">1</span>][j] + <span class="number">1</span>, f[i][j - <span class="number">1</span>] + <span class="number">1</span>));</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> f[i][j] = <span class="number">1</span> + <span class="built_in">min</span>(f[i - <span class="number">1</span>][j - <span class="number">1</span>], <span class="built_in">min</span>(f[i - <span class="number">1</span>][j], f[i][j - <span class="number">1</span>]));</span><br><span class="line"> }</span><br><span class="line"> cout << f[n][m] << <span class="string">"\n"</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="背包问题"><a href="#背包问题" class="headerlink" title="背包问题"></a>背包问题</h2><h3 id="0-1背包"><a href="#0-1背包" class="headerlink" title="0-1背包"></a>0-1背包</h3><p><strong>每种物品至多只能选择1件。</strong><code>dp[i][j]</code>表示前 <mjx-container class="MathJax" jax="SVG"><svg style="vertical-align: -0.025ex;" xmlns="http://www.w3.org/2000/svg" width="0.781ex" height="1.52ex" role="img" focusable="false" viewBox="0 -661 345 672"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D456" d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z"></path></g></g></g></svg></mjx-container> 个物品装进容量为 <mjx-container class="MathJax" jax="SVG"><svg style="vertical-align: -0.462ex;" xmlns="http://www.w3.org/2000/svg" width="0.932ex" height="1.957ex" role="img" focusable="false" viewBox="0 -661 412 865"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D457" d="M297 596Q297 627 318 644T361 661Q378 661 389 651T403 623Q403 595 384 576T340 557Q322 557 310 567T297 596ZM288 376Q288 405 262 405Q240 405 220 393T185 362T161 325T144 293L137 279Q135 278 121 278H107Q101 284 101 286T105 299Q126 348 164 391T252 441Q253 441 260 441T272 442Q296 441 316 432Q341 418 354 401T367 348V332L318 133Q267 -67 264 -75Q246 -125 194 -164T75 -204Q25 -204 7 -183T-12 -137Q-12 -110 7 -91T53 -71Q70 -71 82 -81T95 -112Q95 -148 63 -167Q69 -168 77 -168Q111 -168 139 -140T182 -74L193 -32Q204 11 219 72T251 197T278 308T289 365Q289 372 288 376Z"></path></g></g></g></svg></mjx-container> 的背包能获得的最大价值。<code>dp[i][j]</code>的转移仅与<code>dp[i-1][j]</code>和<code>dp[i-1][j-w[i]]</code>有关,可简化为<code>dp[j]</code>。</p>
<div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="type">const</span> <span class="type">int</span> MAXN = <span class="number">1000</span>;</span><br><span class="line"><span class="type">int</span> n, m; <span class="comment">// 物品个数,背包容量</span></span><br><span class="line"><span class="type">int</span> dp[MAXN];</span><br><span class="line"><span class="type">int</span> v[MAXN], w[MAXN]; <span class="comment">// 价值,重量</span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">solve</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i <= m; ++i)</span><br><span class="line"> dp[i] = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < n; ++i)</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> j = m; j >= w[i]; --j)</span><br><span class="line"> dp[j] = <span class="built_in">max</span>(dp[j], dp[j - w[i]] + v[i]);</span><br><span class="line"> <span class="keyword">return</span> dp[m];</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h3 id="完全背包"><a href="#完全背包" class="headerlink" title="完全背包"></a>完全背包</h3><p><strong>每个物品可以选择多件。</strong> 与0-1背包相比,仅更新dp数组时遍历顺序发生改变。</p>
<div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="type">const</span> <span class="type">int</span> MAXN = <span class="number">1000</span>;</span><br><span class="line"><span class="type">int</span> n, m; <span class="comment">// 物品个数,背包容量</span></span><br><span class="line"><span class="type">int</span> dp[MAXN];</span><br><span class="line"><span class="type">int</span> v[MAXN], w[MAXN]; <span class="comment">// 价值,重量</span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">solve</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i <= m; ++i)</span><br><span class="line"> dp[i] = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < n; ++i)</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> j = w[i]; j <= m; ++j)</span><br><span class="line"> dp[j] = <span class="built_in">max</span>(dp[j], dp[j - w[i]] + v[i]);</span><br><span class="line"> <span class="keyword">return</span> dp[m];</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h3 id="多重背包"><a href="#多重背包" class="headerlink" title="多重背包"></a>多重背包</h3><p><strong>每种物品最多选k件。</strong> 转化为0-1背包问题求解。</p>
<div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="type">const</span> <span class="type">int</span> MAXN = <span class="number">1000</span>;</span><br><span class="line"><span class="type">int</span> dp[MAXN];</span><br><span class="line"><span class="type">int</span> v[MAXN], w[MAXN], k[MAXN];</span><br><span class="line"><span class="type">int</span> value[MAXN], weight[MAXN]; <span class="comment">// 分解后的价值,质量</span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">solve</span><span class="params">(<span class="type">int</span> n, <span class="type">int</span> m)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="type">int</span> num = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < n; ++i)</span><br><span class="line"> {</span><br><span class="line"> cin >> v[i] >> w[i] >> k[i];</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">1</span>; j <= k[i]; j <<= <span class="number">1</span>)</span><br><span class="line"> {</span><br><span class="line"> value[num] = v[i] * j;</span><br><span class="line"> weight[num] = w[i] * j;</span><br><span class="line"> num++;</span><br><span class="line"> k[i] -= j;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span> (k[i] > <span class="number">0</span>)</span><br><span class="line"> {</span><br><span class="line"> value[num] = v[i] * k[i];</span><br><span class="line"> weight[num] = w[i] * k[i];</span><br><span class="line"> num++;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i <= m; ++i)</span><br><span class="line"> dp[i] = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < num; ++i)</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> j = m; j >= weight[i]; --j)</span><br><span class="line"> dp[j] = <span class="built_in">max</span>(dp[j], dp[j - weight[i]] + value[i]);</span><br><span class="line"> <span class="keyword">return</span> dp[m];</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
]]></content>
<tags>
<tag>机试</tag>
<tag>动态规划</tag>
</tags>
</entry>
<entry>
<title>机试第2章</title>
<url>/2023/03/06/%E6%9C%BA%E8%AF%95%E7%AC%AC2%E7%AB%A0/</url>
<content><![CDATA[<h2 id="反序数"><a href="#反序数" class="headerlink" title="反序数"></a>反序数</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="function"><span class="type">int</span> <span class="title">reverse</span><span class="params">(<span class="type">int</span> x)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="type">int</span> res = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span> (x)</span><br><span class="line"> {</span><br><span class="line"> res *= <span class="number">10</span>;</span><br><span class="line"> res += x % <span class="number">10</span>;</span><br><span class="line"> x /= <span class="number">10</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> res;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="闰年判断"><a href="#闰年判断" class="headerlink" title="闰年判断"></a>闰年判断</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="type">int</span> d1[<span class="number">13</span>] = {<span class="number">0</span>, <span class="number">31</span>, <span class="number">28</span>, <span class="number">31</span>, <span class="number">30</span>, <span class="number">31</span>, <span class="number">30</span>, <span class="number">31</span>, <span class="number">31</span>, <span class="number">30</span>, <span class="number">31</span>, <span class="number">30</span>, <span class="number">31</span>};</span><br><span class="line"><span class="type">int</span> d2[<span class="number">13</span>] = {<span class="number">0</span>, <span class="number">31</span>, <span class="number">29</span>, <span class="number">31</span>, <span class="number">30</span>, <span class="number">31</span>, <span class="number">30</span>, <span class="number">31</span>, <span class="number">31</span>, <span class="number">30</span>, <span class="number">31</span>, <span class="number">30</span>, <span class="number">31</span>};</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">isLeapYear</span><span class="params">(<span class="type">int</span> n)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">return</span> (n % <span class="number">4</span> == <span class="number">0</span> && n % <span class="number">100</span> != <span class="number">0</span>) || (n % <span class="number">400</span> == <span class="number">0</span>);</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="日期格式化输出yyyy-mm-dd"><a href="#日期格式化输出yyyy-mm-dd" class="headerlink" title="日期格式化输出yyyy-mm-dd"></a>日期格式化输出yyyy-mm-dd</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="built_in">printf</span>(<span class="string">"%04d-%02d-%02d"</span>, y, m, d);</span><br></pre></td></tr></table></figure></div>
<h1 id=""><a href="#" class="headerlink" title=""></a></h1>]]></content>
<tags>
<tag>机试</tag>
<tag>暴力</tag>
</tags>
</entry>
<entry>
<title>机试第5章</title>
<url>/2023/03/07/%E6%9C%BA%E8%AF%95%E7%AC%AC5%E7%AB%A0/</url>
<content><![CDATA[<h2 id="约瑟夫问题变体(队列解法)"><a href="#约瑟夫问题变体(队列解法)" class="headerlink" title="约瑟夫问题变体(队列解法)"></a>约瑟夫问题变体(队列解法)</h2><p>用队列模拟循环队列</p>
<div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="type">int</span> n, p, m;</span><br><span class="line">cin >> n >> p >> m;</span><br><span class="line">queue<<span class="type">int</span>> q;</span><br><span class="line"><span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i <= n; ++i)</span><br><span class="line"> q.<span class="built_in">push</span>(i);</span><br><span class="line"><span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i < p; ++i) <span class="comment">// 让p号位于队首</span></span><br><span class="line">{</span><br><span class="line"> q.<span class="built_in">push</span>(q.<span class="built_in">front</span>());</span><br><span class="line"> q.<span class="built_in">pop</span>();</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">while</span> (!q.<span class="built_in">empty</span>())</span><br><span class="line">{</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i < m; ++i)</span><br><span class="line"> {</span><br><span class="line"> q.<span class="built_in">push</span>(q.<span class="built_in">front</span>());</span><br><span class="line"> q.<span class="built_in">pop</span>();</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span> (q.<span class="built_in">size</span>() == <span class="number">1</span>)</span><br><span class="line"> cout << q.<span class="built_in">front</span>() << <span class="string">"\n"</span>;</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> cout << q.<span class="built_in">front</span>() << <span class="string">" "</span>;</span><br><span class="line"> q.<span class="built_in">pop</span>();</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="括号匹配(栈)"><a href="#括号匹配(栈)" class="headerlink" title="括号匹配(栈)"></a>括号匹配(栈)</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="function"><span class="type">bool</span> <span class="title">judge</span><span class="params">(string str)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> stack<<span class="type">char</span>> stk;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < str.<span class="built_in">size</span>(); ++i)</span><br><span class="line"> <span class="keyword">if</span> (str[i] == <span class="string">'('</span>)</span><br><span class="line"> stk.<span class="built_in">push</span>(<span class="string">'('</span>);</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span> (str[i] == <span class="string">')'</span>)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span> (!stk.<span class="built_in">empty</span>())</span><br><span class="line"> stk.<span class="built_in">pop</span>();</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> stk.<span class="built_in">empty</span>();</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="简易计算器(栈)"><a href="#简易计算器(栈)" class="headerlink" title="简易计算器(栈)"></a>简易计算器(栈)</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line">unordered_map<<span class="type">char</span>, <span class="type">int</span>> pri;</span><br><span class="line">pri[<span class="string">'#'</span>] = <span class="number">0</span>;</span><br><span class="line">pri[<span class="string">'$'</span>] = <span class="number">1</span>;</span><br><span class="line">pri[<span class="string">'+'</span>] = pri[<span class="string">'-'</span>] = <span class="number">2</span>;</span><br><span class="line">pri[<span class="string">'*'</span>] = pri[<span class="string">'/'</span>] = <span class="number">3</span>;</span><br><span class="line"></span><br><span class="line">stack<<span class="type">char</span>> op;</span><br><span class="line">stack<<span class="type">int</span>> num;</span><br><span class="line">string str;</span><br><span class="line">str += <span class="string">'$'</span>;</span><br><span class="line">op.<span class="built_in">push</span>(<span class="string">'#'</span>);</span><br><span class="line"><span class="type">int</span> idx = <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">while</span> (idx < str.<span class="built_in">size</span>())</span><br><span class="line">{</span><br><span class="line"> <span class="keyword">if</span> (str[idx] == <span class="string">' '</span>)</span><br><span class="line"> idx++;</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span> (<span class="built_in">isdigit</span>(str[idx]))</span><br><span class="line"> num.<span class="built_in">push</span>(<span class="built_in">getnum</span>(str, idx));</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span> (pri[op.<span class="built_in">top</span>()]) < pri[str[idx]])</span><br><span class="line"> {</span><br><span class="line"> op.<span class="built_in">push</span>(str[idx]);</span><br><span class="line"> idx++;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> {</span><br><span class="line"> <span class="type">double</span> y = num.<span class="built_in">top</span>();</span><br><span class="line"> num.<span class="built_in">pop</span>();</span><br><span class="line"> <span class="type">double</span> x = num.<span class="built_in">top</span>();</span><br><span class="line"> num.<span class="built_in">pop</span>();</span><br><span class="line"> num.<span class="built_in">push</span>(<span class="built_in">cal</span>(x, y, op.<span class="built_in">top</span>()));</span><br><span class="line"> op.<span class="built_in">pop</span>();</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
]]></content>
<tags>
<tag>机试</tag>
<tag>数据结构</tag>
</tags>
</entry>
<entry>
<title>机试第3章</title>
<url>/2023/03/07/%E6%9C%BA%E8%AF%95%E7%AC%AC3%E7%AB%A0/</url>
<content><![CDATA[<h2 id="快速排序-quicksort"><a href="#快速排序-quicksort" class="headerlink" title="快速排序(quicksort)"></a>快速排序(quicksort)</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="function"><span class="type">void</span> <span class="title">quicksort</span><span class="params">(<span class="type">int</span> *a, <span class="type">int</span> l, <span class="type">int</span> r)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="type">int</span> mid = a[(l + r) / <span class="number">2</span>];</span><br><span class="line"> <span class="type">int</span> i = l, j = r;</span><br><span class="line"> <span class="keyword">while</span> (i <= j)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">while</span> (a[i] < mid)</span><br><span class="line"> i++;</span><br><span class="line"> <span class="keyword">while</span> (a[j] > mid)</span><br><span class="line"> j--;</span><br><span class="line"> <span class="keyword">if</span> (i <= j)</span><br><span class="line"> {</span><br><span class="line"> <span class="built_in">swap</span>(a[i], a[j]);</span><br><span class="line"> i++, j--;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span> (i < r)</span><br><span class="line"> <span class="built_in">quicksort</span>(a, i, r);</span><br><span class="line"> <span class="keyword">if</span> (l < j)</span><br><span class="line"> <span class="built_in">quicksort</span>(a, l, j);</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="结构体排序"><a href="#结构体排序" class="headerlink" title="结构体排序"></a>结构体排序</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="keyword">struct</span> <span class="title class_">student</span></span><br><span class="line">{</span><br><span class="line"> <span class="type">int</span> x, y;</span><br><span class="line">};</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(<span class="type">const</span> student &a, <span class="type">const</span> student &b)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">if</span> (a.x == b.x)</span><br><span class="line"> <span class="keyword">return</span> a.y < b.y;</span><br><span class="line"> <span class="keyword">return</span> a.x < b.x;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="二分查找"><a href="#二分查找" class="headerlink" title="二分查找"></a>二分查找</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="function"><span class="type">bool</span> <span class="title">search</span><span class="params">(<span class="type">int</span> *a, <span class="type">int</span> n, <span class="type">int</span> target)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="type">int</span> l = <span class="number">0</span>, r = n - <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">while</span> (l <= r)</span><br><span class="line"> {</span><br><span class="line"> <span class="type">int</span> mid = l + (r - l) / <span class="number">2</span>;</span><br><span class="line"> <span class="keyword">if</span> (a[mid] < target)</span><br><span class="line"> l = mid + <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span> (a[mid] > target)</span><br><span class="line"> r = mid - <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="built_in">lower_bound</span>(begin, end, val); <span class="comment">// 返回大于等于val的地址</span></span><br><span class="line"><span class="built_in">upper_bound</span>(begin, end, val); <span class="comment">// 返回大于val的地址</span></span><br></pre></td></tr></table></figure></div>
]]></content>
<tags>
<tag>机试</tag>
<tag>排序和查找</tag>
</tags>
</entry>
<entry>
<title>机试第4章</title>
<url>/2023/03/07/%E6%9C%BA%E8%AF%95%E7%AC%AC4%E7%AB%A0/</url>
<content><![CDATA[<h2 id="string常用操作"><a href="#string常用操作" class="headerlink" title="string常用操作"></a>string常用操作</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line">s.<span class="built_in">insert</span>(idx, str);</span><br><span class="line">s.<span class="built_in">erase</span>(begin, end); <span class="comment">// 删除[begin, end)</span></span><br><span class="line">s.<span class="built_in">clear</span>();</span><br><span class="line">s.<span class="built_in">substr</span>(idx, len); <span class="comment">// 起始位置,长度</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> (s.<span class="built_in">find</span>(str) != string::npos)</span><br></pre></td></tr></table></figure></div>
<h2 id="浮点数加法(类似大数加法)"><a href="#浮点数加法(类似大数加法)" class="headerlink" title="浮点数加法(类似大数加法)"></a>浮点数加法(类似大数加法)</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="function">string <span class="title">add</span><span class="params">(string s1, string s2)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> string int1 = s1.<span class="built_in">substr</span>(<span class="number">0</span>, s1.<span class="built_in">find</span>(<span class="string">'.'</span>)), int2 = s2.<span class="built_in">substr</span>(<span class="number">0</span>, s2.<span class="built_in">find</span>(<span class="string">'.'</span>));</span><br><span class="line"> string frac1 = s1.<span class="built_in">substr</span>(s1.<span class="built_in">find</span>(<span class="string">'.'</span>) + <span class="number">1</span>), frac2 = s2.<span class="built_in">substr</span>(s2.<span class="built_in">find</span>(<span class="string">'.'</span>) + <span class="number">1</span>);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (int1.<span class="built_in">size</span>() < int2.<span class="built_in">size</span>())</span><br><span class="line"> int1 = <span class="built_in">string</span>(int2.<span class="built_in">size</span>() - int1.<span class="built_in">size</span>(), <span class="string">'0'</span>) + int1;</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> int2 = <span class="built_in">string</span>(int1.<span class="built_in">size</span>() - int2.<span class="built_in">size</span>(), <span class="string">'0'</span>) + int2;</span><br><span class="line"> <span class="keyword">if</span> (frac1.<span class="built_in">size</span>() < frac2.<span class="built_in">size</span>())</span><br><span class="line"> frac1 = frac1 + <span class="built_in">string</span>(frac2.<span class="built_in">size</span>() - frac1.<span class="built_in">size</span>(), <span class="string">' '</span>);</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> frac2 = frac2 + <span class="built_in">string</span>(frac1.<span class="built_in">size</span>() - frac2.<span class="built_in">size</span>(), <span class="string">' '</span>);</span><br><span class="line"></span><br><span class="line"> <span class="type">int</span> carry = <span class="number">0</span>;</span><br><span class="line"> string fraction = <span class="built_in">string</span>(frac1.<span class="built_in">size</span>(), <span class="string">' '</span>);</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = fraction.<span class="built_in">size</span>() - <span class="number">1</span>; i >= <span class="number">0</span>; --i)</span><br><span class="line"> {</span><br><span class="line"> <span class="type">int</span> cur = frac1[i] - <span class="string">'0'</span> + frac2[i] - <span class="string">'0'</span> + carry;</span><br><span class="line"> carry = cur / <span class="number">10</span>;</span><br><span class="line"> fraction[i] = cur % <span class="number">10</span> + <span class="string">'0'</span>;</span><br><span class="line"> }</span><br><span class="line"> string integer = <span class="built_in">string</span>(int1.<span class="built_in">size</span>(), <span class="string">' '</span>);</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = integer.<span class="built_in">size</span>() - <span class="number">1</span>; i >= <span class="number">0</span>; --i)</span><br><span class="line"> {</span><br><span class="line"> <span class="type">int</span> cur = int1[i] - <span class="string">'0'</span> + int2[i] - <span class="string">'0'</span> + carry;</span><br><span class="line"> carry = cur / <span class="number">10</span>;</span><br><span class="line"> integer[i] = cur % <span class="number">10</span> + <span class="string">'0'</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span> (carry == <span class="number">1</span>)</span><br><span class="line"> <span class="keyword">return</span> <span class="string">'1'</span> + integer + <span class="string">'.'</span> + fraction;</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> <span class="keyword">return</span> integer + <span class="string">'.'</span> + fraction;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="kmp算法"><a href="#kmp算法" class="headerlink" title="kmp算法"></a>kmp算法</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="type">const</span> <span class="type">int</span> MAXN = <span class="number">1e6</span> + <span class="number">5</span>;</span><br><span class="line"><span class="type">const</span> <span class="type">int</span> MAXM = <span class="number">1e3</span> + <span class="number">5</span>;</span><br><span class="line"><span class="type">char</span> s[MAXN], t[MAXM];</span><br><span class="line"><span class="type">int</span> nxt[MAXM];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">getnxt</span><span class="params">(<span class="type">int</span> m)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> nxt[<span class="number">0</span>] = <span class="number">-1</span>;</span><br><span class="line"> <span class="type">int</span> i = <span class="number">0</span>, j = <span class="number">-1</span>;</span><br><span class="line"> <span class="keyword">while</span> (i < m)</span><br><span class="line"> <span class="keyword">if</span> (j == <span class="number">-1</span> || t[i] == t[j])</span><br><span class="line"> nxt[++i] = ++j;</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> j = nxt[j];</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">kmp</span><span class="params">(<span class="type">int</span> n, <span class="type">int</span> m)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="built_in">getnxt</span>(m);</span><br><span class="line"> <span class="type">int</span> i = <span class="number">0</span>, j = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span> (i < n)</span><br><span class="line"> <span class="keyword">if</span> (j == <span class="number">-1</span> || s[i] == t[j])</span><br><span class="line"> {</span><br><span class="line"> i++, j++;</span><br><span class="line"> <span class="keyword">if</span> (j == m)</span><br><span class="line"> <span class="keyword">return</span> i - m + <span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> j = nxt[j];</span><br><span class="line"> <span class="keyword">return</span> <span class="number">-1</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
]]></content>
<tags>
<tag>机试</tag>
<tag>字符串</tag>
</tags>
</entry>
<entry>
<title>机试第6章</title>
<url>/2023/03/07/%E6%9C%BA%E8%AF%95%E7%AC%AC6%E7%AB%A0/</url>
<content><![CDATA[<h2 id="大整数加法"><a href="#大整数加法" class="headerlink" title="大整数加法"></a>大整数加法</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="function">string <span class="title">add</span><span class="params">(string a, string b)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">if</span> (a.<span class="built_in">size</span>() > b.<span class="built_in">size</span>())</span><br><span class="line"> a = <span class="built_in">string</span>(a.<span class="built_in">size</span>() - b.<span class="built_in">size</span>(), <span class="string">'0'</span>) + a;</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> b = <span class="built_in">string</span>(b.<span class="built_in">size</span>() - a.<span class="built_in">size</span>(), <span class="string">'0'</span>) + b;</span><br><span class="line"> <span class="type">int</span> carry = <span class="number">0</span>;</span><br><span class="line"> <span class="function">string <span class="title">res</span><span class="params">(a.size(), <span class="string">' '</span>)</span></span>;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = res.<span class="built_in">size</span>() - <span class="number">1</span>; i >= <span class="number">0</span>; --i)</span><br><span class="line"> {</span><br><span class="line"> <span class="type">int</span> cur = a[i] - <span class="string">'0'</span> + b[i] - <span class="string">'0'</span> + carry;</span><br><span class="line"> res[i] = cur % <span class="number">10</span> + <span class="string">'0'</span>;</span><br><span class="line"> carry = cur / <span class="number">10</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span> (carry)</span><br><span class="line"> <span class="keyword">return</span> <span class="string">'1'</span> + res;</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> <span class="keyword">return</span> res;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="大整数乘法"><a href="#大整数乘法" class="headerlink" title="大整数乘法"></a>大整数乘法</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="function">string <span class="title">mul</span><span class="params">(string str, <span class="type">int</span> x)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="function">string <span class="title">res</span><span class="params">(str.size(), <span class="string">' '</span>)</span></span>;</span><br><span class="line"> <span class="type">int</span> carry = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = res.<span class="built_in">size</span>() - <span class="number">1</span>; i >= <span class="number">0</span>; --i)</span><br><span class="line"> {</span><br><span class="line"> <span class="type">int</span> cur = (str[i] - <span class="string">'0'</span>) * x + carry;</span><br><span class="line"> str[i] = cur / <span class="number">10</span> + <span class="string">'0'</span>;</span><br><span class="line"> carry = cur % <span class="number">10</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span> (carry)</span><br><span class="line"> <span class="keyword">return</span> <span class="built_in">to_string</span>(carry) + res;</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> <span class="keyword">return</span> res;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function">string <span class="title">mul</span><span class="params">(string a, string b)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> string res = <span class="string">"0"</span>;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < b.<span class="built_in">size</span>(); ++i)</span><br><span class="line"> {</span><br><span class="line"> <span class="type">int</span> x = b[b.<span class="built_in">size</span>() - <span class="number">1</span> - i] - <span class="string">'0'</span>;</span><br><span class="line"> string cur = <span class="built_in">mul</span>(a, x);</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j < i; ++i)</span><br><span class="line"> cur = <span class="built_in">mul</span>(cur, <span class="number">10</span>);</span><br><span class="line"> res = <span class="built_in">add</span>(res, cur);</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> res;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="大整数除法"><a href="#大整数除法" class="headerlink" title="大整数除法"></a>大整数除法</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="function">string <span class="title">divide</span><span class="params">(string str, <span class="type">int</span> x)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="type">int</span> remainder = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < str.<span class="built_in">size</span>(); ++i)</span><br><span class="line"> {</span><br><span class="line"> <span class="type">int</span> cur = remainder * <span class="number">10</span> + str[i] - <span class="string">'0'</span>;</span><br><span class="line"> str[i] = cur / x + <span class="string">'0'</span>;</span><br><span class="line"> remainder = cur % x;</span><br><span class="line"> }</span><br><span class="line"> <span class="type">int</span> pos = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span> (str[pos] == <span class="string">'0'</span>)</span><br><span class="line"> pos++;</span><br><span class="line"> <span class="keyword">return</span> str.<span class="built_in">substr</span>(pos);</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="最大公约数"><a href="#最大公约数" class="headerlink" title="最大公约数"></a>最大公约数</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="function"><span class="type">int</span> <span class="title">gcd</span><span class="params">(<span class="type">int</span> a, <span class="type">int</span> b)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">return</span> b == <span class="number">0</span> ? a : <span class="built_in">gcd</span>(b, a % b);</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="最小公倍数"><a href="#最小公倍数" class="headerlink" title="最小公倍数"></a>最小公倍数</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="function"><span class="type">int</span> <span class="title">lcm</span><span class="params">(<span class="type">int</span> a, <span class="type">int</span> b)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">return</span> a * b / <span class="built_in">gcd</span>(a, b);</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="线性筛"><a href="#线性筛" class="headerlink" title="线性筛"></a>线性筛</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="type">const</span> <span class="type">int</span> MAXN = <span class="number">1e4</span> + <span class="number">5</span>;</span><br><span class="line">vector<<span class="type">int</span>> pri;</span><br><span class="line"><span class="type">int</span> vis[MAXN];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">init</span><span class="params">(<span class="type">int</span> n)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">2</span>; i <= n; ++i)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span> (!vis[i])</span><br><span class="line"> pri.<span class="built_in">push_back</span>(i);</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j < pri.<span class="built_in">size</span>(); ++j)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span> (<span class="number">1ll</span> * i * pri[j] > n)</span><br><span class="line"> <span class="keyword">break</span>;</span><br><span class="line"> vis[i * pri[j]] = <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">if</span> (i % pri[j] == <span class="number">0</span>)</span><br><span class="line"> <span class="keyword">break</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="分解质因数"><a href="#分解质因数" class="headerlink" title="分解质因数"></a>分解质因数</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line">vector<<span class="type">int</span>> factor;</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < pri.<span class="built_in">size</span>() && pri[i] < n; ++i)</span><br><span class="line"> <span class="keyword">while</span> (n % pri[i] == <span class="number">0</span>)</span><br><span class="line"> factor.<span class="built_in">push_back</span>(pri[i]);</span><br><span class="line"><span class="keyword">if</span> (n > <span class="number">1</span>)</span><br><span class="line"> factor.<span class="built_in">push_back</span>(n);</span><br></pre></td></tr></table></figure></div>
<h2 id="快速幂"><a href="#快速幂" class="headerlink" title="快速幂"></a>快速幂</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="type">const</span> <span class="type">int</span> MOD = <span class="number">114514</span>;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">fpow</span><span class="params">(<span class="type">int</span> a, <span class="type">int</span> b)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="type">int</span> res = <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">while</span> (b)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span> (b & <span class="number">1</span>)</span><br><span class="line"> res = res * a % MOD;</span><br><span class="line"> b >>= <span class="number">1</span>;</span><br><span class="line"> a = a * a % MOD;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> res;</span><br><span class="line">} </span><br></pre></td></tr></table></figure></div>
<h2 id="矩阵快速幂"><a href="#矩阵快速幂" class="headerlink" title="矩阵快速幂"></a>矩阵快速幂</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="function">matrix <span class="title">fpow</span><span class="params">(matrix x, <span class="type">int</span> k)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="function">mat <span class="title">res</span><span class="params">(x.row, x.col)</span></span>;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < res.row; ++i)</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j < res.col; ++j)</span><br><span class="line"> <span class="keyword">if</span> (i == j)</span><br><span class="line"> res.mat[i][j] = <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> res.mat[i][j] = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span> (k)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span> (k & <span class="number">1</span>)</span><br><span class="line"> res = <span class="built_in">mul</span>(res, k);</span><br><span class="line"> k >>= <span class="number">1</span>;</span><br><span class="line"> x = <span class="built_in">mul</span>(x, x);</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> res;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="判断大整数是否可被整除"><a href="#判断大整数是否可被整除" class="headerlink" title="判断大整数是否可被整除"></a>判断大整数是否可被整除</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="function"><span class="type">bool</span> <span class="title">isDividable</span><span class="params">(string str, <span class="type">int</span> k)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="type">int</span> total = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < str.<span class="built_in">size</span>(); ++i)</span><br><span class="line"> {</span><br><span class="line"> total *= <span class="number">10</span>;</span><br><span class="line"> total += str[i] - <span class="string">'0'</span>;</span><br><span class="line"> total %= k;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> total == <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
]]></content>
<tags>
<tag>机试</tag>
<tag>数学</tag>
</tags>
</entry>
<entry>
<title>机试第8章</title>
<url>/2023/03/08/%E6%9C%BA%E8%AF%95%E7%AC%AC8%E7%AB%A0/</url>
<content><![CDATA[<h2 id="汉诺塔变种(递归)"><a href="#汉诺塔变种(递归)" class="headerlink" title="汉诺塔变种(递归)"></a>汉诺塔变种(递归)</h2><p>每次只允许将圆盘移到中间杆上或从中间杆上移出,不允许直接将圆盘从第一根杆上移到第二根杆上,或直接将圆盘从第三根杆上移到第一根杆上。</p>
<div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="function"><span class="type">long</span> <span class="type">long</span> <span class="title">solve</span><span class="params">(<span class="type">int</span> n)</span> <span class="comment">// f[1] = 2, f[i] = 3 * f[i - 1] + 2</span></span></span><br><span class="line"><span class="function"> <span class="title">if</span> <span class="params">(n == <span class="number">1</span>)</span></span></span><br><span class="line"><span class="function"> <span class="keyword">return</span> 2</span>;</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> <span class="keyword">return</span> <span class="number">3</span> * <span class="built_in">solve</span>(n - <span class="number">1</span>) + <span class="number">2</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="杨辉三角(递归)"><a href="#杨辉三角(递归)" class="headerlink" title="杨辉三角(递归)"></a>杨辉三角(递归)</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="function"><span class="type">int</span> <span class="title">solve</span><span class="params">(<span class="type">int</span> r, <span class="type">int</span> c)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">if</span> (r == <span class="number">1</span> || c == <span class="number">1</span> || r == c)</span><br><span class="line"> <span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">return</span> <span class="built_in">solve</span>(r - <span class="number">1</span>, c - <span class="number">1</span>) + <span class="built_in">solve</span>(r - <span class="number">1</span>, c);</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="全排列"><a href="#全排列" class="headerlink" title="全排列"></a>全排列</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="type">const</span> <span class="type">int</span> MAXN = <span class="number">10</span>;</span><br><span class="line"><span class="type">char</span> s[MAXN];</span><br><span class="line"><span class="type">int</span> vis[MAXN];</span><br><span class="line"><span class="type">char</span> res[MAXN];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">solve</span><span class="params">(<span class="type">char</span> *s, <span class="type">int</span> cnt)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">if</span> (cnt == <span class="built_in">strlen</span>(s))</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < <span class="built_in">strlen</span>(res); ++i)</span><br><span class="line"> cout << res[i] << <span class="string">' '</span>;</span><br><span class="line"> cout << <span class="string">"\n"</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < <span class="built_in">strlen</span>(s); ++i)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span> (!vis[i])</span><br><span class="line"> {</span><br><span class="line"> vis[i] = <span class="number">1</span>;</span><br><span class="line"> res[cnt] = s[i];</span><br><span class="line"> <span class="built_in">solve</span>(s, cnt + <span class="number">1</span>);</span><br><span class="line"> vis[i] = <span class="number">0</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="计算二叉树子树节点个数"><a href="#计算二叉树子树节点个数" class="headerlink" title="计算二叉树子树节点个数"></a>计算二叉树子树节点个数</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="function"><span class="type">int</span> <span class="title">solve</span><span class="params">(<span class="type">int</span> n, <span class="type">int</span> m)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">if</span> (m > n)</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line"> <span class="type">int</span> res = <span class="number">1</span>;</span><br><span class="line"> res += <span class="built_in">solve</span>(n, <span class="number">2</span> * m);</span><br><span class="line"> res += <span class="built_in">solve</span>(n, <span class="number">2</span> * m + <span class="number">1</span>);</span><br><span class="line"> <span class="keyword">return</span> res;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="分解2的幂次方"><a href="#分解2的幂次方" class="headerlink" title="分解2的幂次方"></a>分解2的幂次方</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="function">string <span class="title">solve</span><span class="params">(<span class="type">int</span> n)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> stack<<span class="type">int</span>> p;</span><br><span class="line"> <span class="type">int</span> exp = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span> (n)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span> (n % <span class="number">2</span>)</span><br><span class="line"> p.<span class="built_in">push</span>(exp);</span><br><span class="line"> exp++;</span><br><span class="line"> n /= <span class="number">2</span>;</span><br><span class="line"> }</span><br><span class="line"> string res = <span class="string">""</span>;</span><br><span class="line"> <span class="keyword">while</span> (!p.<span class="built_in">empty</span>())</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span> (p.<span class="built_in">top</span>() == <span class="number">0</span>)</span><br><span class="line"> res += <span class="string">"2(0)"</span>;</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span> (p.<span class="built_in">top</span>() == <span class="number">1</span>)</span><br><span class="line"> res += <span class="string">"2"</span>;</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> res += <span class="string">"2("</span> + <span class="built_in">solve</span>(p.<span class="built_in">top</span>()) + <span class="string">")"</span>;</span><br><span class="line"> p.<span class="built_in">pop</span>();</span><br><span class="line"> <span class="keyword">if</span> (!p.<span class="built_in">empty</span>())</span><br><span class="line"> res += <span class="string">"+"</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> res;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
]]></content>
<tags>
<tag>机试</tag>
<tag>递归和分治</tag>
</tags>
</entry>
<entry>
<title>机试第7章</title>
<url>/2023/03/08/%E6%9C%BA%E8%AF%95%E7%AC%AC7%E7%AB%A0/</url>
<content><![CDATA[<h2 id="活动安排(区间贪心)"><a href="#活动安排(区间贪心)" class="headerlink" title="活动安排(区间贪心)"></a>活动安排(区间贪心)</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(activity x, activity y)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">return</span> x.e < y.e; <span class="comment">// 按结束时间排序</span></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="built_in">sort</span>(arr, arr + n, cmp);</span><br><span class="line"><span class="type">int</span> cur = <span class="number">0</span>, res = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < n; ++i)</span><br><span class="line"> <span class="keyword">if</span> (cur <= arr[i].s)</span><br><span class="line"> {</span><br><span class="line"> cur = arr[i].e;</span><br><span class="line"> res++;</span><br><span class="line"> }</span><br></pre></td></tr></table></figure></div>
]]></content>
<tags>
<tag>机试</tag>
<tag>贪心</tag>
</tags>
</entry>
<entry>
<title>机试第9章</title>
<url>/2023/03/08/%E6%9C%BA%E8%AF%95%E7%AC%AC9%E7%AB%A0/</url>
<content><![CDATA[<h2 id="Catch-That-Cow-BFS"><a href="#Catch-That-Cow-BFS" class="headerlink" title="Catch That Cow(BFS)"></a>Catch That Cow(BFS)</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="type">const</span> <span class="type">int</span> MAXN = <span class="number">1e5</span>;</span><br><span class="line"><span class="type">int</span> step[MAXN], vis[MAXN];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">bfs</span><span class="params">(<span class="type">int</span> n, <span class="type">int</span> k)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> queue<<span class="type">int</span>> q;</span><br><span class="line"> q.<span class="built_in">push</span>(n);</span><br><span class="line"> step[n] = <span class="number">0</span>;</span><br><span class="line"> vis[n] = <span class="number">1</span>;</span><br><span class="line"> <span class="type">int</span> cur, nxt;</span><br><span class="line"> <span class="keyword">while</span> (!q.<span class="built_in">empty</span>())</span><br><span class="line"> {</span><br><span class="line"> cur = q.<span class="built_in">front</span>();</span><br><span class="line"> q.<span class="built_in">pop</span>();</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < <span class="number">3</span>; ++i)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span> (i == <span class="number">0</span>)</span><br><span class="line"> nxt = cur + <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span> (i == <span class="number">1</span>)</span><br><span class="line"> nxt = cur - <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> nxt = <span class="number">2</span> * cur;</span><br><span class="line"> <span class="keyword">if</span> (nxt < <span class="number">0</span> || nxt >= MAXN)</span><br><span class="line"> <span class="keyword">continue</span>;</span><br><span class="line"> <span class="keyword">if</span> (!vis[nxt])</span><br><span class="line"> {</span><br><span class="line"> q.<span class="built_in">push</span>(nxt);</span><br><span class="line"> vis[nxt] = <span class="number">1</span>;</span><br><span class="line"> step[nxt] = step[cur] + <span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span> (nxt == k)</span><br><span class="line"> <span class="keyword">return</span> step[nxt];</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> <span class="number">-1</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="A-Knight’s-Journey-DFS"><a href="#A-Knight’s-Journey-DFS" class="headerlink" title="A Knight’s Journey(DFS)"></a>A Knight’s Journey(DFS)</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="type">const</span> <span class="type">int</span> MAXN = <span class="number">30</span>;</span><br><span class="line"><span class="type">int</span> p, q; <span class="comment">// 棋盘参数</span></span><br><span class="line"><span class="type">bool</span> vis[MAXN][MAXN];</span><br><span class="line"><span class="type">int</span> dir[<span class="number">8</span>][<span class="number">2</span>] = {{<span class="number">-1</span>, <span class="number">-2</span>}, {<span class="number">1</span>, <span class="number">-2</span>}, {<span class="number">-2</span>, <span class="number">-1</span>}, {<span class="number">2</span>, <span class="number">-1</span>}, {<span class="number">-2</span>, <span class="number">1</span>}, {<span class="number">2</span>, <span class="number">1</span>}, {<span class="number">-1</span>, <span class="number">2</span>}, {<span class="number">1</span>, <span class="number">2</span>}};</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">dfs</span><span class="params">(<span class="type">int</span> x, <span class="type">int</span> y, <span class="type">int</span> step, string res)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">if</span> (step == p * q)</span><br><span class="line"> {</span><br><span class="line"> cout << res << <span class="string">"\n"</span>;</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < <span class="number">8</span>; ++i)</span><br><span class="line"> {</span><br><span class="line"> <span class="type">int</span> nx = x + dir[i][<span class="number">0</span>], ny = y + dir[i][<span class="number">1</span>];</span><br><span class="line"> <span class="keyword">if</span> (nx < <span class="number">0</span> || nx >= p || ny < <span class="number">0</span> || ny >= q || vis[nx][ny])</span><br><span class="line"> <span class="keyword">continue</span>;</span><br><span class="line"> <span class="type">char</span> r = nx + <span class="string">'1'</span>, c = ny + <span class="string">'A'</span>;</span><br><span class="line"> vis[nx][ny] = <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">if</span> (<span class="built_in">dfs</span>(nx, ny, step + <span class="number">1</span>, res + c + r))</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line"> vis[nx][ny] = <span class="number">0</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
<h2 id="八皇后"><a href="#八皇后" class="headerlink" title="八皇后"></a>八皇后</h2><div class="highlight-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="type">int</span> res = <span class="number">0</span>, n;</span><br><span class="line">vector<<span class="type">int</span>> tmp;</span><br><span class="line"><span class="function">vector<<span class="type">int</span>> <span class="title">vis</span><span class="params">(n + <span class="number">1</span>)</span></span>;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">solve</span><span class="params">(<span class="type">int</span> cnt, vector<<span class="type">int</span>> &vis)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">if</span> (cnt == n + <span class="number">1</span>)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < tmp.<span class="built_in">size</span>(); ++i)</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j < tmp.<span class="built_in">size</span>(); ++j)</span><br><span class="line"> <span class="keyword">if</span> (<span class="built_in">abs</span>(i - j) == <span class="built_in">abs</span>(tmp[i] - tmp[j]))</span><br><span class="line"> <span class="keyword">return</span>;</span><br><span class="line"> res++;</span><br><span class="line"> <span class="keyword">return</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i <= n; ++i)</span><br><span class="line"> <span class="keyword">if</span> (!vis[i])</span><br><span class="line"> {</span><br><span class="line"> vis[i] = <span class="number">1</span>;</span><br><span class="line"> tmp.<span class="built_in">push_back</span>(i);</span><br><span class="line"> <span class="built_in">solve</span>(cnt + <span class="number">1</span>, vis);</span><br><span class="line"> tmp.<span class="built_in">pop_back</span>();</span><br><span class="line"> vis[i] = <span class="number">0</span>;</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>
]]></content>
<tags>
<tag>机试</tag>
<tag>搜索</tag>
</tags>
</entry>
<entry>
<title>面试常见问题</title>
<url>/2023/03/10/%E9%9D%A2%E8%AF%95%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/</url>
<content><![CDATA[<h3 id="内存分配结构"><a href="#内存分配结构" class="headerlink" title="内存分配结构"></a>内存分配结构</h3><p><strong>代码区</strong>:存放代码的位置,只读</p>
<p><strong>常量区</strong>:存放常量(如变量名字,非零的初始化值,字符串,const常量等),只读</p>
<p><strong>静态区、全局区</strong>:存放全局变量和静态变量,具体分为两个段,<code>.bss</code>段和<code>.data</code>段</p>
<ul>
<li><p><code>.bss</code>段:存放<strong>未初始化的</strong>和<strong>初始化为0</strong>的全局变量或者静态变量</p>
</li>
<li><p><code>.data</code>段:<strong>初始化不为0</strong>的全局变量或者静态变量</p>
</li>
</ul>
<p><strong>堆</strong>:程序运行期间动态分配<code>malloc</code>所使用的区域</p>
<p><strong>栈</strong>:用于存放地址(用于函数的现场恢复)、临时变量(函数内部定义的变量,或是函数定义的参数)等</p>
<h3 id="快速排序平均复杂度"><a href="#快速排序平均复杂度" class="headerlink" title="快速排序平均复杂度"></a>快速排序平均复杂度</h3><p><mjx-container class="MathJax" jax="SVG" display="true"><svg style="vertical-align: -2.819ex;" xmlns="http://www.w3.org/2000/svg" width="66.83ex" height="6.712ex" role="img" focusable="false" viewBox="0 -1720.9 29538.8 2966.8"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D436" d="M50 252Q50 367 117 473T286 641T490 704Q580 704 633 653Q642 643 648 636T656 626L657 623Q660 623 684 649Q691 655 699 663T715 679T725 690L740 705H746Q760 705 760 698Q760 694 728 561Q692 422 692 421Q690 416 687 415T669 413H653Q647 419 647 422Q647 423 648 429T650 449T651 481Q651 552 619 605T510 659Q484 659 454 652T382 628T299 572T226 479Q194 422 175 346T156 222Q156 108 232 58Q280 24 350 24Q441 24 512 92T606 240Q610 253 612 255T628 257Q648 257 648 248Q648 243 647 239Q618 132 523 55T319 -22Q206 -22 128 53T50 252Z"></path></g><g data-mml-node="mo" transform="translate(760,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mi" transform="translate(1149,0)"><path data-c="1D45B" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z"></path></g><g data-mml-node="mo" transform="translate(1749,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g><g data-mml-node="mo" transform="translate(2415.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z"></path></g><g data-mml-node="mi" transform="translate(3471.6,0)"><path data-c="1D45B" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z"></path></g><g data-mml-node="mo" transform="translate(4293.8,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z"></path></g><g data-mml-node="mn" transform="translate(5294,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path></g><g data-mml-node="mo" transform="translate(6016.2,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z"></path></g><g data-mml-node="mfrac" transform="translate(7016.4,0)"><g data-mml-node="mn" transform="translate(270,676)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path></g><g data-mml-node="mi" transform="translate(220,-686)"><path data-c="1D45B" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z"></path></g><rect width="800" height="60" x="120" y="220"></rect></g><g data-mml-node="munderover" transform="translate(8223.1,0)"><g data-mml-node="mo"><path data-c="2211" d="M60 948Q63 950 665 950H1267L1325 815Q1384 677 1388 669H1348L1341 683Q1320 724 1285 761Q1235 809 1174 838T1033 881T882 898T699 902H574H543H251L259 891Q722 258 724 252Q725 250 724 246Q721 243 460 -56L196 -356Q196 -357 407 -357Q459 -357 548 -357T676 -358Q812 -358 896 -353T1063 -332T1204 -283T1307 -196Q1328 -170 1348 -124H1388Q1388 -125 1381 -145T1356 -210T1325 -294L1267 -449L666 -450Q64 -450 61 -448Q55 -446 55 -439Q55 -437 57 -433L590 177Q590 178 557 222T452 366T322 544L56 909L55 924Q55 945 60 948Z"></path></g><g data-mml-node="TeXAtom" transform="translate(148.2,-1087.9) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mi"><path data-c="1D456" d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z"></path></g><g data-mml-node="mo" transform="translate(345,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z"></path></g><g data-mml-node="mn" transform="translate(1123,0)"><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z"></path></g></g><g data-mml-node="TeXAtom" transform="translate(58,1150) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mi"><path data-c="1D45B" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z"></path></g><g data-mml-node="mo" transform="translate(600,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z"></path></g><g data-mml-node="mn" transform="translate(1378,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path></g></g></g><g data-mml-node="mo" transform="translate(9667.1,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mi" transform="translate(10056.1,0)"><path data-c="1D436" d="M50 252Q50 367 117 473T286 641T490 704Q580 704 633 653Q642 643 648 636T656 626L657 623Q660 623 684 649Q691 655 699 663T715 679T725 690L740 705H746Q760 705 760 698Q760 694 728 561Q692 422 692 421Q690 416 687 415T669 413H653Q647 419 647 422Q647 423 648 429T650 449T651 481Q651 552 619 605T510 659Q484 659 454 652T382 628T299 572T226 479Q194 422 175 346T156 222Q156 108 232 58Q280 24 350 24Q441 24 512 92T606 240Q610 253 612 255T628 257Q648 257 648 248Q648 243 647 239Q618 132 523 55T319 -22Q206 -22 128 53T50 252Z"></path></g><g data-mml-node="mo" transform="translate(10816.1,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mi" transform="translate(11205.1,0)"><path data-c="1D456" d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z"></path></g><g data-mml-node="mo" transform="translate(11550.1,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g><g data-mml-node="mo" transform="translate(12161.3,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z"></path></g><g data-mml-node="mi" transform="translate(13161.6,0)"><path data-c="1D436" d="M50 252Q50 367 117 473T286 641T490 704Q580 704 633 653Q642 643 648 636T656 626L657 623Q660 623 684 649Q691 655 699 663T715 679T725 690L740 705H746Q760 705 760 698Q760 694 728 561Q692 422 692 421Q690 416 687 415T669 413H653Q647 419 647 422Q647 423 648 429T650 449T651 481Q651 552 619 605T510 659Q484 659 454 652T382 628T299 572T226 479Q194 422 175 346T156 222Q156 108 232 58Q280 24 350 24Q441 24 512 92T606 240Q610 253 612 255T628 257Q648 257 648 248Q648 243 647 239Q618 132 523 55T319 -22Q206 -22 128 53T50 252Z"></path></g><g data-mml-node="mo" transform="translate(13921.6,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path></g><g data-mml-node="mi" transform="translate(14310.6,0)"><path data-c="1D45B" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z"></path></g><g data-mml-node="mo" transform="translate(15132.8,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z"></path></g><g data-mml-node="mi" transform="translate(16133,0)"><path data-c="1D456" d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z"></path></g><g data-mml-node="mo" transform="translate(16700.2,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z"></path></g><g data-mml-node="mn" transform="translate(17700.4,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path></g><g data-mml-node="mo" transform="translate(18200.4,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g><g data-mml-node="mo" transform="translate(18589.4,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></g><g data-mml-node="mo" transform="translate(19256.2,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z"></path></g><g data-mml-node="mn" transform="translate(20312,0)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z"></path></g><g data-mml-node="mi" transform="translate(20812,0)"><path data-c="1D45B" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z"></path></g><g data-mml-node="mi" transform="translate(21578.7,0)"><path data-c="6C" d="M42 46H56Q95 46 103 60V68Q103 77 103 91T103 124T104 167T104 217T104 272T104 329Q104 366 104 407T104 482T104 542T103 586T103 603Q100 622 89 628T44 637H26V660Q26 683 28 683L38 684Q48 685 67 686T104 688Q121 689 141 690T171 693T182 694H185V379Q185 62 186 60Q190 52 198 49Q219 46 247 46H263V0H255L232 1Q209 2 183 2T145 3T107 3T57 1L34 0H26V46H42Z"></path><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(278,0)"></path></g><g data-mml-node="mo" transform="translate(22412.7,0)"><path data-c="2061" d=""></path></g><g data-mml-node="mi" transform="translate(22579.3,0)"><path data-c="1D45B" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z"></path></g><g data-mml-node="mo" transform="translate(23457.1,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z"></path></g><g data-mml-node="mn" transform="translate(24512.9,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path><path data-c="2E" d="M78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60Z" transform="translate(500,0)"></path><path data-c="33" d="M127 463Q100 463 85 480T69 524Q69 579 117 622T233 665Q268 665 277 664Q351 652 390 611T430 522Q430 470 396 421T302 350L299 348Q299 347 308 345T337 336T375 315Q457 262 457 175Q457 96 395 37T238 -22Q158 -22 100 21T42 130Q42 158 60 175T105 193Q133 193 151 175T169 130Q169 119 166 110T159 94T148 82T136 74T126 70T118 67L114 66Q165 21 238 21Q293 21 321 74Q338 107 338 175V195Q338 290 274 322Q259 328 213 329L171 330L168 332Q166 335 166 348Q166 366 174 366Q202 366 232 371Q266 376 294 413T322 525V533Q322 590 287 612Q265 626 240 626Q208 626 181 615T143 592T132 580H135Q138 579 143 578T153 573T165 566T175 555T183 540T186 520Q186 498 172 481T127 463Z" transform="translate(778,0)"></path><path data-c="39" d="M352 287Q304 211 232 211Q154 211 104 270T44 396Q42 412 42 436V444Q42 537 111 606Q171 666 243 666Q245 666 249 666T257 665H261Q273 665 286 663T323 651T370 619T413 560Q456 472 456 334Q456 194 396 97Q361 41 312 10T208 -22Q147 -22 108 7T68 93T121 149Q143 149 158 135T173 96Q173 78 164 65T148 49T135 44L131 43Q131 41 138 37T164 27T206 22H212Q272 22 313 86Q352 142 352 280V287ZM244 248Q292 248 321 297T351 430Q351 508 343 542Q341 552 337 562T323 588T293 615T246 625Q208 625 181 598Q160 576 154 546T147 441Q147 358 152 329T172 282Q197 248 244 248Z" transform="translate(1278,0)"></path></g><g data-mml-node="mi" transform="translate(26290.9,0)"><path data-c="1D45B" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z"></path></g><g data-mml-node="msub" transform="translate(27057.6,0)"><g data-mml-node="mi"><path data-c="6C" d="M42 46H56Q95 46 103 60V68Q103 77 103 91T103 124T104 167T104 217T104 272T104 329Q104 366 104 407T104 482T104 542T103 586T103 603Q100 622 89 628T44 637H26V660Q26 683 28 683L38 684Q48 685 67 686T104 688Q121 689 141 690T171 693T182 694H185V379Q185 62 186 60Q190 52 198 49Q219 46 247 46H263V0H255L232 1Q209 2 183 2T145 3T107 3T57 1L34 0H26V46H42Z"></path><path data-c="6F" d="M28 214Q28 309 93 378T250 448Q340 448 405 380T471 215Q471 120 407 55T250 -10Q153 -10 91 57T28 214ZM250 30Q372 30 372 193V225V250Q372 272 371 288T364 326T348 362T317 390T268 410Q263 411 252 411Q222 411 195 399Q152 377 139 338T126 246V226Q126 130 145 91Q177 30 250 30Z" transform="translate(278,0)"></path><path data-c="67" d="M329 409Q373 453 429 453Q459 453 472 434T485 396Q485 382 476 371T449 360Q416 360 412 390Q410 404 415 411Q415 412 416 414V415Q388 412 363 393Q355 388 355 386Q355 385 359 381T368 369T379 351T388 325T392 292Q392 230 343 187T222 143Q172 143 123 171Q112 153 112 133Q112 98 138 81Q147 75 155 75T227 73Q311 72 335 67Q396 58 431 26Q470 -13 470 -72Q470 -139 392 -175Q332 -206 250 -206Q167 -206 107 -175Q29 -140 29 -75Q29 -39 50 -15T92 18L103 24Q67 55 67 108Q67 155 96 193Q52 237 52 292Q52 355 102 398T223 442Q274 442 318 416L329 409ZM299 343Q294 371 273 387T221 404Q192 404 171 388T145 343Q142 326 142 292Q142 248 149 227T179 192Q196 182 222 182Q244 182 260 189T283 207T294 227T299 242Q302 258 302 292T299 343ZM403 -75Q403 -50 389 -34T348 -11T299 -2T245 0H218Q151 0 138 -6Q118 -15 107 -34T95 -74Q95 -84 101 -97T122 -127T170 -155T250 -167Q319 -167 361 -139T403 -75Z" transform="translate(778,0)"></path></g><g data-mml-node="TeXAtom" transform="translate(1311,-241.4) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mn"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z"></path></g></g></g><g data-mml-node="mo" transform="translate(28772.1,0)"><path data-c="2061" d=""></path></g><g data-mml-node="mi" transform="translate(28938.8,0)"><path data-c="1D45B" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z"></path></g></g></g></svg></mjx-container></p>
<h3 id="各种排序和查找比较"><a href="#各种排序和查找比较" class="headerlink" title="各种排序和查找比较"></a>各种排序和查找比较</h3><p><a class="link" href="https://blog.csdn.net/qq_41958041/article/details/107318190">排序和查找时间复杂度总结 <i class="fa-regular fa-arrow-up-right-from-square fa-sm"></i></a></p>
<h3 id="union、struct和class"><a href="#union、struct和class" class="headerlink" title="union、struct和class"></a>union、struct和class</h3><ol>
<li><p>Union:Union是一种特殊的数据结构,它允许在相同的内存位置存储不同的数据类型。<strong>Union中所有的成员都共享同一块内存,只有最后一次赋值的成员有效。</strong>Union适用于需要在不同数据类型之间进行转换的情况。</p>
</li>
<li><p>Struct:Struct是一种用户自定义的数据类型,它允许将不同的数据类型组合在一起成为一个新的数据类型。Struct中的每个成员都有自己的内存地址,可以分别进行访问和赋值。Struct适用于需要表示具有多个属性的对象的情况。</p>
</li>
<li><p>Class:Class是一种用户自定义的数据类型,它可以包含数据成员和成员函数,并且可以实现面向对象的编程。<strong>Class中的数据成员和成员函数默认是私有的,</strong>可以通过public、protected和private关键字进行访问控制。Class适用于需要表示真实世界中的对象和实现面向对象的编程的情况。</p>
</li>
</ol>
<h3 id="连通分量和强连同分量"><a href="#连通分量和强连同分量" class="headerlink" title="连通分量和强连同分量"></a>连通分量和强连同分量</h3><ul>
<li><p>连通分量指的是<strong>无向图</strong>中的一个极大连通子图。具体来说,对于无向图G=(V,E),若存在一个子集U⊆V,使得U中任意两个点在图G中都可以通过一条路径相互到达,且U是极大的,即U不能再加入任何其他的点,那么U就是图G的一个连通分量。</p>
</li>
<li><p>强连通分量则是<strong>有向图</strong>中的一个极大强连通子图。具体来说,对于有向图G=(V,E),若存在一个子集U⊆V,使得U中任意两个点在图G中都可以通过一条有向路径相互到达,且U是极大的,即U不能再加入任何其他的点,那么U就是图G的一个强连通分量。</p>
</li>
</ul>
<p><strong>一个弱连通分量不一定是强连通分量,而一个强连通分量必然是一个弱连通分量。</strong></p>
<h4 id="tarjan算法"><a href="#tarjan算法" class="headerlink" title="tarjan算法"></a>tarjan算法</h4><h3 id="面向对象的特征"><a href="#面向对象的特征" class="headerlink" title="面向对象的特征"></a>面向对象的特征</h3><ol>
<li><p><strong>封装(Encapsulation)</strong>:封装是指将数据和方法进行包装,使其对外部隐藏,只保留必要的接口暴露给外部使用。封装可以有效地保护数据和方法,确保其不会被误用或滥用,从而提高程序的可靠性和安全性。</p>
</li>
<li><p><strong>继承(Inheritance)</strong>:继承是指通过定义子类来继承父类的属性和方法。子类可以继承父类的<strong>公共方法和属性</strong>,并且可以添加自己的方法和属性。继承可以有效地减少代码的重复,提高代码的复用性。</p>
</li>
<li><p><strong>多态(Polymorphism)</strong>:多态是指同一个方法名可以具有不同的实现方式。在面向对象编程中,多态可以通过<strong>重载、重写和接口</strong>实现。多态可以提高代码的灵活性和可扩展性,使代码更加简洁易懂。</p>
</li>
<li><p><strong>抽象(Abstraction)</strong>:抽象是指将复杂的实体抽象成类和对象,并仅保留必要的属性和方法。抽象可以让程序员更加专注于问题的本质,而不是实现的细节。同时,抽象也可以提高代码的复用性和可维护性,使代码更加健壮。</p>
</li>
</ol>
<h3 id="引用和指针"><a href="#引用和指针" class="headerlink" title="引用和指针"></a>引用和指针</h3><p>区别:</p>
<ol>
<li><p>定义方式:引用在定义时必须初始化,而指针可以先定义,后赋值。</p>
</li>
<li><p>操作方式:引用在使用时类似于变量名,直接操作被引用对象,不需要使用 * 取值运算符;指针需要通过 * 取值运算符来获取被指向对象的值。</p>
</li>
<li><p>空指针:指针可以指向空值,而引用不能引用空值。</p>
</li>
<li><p>引用的一些特性:引用一旦绑定对象就不能更改,指针可以随时改变指向的对象。</p>
</li>
</ol>
<p>联系:</p>
<ol>
<li><p>都可以用于访问内存中的数据。</p>
</li>
<li><p>都可以用于实现函数参数的传递,引用参数和指针参数都可以用于在函数内部改变外部数据。</p>
</li>
<li><p>引用和指针都可以作为返回值,引用作为返回值可以避免拷贝大对象的开销。</p>
</li>
</ol>
<h3 id="C-和C的关系"><a href="#C-和C的关系" class="headerlink" title="C++和C的关系"></a>C++和C的关系</h3><p>C++:面向对象,引入新语法和特性,包括类、继承、多态、模板。</p>
<h3 id="判断有向图是否有环"><a href="#判断有向图是否有环" class="headerlink" title="判断有向图是否有环"></a>判断有向图是否有环</h3><p>深搜、拓扑排序</p>
]]></content>
<tags>
<tag>面试</tag>
</tags>
</entry>
</search>