-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathatom.xml
More file actions
499 lines (233 loc) · 154 KB
/
atom.xml
File metadata and controls
499 lines (233 loc) · 154 KB
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
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Hdheid's blog</title>
<subtitle>青春须早为,岂能长少年。</subtitle>
<link href="https://hdheid.github.io/atom.xml" rel="self"/>
<link href="https://hdheid.github.io/"/>
<updated>2022-11-20T08:56:12.603Z</updated>
<id>https://hdheid.github.io/</id>
<author>
<name>Hdheid</name>
</author>
<generator uri="https://hexo.io/">Hexo</generator>
<entry>
<title>2022-11-20栈队每日一题</title>
<link href="https://hdheid.github.io/posts/18e4c254.html"/>
<id>https://hdheid.github.io/posts/18e4c254.html</id>
<published>2022-11-20T08:56:12.603Z</published>
<updated>2022-11-20T08:56:12.603Z</updated>
<content type="html"><![CDATA[<div class="tag link"><a class="link-card" title="acwing 1017. 怪盗基德的滑翔翼" href="https://www.acwing.com/problem/content/1019/"><div class="left"><img src="https://img.hipyt.cn/imgs/2022/09/e3f773cfe32f6f4f.jpg"/></div><div class="right"><p class="text">acwing 1017. 怪盗基德的滑翔翼</p><p class="url">https://www.acwing.com/problem/content/1019/</p></div></a></div><h2 id="题目大意"><a href="#题目大意" class="headerlink" title="题目大意"></a>题目大意</h2><p>用 N 个建筑排成一条线,高度不尽相同,怪盗基德可以<strong>任意选择一个楼作为起点</strong>,向左或者向右飞行,但是<strong>每一次的落点都必须比上一次的楼层低</strong>,求怪盗基德最多可以落多少个建筑物。</p><h2 id="题意解析"><a href="#题意解析" class="headerlink" title="题意解析"></a>题意解析</h2><ol><li>当怪盗基德只往左飞的时候,如果以任意一栋楼 i 作为起点,那么就可以看成以 i 为端点的最长上升子序列</li><li>当怪盗基德只往右飞的时候,如果以任意一栋楼 i 作为起点,那么就可以看成以 i 为端点的最长下降子序列,也就是从右往左的最长上升子序列</li></ol><p>因此这个题目的解题思路就是分别<strong>从左往右</strong>和<strong>从右往左</strong>求一遍最长上升子序列,然后<strong>求最大值</strong>即可。</p><p>那么接下来看一看最长上升子序列,最长上升子序列经典例题:<a href="https://leetcode.cn/problems/longest-increasing-subsequence/">300. 最长递增子序列</a></p><p>最长上升子序列</p><ul><li>状态表示:dp[i] 表示从第一个数开始,以 第 i 个数结尾的上升子序列 ,属性为(Max)</li><li>状态计算:当 dp[j]<dp[i]的时候 : dp[i]=max(dp[i],dp[j]+1) <strong>(j<i),dp[i] 初始值为 1</strong></li></ul><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string"><iostream></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> N=<span class="number">110</span>;</span><br><span class="line"><span class="type">int</span> a[N];</span><br><span class="line"><span class="type">int</span> dp[N];</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> t; cin>>t;</span><br><span class="line"> <span class="keyword">while</span>(t--)</span><br><span class="line"> {</span><br><span class="line"> <span class="type">int</span> n; cin>>n;</span><br><span class="line"> <span class="type">int</span> ans=<span class="number">0</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++) cin>>a[i];</span><br><span class="line"> </span><br><span class="line"> <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><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">1</span>;j<i;j++)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(a[i]>a[j]) dp[i]=<span class="built_in">max</span>(dp[i],dp[j]+<span class="number">1</span>);</span><br><span class="line"> }</span><br><span class="line"> ans=<span class="built_in">max</span>(ans,dp[i]);</span><br><span class="line"> }</span><br><span class="line"> </span><br><span class="line"> <span class="comment">//最长下降子序列,就是上升子序列反过来</span></span><br><span class="line"> <span class="keyword">for</span>(<span class="type">int</span> i=n;i;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=n;j>i;j--)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(a[i]>a[j]) dp[i]=<span class="built_in">max</span>(dp[i],dp[j]+<span class="number">1</span>);</span><br><span class="line"> }</span><br><span class="line"> ans=<span class="built_in">max</span>(ans,dp[i]);</span><br><span class="line"> }</span><br><span class="line"> </span><br><span class="line"> cout<<ans<<endl;</span><br><span class="line"> }</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>]]></content>
<summary type="html"><div class="tag link"><a class="link-card" title="acwing 1017. 怪盗基德的滑翔翼" href="https://www.acwing.com/problem/content/1019/"><div class="lef</summary>
<category term="每日一题--栈队" scheme="https://hdheid.github.io/categories/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98-%E6%A0%88%E9%98%9F/"/>
<category term="动态规划" scheme="https://hdheid.github.io/tags/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/"/>
</entry>
<entry>
<title>2022-10-05队列队每日一题</title>
<link href="https://hdheid.github.io/posts/732a24ac.html"/>
<id>https://hdheid.github.io/posts/732a24ac.html</id>
<published>2022-10-05T11:16:21.205Z</published>
<updated>2022-10-05T11:17:09.926Z</updated>
<content type="html"><![CDATA[<div class="tag link"><a class="link-card" title="力扣" href="https://leetcode.cn/problems/minimize-xor/submissions/"><div class="left"><img src="https://img.hipyt.cn/imgs/2022/09/e3f773cfe32f6f4f.jpg"/></div><div class="right"><p class="text">力扣</p><p class="url">https://leetcode.cn/problems/minimize-xor/submissions/</p></div></a></div><h2 id="题目大意"><a href="#题目大意" class="headerlink" title="题目大意"></a>题目大意</h2><p>给出两个数 num1,num2。 求出一个数,他的二进制表示中 1 的个数与 num2 相同,并且它与 num1 异或之后最小。</p><h2 id="题意解析"><a href="#题意解析" class="headerlink" title="题意解析"></a>题意解析</h2><p>假设答案为 ans。<br>我们求出 num2 中 1 的个数,我们知道,当<strong>两个数的某一位都为 0 或者 1 的时候,那么异或为 0。</strong></p><blockquote><ol><li>我们从高位往低位遍历,当看到 num1 的二进制表示的某一位为 1 的时候,将一个 1 放在 ans 同样的位置</li><li>如果这个过程中 1 用完了,那么 ans 就是答案</li><li>如果遍历完之后,1 还没有用完,我们此时应该从低位往高位遍历,再将剩余的 1 全部放进去,其他位全部为 0</li></ol></blockquote><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> {</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"> <span class="function"><span class="type">int</span> <span class="title">minimizeXor</span><span class="params">(<span class="type">int</span> num1, <span class="type">int</span> num2)</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><br><span class="line"> <span class="keyword">while</span>(num2)</span><br><span class="line"> {</span><br><span class="line"> num2-=num2&-num2;</span><br><span class="line"> cnt++;</span><br><span class="line"> }<span class="comment">//求出置位数量</span></span><br><span class="line"></span><br><span class="line"> <span class="type">int</span> ans=<span class="number">0</span>;</span><br><span class="line"></span><br><span class="line"> <span class="type">long</span> <span class="type">long</span> num=<span class="number">2147483648</span>; <span class="comment">//2的31次方</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">31</span>;i>=<span class="number">0</span>;i--) <span class="comment">//能够消去的1从高位往低位补</span></span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(num1>>i&<span class="number">1</span>) ans+=num,cnt--;</span><br><span class="line"> num/=<span class="number">2</span>;</span><br><span class="line"> <span class="keyword">if</span>(!cnt) <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="comment">//反之从低位往高位补</span></span><br><span class="line"> {</span><br><span class="line"> num=<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<=<span class="number">31</span>;i++)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(!(ans>>i&<span class="number">1</span>)) ans+=num,cnt--;</span><br><span class="line"> num*=<span class="number">2</span>;</span><br><span class="line"> <span class="keyword">if</span>(!cnt) <span class="keyword">break</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> ans;</span><br><span class="line"> }</span><br><span class="line">};</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html"><div class="tag link"><a class="link-card" title="力扣" href="https://leetcode.cn/problems/minimize-xor/submissions/"><div class="left"><img s</summary>
<category term="每日一题--队列队" scheme="https://hdheid.github.io/categories/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98-%E9%98%9F%E5%88%97%E9%98%9F/"/>
<category term="位运算" scheme="https://hdheid.github.io/tags/%E4%BD%8D%E8%BF%90%E7%AE%97/"/>
</entry>
<entry>
<title>2022-09-27队列队每日一题</title>
<link href="https://hdheid.github.io/posts/de719beb.html"/>
<id>https://hdheid.github.io/posts/de719beb.html</id>
<published>2022-09-27T13:52:50.884Z</published>
<updated>2022-09-27T13:53:31.529Z</updated>
<content type="html"><![CDATA[<div class="tag link"><a class="link-card" title="AcWing 1100. 抓住那头牛" href="https://www.acwing.com/problem/content/1102/"><div class="left"><img src="https://img.hipyt.cn/imgs/2022/09/e3f773cfe32f6f4f.jpg"/></div><div class="right"><p class="text">AcWing 1100. 抓住那头牛</p><p class="url">https://www.acwing.com/problem/content/1102/</p></div></a></div><h2 id="题目大意"><a href="#题目大意" class="headerlink" title="题目大意"></a>题目大意</h2><p>在一个数轴上,有两个点 n 和 k。</p><blockquote><p> n 的值可以变成 n-1,n+1 ,n*2 ,每变一次权值加一<br>求最小权值使得 n 等于 k</p></blockquote><h2 id="题意解析"><a href="#题意解析" class="headerlink" title="题意解析"></a>题意解析</h2><p>一道 bfs 的题目,同样的,以 n 为起点,以 k 为终点。有三种情况,也即是 dx[] = { 1 , -1 , x } ,x 为当前点的坐标。<br><strong>这个题目的左右界限为 0 - 1e5 当然也可以是 0 - k+1。</strong></p><p>题外评论:属实是长见识了,还能这样做。</p><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string"><queue></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> N=<span class="number">1e5</span>+<span class="number">10</span>;</span><br><span class="line"><span class="type">int</span> d[N];</span><br><span class="line"><span class="type">int</span> n,k;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">bfs</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">if</span>(n>=k) { d[k]=n-k; <span class="keyword">return</span> ;}</span><br><span class="line"> </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"> <span class="keyword">while</span>(q.<span class="built_in">size</span>())</span><br><span class="line"> {</span><br><span class="line"> <span class="type">int</span> x=q.<span class="built_in">front</span>(); q.<span class="built_in">pop</span>();</span><br><span class="line"> <span class="type">const</span> <span class="type">int</span> dx[]={<span class="number">1</span>,<span class="number">-1</span>,x}; <span class="comment">//两倍就是加一个x</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="type">int</span> xx=x+dx[i];</span><br><span class="line"> <span class="keyword">if</span>(xx>=<span class="number">0</span>&&xx<=<span class="number">1e5</span>&&(!d[xx]))</span><br><span class="line"> {</span><br><span class="line"> d[xx]=d[x]+<span class="number">1</span>;</span><br><span class="line"> <span class="keyword">if</span>(xx==k) <span class="keyword">return</span> ;</span><br><span class="line"> q.<span class="built_in">push</span>(xx);</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"> cin>>n>>k;</span><br><span class="line"> </span><br><span class="line"> <span class="built_in">bfs</span>(n);</span><br><span class="line"> cout<<d[k];</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>]]></content>
<summary type="html"><div class="tag link"><a class="link-card" title="AcWing 1100. 抓住那头牛" href="https://www.acwing.com/problem/content/1102/"><div class="left"></summary>
<category term="每日一题--队列队" scheme="https://hdheid.github.io/categories/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98-%E9%98%9F%E5%88%97%E9%98%9F/"/>
<category term="bfs" scheme="https://hdheid.github.io/tags/bfs/"/>
</entry>
<entry>
<title>2022-09-26队列队每日一题</title>
<link href="https://hdheid.github.io/posts/c959ff2b.html"/>
<id>https://hdheid.github.io/posts/c959ff2b.html</id>
<published>2022-09-26T12:11:09.181Z</published>
<updated>2022-09-26T12:11:50.474Z</updated>
<content type="html"><![CDATA[<div class="tag link"><a class="link-card" title="AcWing 1096. 地牢大师" href="https://www.acwing.com/problem/content/description/1098/"><div class="left"><img src="https://img.hipyt.cn/imgs/2022/09/e3f773cfe32f6f4f.jpg"/></div><div class="right"><p class="text">AcWing 1096. 地牢大师</p><p class="url">https://www.acwing.com/problem/content/description/1098/</p></div></a></div><h2 id="题目大意"><a href="#题目大意" class="headerlink" title="题目大意"></a>题目大意</h2><p>给一个三维的迷宫,<strong>S</strong> 为起点,<strong>E</strong> 为终点,<strong>#</strong>为障碍物不能通过,求出是否能够走出这迷宫,如果能则求出走出来的时间,每走一格花费一分钟。</p><h2 id="题意解析"><a href="#题意解析" class="headerlink" title="题意解析"></a>题意解析</h2><p>常规的走迷宫题目,题目的拓展点是多加了一维,变成了三维走迷宫,做法还是一样的。</p><blockquote><ol><li>使用 bfs 先将起点入队,然后遍历起点附近能够走的点,将这个点的值设置为上一个点的值加一</li><li>那么 e 点坐标所对应的值就是走出迷宫的时间 </li><li>注意坐标一一对应,输入的时候是按照 z,x,y 的顺序输入的话,那么全局都的按照这个顺序</li></ol></blockquote><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string"><queue></span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string"><cstring></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="keyword">typedef</span> <span class="keyword">struct</span> <span class="title class_">Node</span></span><br><span class="line">{</span><br><span class="line"> <span class="type">int</span> z,x,y;</span><br><span class="line">}Node;</span><br><span class="line"><span class="type">const</span> <span class="type">int</span> N=<span class="number">110</span>;</span><br><span class="line"><span class="type">bool</span> st[N][N][N];</span><br><span class="line"><span class="type">char</span> g[N][N][N];</span><br><span class="line"><span class="type">int</span> d[N][N][N];</span><br><span class="line"><span class="type">int</span> l,r,c;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">bfs</span><span class="params">(<span class="type">int</span> z,<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"> <span class="type">const</span> <span class="type">int</span> dx[]={<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>,<span class="number">1</span>,<span class="number">-1</span>};</span><br><span class="line"> <span class="type">const</span> <span class="type">int</span> dy[]={<span class="number">0</span>,<span class="number">0</span>,<span class="number">1</span>,<span class="number">-1</span>,<span class="number">0</span>,<span class="number">0</span>};</span><br><span class="line"> <span class="type">const</span> <span class="type">int</span> dz[]={<span class="number">1</span>,<span class="number">-1</span>,<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>}; <span class="comment">//多加了一个坐标,相应增加</span></span><br><span class="line"> </span><br><span class="line"> d[z][x][y]=<span class="number">0</span>;</span><br><span class="line"> queue<Node> q;</span><br><span class="line"> q.<span class="built_in">push</span>({z,x,y}); <span class="comment">//按照 z,x,y 的顺序输入,则按照对应顺序处理</span></span><br><span class="line"> <span class="keyword">while</span>(q.<span class="built_in">size</span>())</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">auto</span> tt=q.<span class="built_in">front</span>(); 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">8</span>;i++)</span><br><span class="line"> {</span><br><span class="line"> <span class="type">int</span> zz=tt.z+dz[i],xx=tt.x+dx[i],yy=tt.y+dy[i];</span><br><span class="line"> <span class="keyword">if</span>(zz<<span class="number">0</span>||zz>=l||xx<<span class="number">0</span>||xx>=r||yy<<span class="number">0</span>||yy>=c||g[zz][xx][yy]==<span class="string">'#'</span>||st[zz][xx][yy]) <span class="keyword">continue</span>; </span><br><span class="line"> <span class="comment">// cout<<zz<<' '<<xx<<' '<<yy<<endl;</span></span><br><span class="line"> <span class="comment">// cout<<g[zz][xx][yy]<<' ';</span></span><br><span class="line"> d[zz][xx][yy]=d[tt.z][tt.x][tt.y]+<span class="number">1</span>;</span><br><span class="line"> st[zz][xx][yy]=<span class="number">1</span>;</span><br><span class="line"> q.<span class="built_in">push</span>({zz,xx,yy});</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><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"> Node s,e;</span><br><span class="line"> <span class="keyword">while</span>(cin>>l>>r>>c&&r)</span><br><span class="line"> {</span><br><span class="line"> <span class="built_in">memset</span>(st,<span class="number">0</span>,<span class="keyword">sizeof</span> st);</span><br><span class="line"> <span class="built_in">memset</span>(g,<span class="number">0</span>,<span class="keyword">sizeof</span> g);</span><br><span class="line"> <span class="built_in">memset</span>(d,<span class="number">0</span>,<span class="keyword">sizeof</span> d);</span><br><span class="line"> <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i<l;i++)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">for</span>(<span class="type">int</span> j=<span class="number">0</span>;j<r;j++)</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<c;k++)</span><br><span class="line"> {</span><br><span class="line"> cin>>g[i][j][k];</span><br><span class="line"> <span class="keyword">if</span>(g[i][j][k]==<span class="string">'S'</span>) s={i,j,k}; <span class="comment">//标记起点终点坐标</span></span><br><span class="line"> <span class="keyword">if</span>(g[i][j][k]==<span class="string">'E'</span>) e={i,j,k};</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="built_in">bfs</span>(s.z,s.x,s.y);</span><br><span class="line"> <span class="comment">// cout<<endl;</span></span><br><span class="line"> <span class="keyword">if</span>(d[e.z][e.x][e.y]) cout<<<span class="string">"Escaped in "</span><<d[e.z][e.x][e.y]<<<span class="string">" minute(s)."</span><<endl;</span><br><span class="line"> <span class="keyword">else</span> cout<<<span class="string">"Trapped!"</span><<endl;</span><br><span class="line"> }</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>]]></content>
<summary type="html"><div class="tag link"><a class="link-card" title="AcWing 1096. 地牢大师" href="https://www.acwing.com/problem/content/description/1098/"><div cl</summary>
<category term="每日一题--队列队" scheme="https://hdheid.github.io/categories/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98-%E9%98%9F%E5%88%97%E9%98%9F/"/>
<category term="bfs" scheme="https://hdheid.github.io/tags/bfs/"/>
</entry>
<entry>
<title>2022-09-25队列队每日一题</title>
<link href="https://hdheid.github.io/posts/f021526b.html"/>
<id>https://hdheid.github.io/posts/f021526b.html</id>
<published>2022-09-25T09:03:01.765Z</published>
<updated>2022-09-25T09:11:38.367Z</updated>
<content type="html"><![CDATA[<div class="tag link"><a class="link-card" title="力扣 4620. 旅行" href="https://www.acwing.com/problem/content/4623/"><div class="left"><img src="https://img.hipyt.cn/imgs/2022/09/e3f773cfe32f6f4f.jpg"/></div><div class="right"><p class="text">力扣 4620. 旅行</p><p class="url">https://www.acwing.com/problem/content/4623/</p></div></a></div><h2 id="题目大意"><a href="#题目大意" class="headerlink" title="题目大意"></a>题目大意</h2><p>有 n 个节点,n-1 个边组成一个树。每个节点都有一个能量值,每条边都有一个权值。<span class='p red'>每当经过一个节点,则会获得节点的能量值,经过一条边的时候,会消耗相应权值的能量</span>。<br><strong>要求:</strong></p><blockquote><ol><li>在经过任意一条边的之前,你拥有的能量不小于该边的权值</li><li>在 1 的前提下,可以选择任意一条路径(<strong>没有重复节点和重复边</strong>),尽可能使得剩下能量最大</li></ol></blockquote><p><strong>求出最大的能量剩余。</strong></p><h2 id="题意解析"><a href="#题意解析" class="headerlink" title="题意解析"></a>题意解析</h2><p>此题目脱于树形 dp 的模版题<a href="https://www.acwing.com/problem/content/1074/">AcWing 1072. 树的最长路径</a>。只是所求稍微有些变化。<br><br><br>同样的,对于某一个节点,以该节点<strong>为根,找到剩余最多能量和次多能量的两条路径</strong>,这两条路径加上当前节点则是最多能量的一种情况,我们找到所有节点的这种情况,取最大值,即是答案。<br>当我们不去注意条件一的时候,也就是可能存在到达某一个节点的时候能量为负数。<strong>但是最大的能量剩余的路径一定是在每一个节点剩余的能量都不小于零</strong>。</p><p><br><br><br></p><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><p><a href="https://www.acwing.com/solution/content/29832/">参考自树形 dp 题解 1</a></p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string"><cstring></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="meta">#<span class="keyword">define</span> LL long long </span></span><br><span class="line"><span class="type">const</span> <span class="type">int</span> N=<span class="number">3e5</span>+<span class="number">10</span>;</span><br><span class="line"><span class="type">int</span> e[N<<<span class="number">1</span>],ne[N<<<span class="number">1</span>],h[N],w[N<<<span class="number">1</span>],idx; </span><br><span class="line">LL v[N];</span><br><span class="line">LL ans;</span><br><span class="line"><span class="type">int</span> n;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">add</span><span class="params">(<span class="type">int</span> a,<span class="type">int</span> b,<span class="type">int</span> c)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function">LL <span class="title">dfs</span><span class="params">(<span class="type">int</span> u,<span class="type">int</span> fa)</span> <span class="comment">//以u为根的最大剩余能量(加上节点u的能量)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> LL d1=<span class="number">0</span>,d2=<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=h[u];~i;i=ne[i])</span><br><span class="line"> {</span><br><span class="line"> <span class="type">int</span> j=e[i];</span><br><span class="line"> <span class="keyword">if</span>(j==fa) <span class="keyword">continue</span>; <span class="comment">//保证迭代的时候不会回到父节点</span></span><br><span class="line"> <span class="comment">// printf("%d %d %lld %lld\n",j,u,dfs(j,u),ans);</span></span><br><span class="line"> LL d=<span class="built_in">dfs</span>(j,u)-w[i]; <span class="comment">//j 为 u 的子节点</span></span><br><span class="line"> <span class="keyword">if</span>(d>=d1) d2=d1,d1=d; </span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(d>d2) d2=d;</span><br><span class="line"> }</span><br><span class="line"> </span><br><span class="line"> ans=<span class="built_in">max</span>(d1+d2+v[u],ans); </span><br><span class="line"> <span class="comment">//两条路径的剩余能量加上当前节点的能量,就是这一整条路径的剩余能量</span></span><br><span class="line"> </span><br><span class="line"> <span class="keyword">return</span> <span class="built_in">max</span>(d1+v[u],v[u]); <span class="comment">//考虑到 d1 可能为负数,所以当 d1 为负数的时候,可以直接抛弃掉这条路径</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">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="built_in">memset</span>(h,<span class="number">-1</span>,<span class="keyword">sizeof</span> h);</span><br><span class="line"> <span class="built_in">scanf</span>(<span class="string">"%d"</span>,&n);</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 class="built_in">scanf</span>(<span class="string">"%d"</span>,&v[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><br><span class="line"> <span class="type">int</span> a,b,c;</span><br><span class="line"> <span class="built_in">scanf</span>(<span class="string">"%d%d%d"</span>,&a,&b,&c);</span><br><span class="line"> <span class="built_in">add</span>(a,b,c);</span><br><span class="line"> <span class="built_in">add</span>(b,a,c);</span><br><span class="line"> }</span><br><span class="line"> </span><br><span class="line"> <span class="built_in">dfs</span>(<span class="number">1</span>,<span class="number">-1</span>);</span><br><span class="line"> </span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">"%lld"</span>,ans);</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><p><br><br><br></p><p><a href="https://www.acwing.com/solution/content/63883/">参考自树形 dp 题解 2</a></p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string"><cstring></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="meta">#<span class="keyword">define</span> LL long long</span></span><br><span class="line"><span class="type">const</span> <span class="type">int</span> N=<span class="number">3e5</span>+<span class="number">10</span>;</span><br><span class="line"><span class="type">int</span> e[N<<<span class="number">1</span>],ne[N<<<span class="number">1</span>],h[N],w[N<<<span class="number">1</span>],idx;</span><br><span class="line">LL v[N];</span><br><span class="line">LL f[N];</span><br><span class="line">LL ans;</span><br><span class="line"><span class="type">int</span> n;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">add</span><span class="params">(<span class="type">int</span> a,<span class="type">int</span> b,<span class="type">int</span> c)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="comment">//f[u] 表示以u为根的最大剩余能量(包括u节点的能量)</span></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">dfs</span><span class="params">(<span class="type">int</span> u,<span class="type">int</span> fa)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> LL d1=<span class="number">0</span>,d2=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">for</span>(<span class="type">int</span> i=h[u];~i;i=ne[i])</span><br><span class="line"> {</span><br><span class="line"> <span class="type">int</span> j=e[i];</span><br><span class="line"> <span class="keyword">if</span>(j==fa) <span class="keyword">continue</span>;</span><br><span class="line"> <span class="built_in">dfs</span>(j,u); <span class="comment">//迭代处理子树</span></span><br><span class="line"> </span><br><span class="line"> <span class="keyword">if</span>(f[j]-w[i]>=d1) d2=d1,d1=f[j]-w[i];</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(f[j]-w[i]>d2) d2=f[j]-w[i];</span><br><span class="line"> </span><br><span class="line"> }</span><br><span class="line"> </span><br><span class="line"> ans=<span class="built_in">max</span>(d1+d2+v[u],ans);</span><br><span class="line"> </span><br><span class="line"> f[u]=d1+v[u];</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="built_in">memset</span>(h,<span class="number">-1</span>,<span class="keyword">sizeof</span> h);</span><br><span class="line"> <span class="built_in">scanf</span>(<span class="string">"%d"</span>,&n);</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 class="built_in">scanf</span>(<span class="string">"%d"</span>,&v[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><br><span class="line"> <span class="type">int</span> a,b,c;</span><br><span class="line"> <span class="built_in">scanf</span>(<span class="string">"%d%d%d"</span>,&a,&b,&c);</span><br><span class="line"> <span class="built_in">add</span>(a,b,c);</span><br><span class="line"> <span class="built_in">add</span>(b,a,c);</span><br><span class="line"> }</span><br><span class="line"> </span><br><span class="line"> <span class="built_in">dfs</span>(<span class="number">1</span>,<span class="number">-1</span>);</span><br><span class="line"> </span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">"%lld"</span>,ans);</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>]]></content>
<summary type="html"><div class="tag link"><a class="link-card" title="力扣 4620. 旅行" href="https://www.acwing.com/problem/content/4623/"><div class="left"><img sr</summary>
<category term="每日一题--队列队" scheme="https://hdheid.github.io/categories/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98-%E9%98%9F%E5%88%97%E9%98%9F/"/>
<category term="树形dp" scheme="https://hdheid.github.io/tags/%E6%A0%91%E5%BD%A2dp/"/>
</entry>
<entry>
<title>2022-09-24队列队每日一题</title>
<link href="https://hdheid.github.io/posts/e70936ab.html"/>
<id>https://hdheid.github.io/posts/e70936ab.html</id>
<published>2022-09-24T10:59:15.856Z</published>
<updated>2022-09-24T11:00:07.607Z</updated>
<content type="html"><![CDATA[<div class="tag link"><a class="link-card" title="力扣 1652. 拆炸弹" href="https://leetcode.cn/problems/defuse-the-bomb/"><div class="left"><img src="https://img.hipyt.cn/imgs/2022/09/e3f773cfe32f6f4f.jpg"/></div><div class="right"><p class="text">力扣 1652. 拆炸弹</p><p class="url">https://leetcode.cn/problems/defuse-the-bomb/</p></div></a></div><h2 id="题目大意"><a href="#题目大意" class="headerlink" title="题目大意"></a>题目大意</h2><p>给出一个长度为 n 的数组 code 和一个值 k,对于 code 的每一个值 code[i] ,<strong>要求将其替换成 i 右边 k 个数值的和</strong>。</p><blockquote><ol><li>code[n-1] 的下一个元素是 code[0] ,即 code 数组是循环的</li><li>当 k 为零的时候,所有的值全部为零</li><li>当 k 为负数的时候,是用 i 的前面 k 个数值的和来替换</li></ol></blockquote><h2 id="题意解析"><a href="#题意解析" class="headerlink" title="题意解析"></a>题意解析</h2><p>唯一要注意的就是循环问题,我们可以将 code 后面在加上一个 code 数组命名为 cnt 数组。</p><blockquote><ol><li>当 k 大于零的时候,我们在前面一段进行处理</li><li>当 k 小于零的时候,我们在后面一段进行处理</li></ol></blockquote><p>这样就可以避免取模和数组越界问题。</p><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> {</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"> <span class="function">vector<<span class="type">int</span>> <span class="title">decrypt</span><span class="params">(vector<<span class="type">int</span>>& code, <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> n=code.<span class="built_in">size</span>();</span><br><span class="line"> <span class="function">vector<<span class="type">int</span>> <span class="title">cnt</span><span class="params">(n*<span class="number">2</span>,<span class="number">0</span>)</span></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++) cnt[i]=cnt[i+n]=code[i],code[i]=<span class="number">0</span>; </span><br><span class="line"> </span><br><span class="line"> <span class="keyword">if</span>(k)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(k><span class="number">0</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<n;i++) </span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">for</span>(<span class="type">int</span> j=i+<span class="number">1</span>;j<=k+i;j++) code[i]+=cnt[j]; <span class="comment">//在前面一段进行处理</span></span><br><span class="line"> }</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="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"> <span class="keyword">for</span>(<span class="type">int</span> j=i+n<span class="number">-1</span>;j>=i+n+k;j--) code[i]+=cnt[j]; <span class="comment">//在后面一段进行处理</span></span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> code;</span><br><span class="line"> }</span><br><span class="line">};</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html"><div class="tag link"><a class="link-card" title="力扣 1652. 拆炸弹" href="https://leetcode.cn/problems/defuse-the-bomb/"><div class="left"><img </summary>
<category term="每日一题--队列队" scheme="https://hdheid.github.io/categories/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98-%E9%98%9F%E5%88%97%E9%98%9F/"/>
<category term="技巧题" scheme="https://hdheid.github.io/tags/%E6%8A%80%E5%B7%A7%E9%A2%98/"/>
</entry>
<entry>
<title>2022-09-23队列队每日一题</title>
<link href="https://hdheid.github.io/posts/82d008eb.html"/>
<id>https://hdheid.github.io/posts/82d008eb.html</id>
<published>2022-09-24T10:42:08.119Z</published>
<updated>2022-09-24T11:00:07.606Z</updated>
<content type="html"><![CDATA[<div class="tag link"><a class="link-card" title="力扣 707. 设计链表" href="https://leetcode.cn/problems/design-linked-list/"><div class="left"><img src="https://img.hipyt.cn/imgs/2022/09/e3f773cfe32f6f4f.jpg"/></div><div class="right"><p class="text">力扣 707. 设计链表</p><p class="url">https://leetcode.cn/problems/design-linked-list/</p></div></a></div><h2 id="题目大意"><a href="#题目大意" class="headerlink" title="题目大意"></a>题目大意</h2><p>要求设计一个链表,实现<strong>按节点查找数值、在链表中插入数值、从头或者尾插入数值、删除某个节点</strong>。</p><h2 id="题意解析"><a href="#题意解析" class="headerlink" title="题意解析"></a>题意解析</h2><p>常规的数据结构题目,具体实现在代码中。</p><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">MyLinkedList</span> </span><br><span class="line">{</span><br><span class="line"><span class="keyword">private</span>:</span><br><span class="line"> <span class="type">int</span> size=<span class="number">0</span>;</span><br><span class="line"> ListNode *head;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"> <span class="built_in">MyLinkedList</span>() </span><br><span class="line"> {</span><br><span class="line"> size=<span class="number">0</span>;</span><br><span class="line"> head=<span class="keyword">new</span> <span class="built_in">ListNode</span>(); <span class="comment">//初始化头节点</span></span><br><span class="line"> head->next=<span class="literal">NULL</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">get</span><span class="params">(<span class="type">int</span> index)</span> </span></span><br><span class="line"><span class="function"> </span>{</span><br><span class="line"> <span class="keyword">if</span>(index<<span class="number">0</span>||index>=size) <span class="keyword">return</span> <span class="number">-1</span>; <span class="comment">//当size等于0时,为第一个节点</span></span><br><span class="line"> ListNode *p=head;</span><br><span class="line"> <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i<=index;i++) p=p->next;</span><br><span class="line"> <span class="keyword">return</span> p->val;</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">addAtHead</span><span class="params">(<span class="type">int</span> val)</span> </span></span><br><span class="line"><span class="function"> </span>{</span><br><span class="line"> ListNode *p=<span class="keyword">new</span> <span class="built_in">ListNode</span>(val);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span>(head->next) p->next=head->next;</span><br><span class="line"> <span class="keyword">else</span> p->next=<span class="literal">NULL</span>;</span><br><span class="line"></span><br><span class="line"> head->next=p; <span class="comment">//头插法</span></span><br><span class="line"> size++;</span><br><span class="line"> </span><br><span class="line"> <span class="comment">// ListNode *s=head->next;</span></span><br><span class="line"> <span class="comment">// while(s)</span></span><br><span class="line"> <span class="comment">// {</span></span><br><span class="line"> <span class="comment">// cout<<s->val<<' ';</span></span><br><span class="line"> <span class="comment">// s=s->next;</span></span><br><span class="line"> <span class="comment">// }</span></span><br><span class="line"> <span class="comment">// cout<<endl;</span></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">addAtTail</span><span class="params">(<span class="type">int</span> val)</span> </span></span><br><span class="line"><span class="function"> </span>{</span><br><span class="line"> ListNode *p=head;</span><br><span class="line"> <span class="comment">//尾插法</span></span><br><span class="line"> <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i<size;i++) p=p->next;</span><br><span class="line"> ListNode *q=<span class="keyword">new</span> <span class="built_in">ListNode</span>(val);</span><br><span class="line"> q->next=<span class="literal">NULL</span>; </span><br><span class="line"> p->next=q;</span><br><span class="line"> size++;</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">addAtIndex</span><span class="params">(<span class="type">int</span> index, <span class="type">int</span> val)</span> </span></span><br><span class="line"><span class="function"> </span>{</span><br><span class="line"> <span class="comment">//插入操作</span></span><br><span class="line"> <span class="keyword">if</span>(index>size) <span class="keyword">return</span> ;</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(index<<span class="number">0</span>) <span class="built_in">addAtHead</span>(val);</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> {</span><br><span class="line"> ListNode *p=head;</span><br><span class="line"> <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i<index;i++) p=p->next; </span><br><span class="line"> ListNode *q=<span class="keyword">new</span> <span class="built_in">ListNode</span>(val);</span><br><span class="line"> q->next=p->next;</span><br><span class="line"> p->next=q;</span><br><span class="line"> size++;</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">deleteAtIndex</span><span class="params">(<span class="type">int</span> index)</span> </span></span><br><span class="line"><span class="function"> </span>{</span><br><span class="line"> <span class="comment">//删除操作</span></span><br><span class="line"> <span class="keyword">if</span>(index<<span class="number">0</span>||index>=size) <span class="keyword">return</span> ;</span><br><span class="line"> ListNode *p=head;</span><br><span class="line"> <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i<index;i++) p=p->next;</span><br><span class="line"> ListNode *q=p->next;</span><br><span class="line"> p->next=p->next->next; </span><br><span class="line"> <span class="built_in">delete</span>(q);</span><br><span class="line"> size--;</span><br><span class="line"> }</span><br><span class="line">};</span><br><span class="line"></span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * Your MyLinkedList object will be instantiated and called as such:</span></span><br><span class="line"><span class="comment"> * MyLinkedList* obj = new MyLinkedList();</span></span><br><span class="line"><span class="comment"> * int param_1 = obj->get(index);</span></span><br><span class="line"><span class="comment"> * obj->addAtHead(val);</span></span><br><span class="line"><span class="comment"> * obj->addAtTail(val);</span></span><br><span class="line"><span class="comment"> * obj->addAtIndex(index,val);</span></span><br><span class="line"><span class="comment"> * obj->deleteAtIndex(index);</span></span><br><span class="line"><span class="comment"> */</span></span><br></pre></td></tr></table></figure>]]></content>
<summary type="html"><div class="tag link"><a class="link-card" title="力扣 707. 设计链表" href="https://leetcode.cn/problems/design-linked-list/"><div class="left"><i</summary>
<category term="每日一题--队列队" scheme="https://hdheid.github.io/categories/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98-%E9%98%9F%E5%88%97%E9%98%9F/"/>
<category term="链表" scheme="https://hdheid.github.io/tags/%E9%93%BE%E8%A1%A8/"/>
</entry>
<entry>
<title>2022-09-22队列队每日一题</title>
<link href="https://hdheid.github.io/posts/95f86c2b.html"/>
<id>https://hdheid.github.io/posts/95f86c2b.html</id>
<published>2022-09-24T10:36:04.319Z</published>
<updated>2022-09-24T11:00:07.605Z</updated>
<content type="html"><![CDATA[<div class="tag link"><a class="link-card" title="力扣 2414. 最长的字母序连续子字符串的长度" href="https://leetcode.cn/problems/length-of-the-longest-alphabetical-continuous-substring/"><div class="left"><img src="https://img.hipyt.cn/imgs/2022/09/e3f773cfe32f6f4f.jpg"/></div><div class="right"><p class="text">力扣 2414. 最长的字母序连续子字符串的长度</p><p class="url">https://leetcode.cn/problems/length-of-the-longest-alphabetical-continuous-substring/</p></div></a></div><h2 id="题目大意"><a href="#题目大意" class="headerlink" title="题目大意"></a>题目大意</h2><p>给出一个字符串,求出最长的连续子数组。<strong>连续数组指的是类似于 “abcd” 这样前后字母在字母表中连续的字符串</strong>。</p><h2 id="题意解析"><a href="#题意解析" class="headerlink" title="题意解析"></a>题意解析</h2><p>i遍历每一个字母,j 从 i 开始往右走,直到不连续位置,定义一个ans 记录最大长度。</p><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> {</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"> <span class="function"><span class="type">int</span> <span class="title">longestContinuousSubstring</span><span class="params">(string s)</span> </span></span><br><span class="line"><span class="function"> </span>{</span><br><span class="line"> <span class="type">int</span> ans=<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<s.<span class="built_in">size</span>();)</span><br><span class="line"> {</span><br><span class="line"> <span class="type">int</span> j=i+<span class="number">1</span>;</span><br><span class="line"> <span class="keyword">while</span>(j<s.<span class="built_in">size</span>()&&(s[j]-s[j<span class="number">-1</span>]==<span class="number">1</span>)) j++; <span class="comment">//双指针</span></span><br><span class="line"> ans=<span class="built_in">max</span>(ans,j-i);</span><br><span class="line"> i=j;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> ans;</span><br><span class="line"> </span><br><span class="line"> }</span><br><span class="line">};</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html"><div class="tag link"><a class="link-card" title="力扣 2414. 最长的字母序连续子字符串的长度" href="https://leetcode.cn/problems/length-of-the-longest-alphabe</summary>
<category term="每日一题--队列队" scheme="https://hdheid.github.io/categories/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98-%E9%98%9F%E5%88%97%E9%98%9F/"/>
<category term="双指针" scheme="https://hdheid.github.io/tags/%E5%8F%8C%E6%8C%87%E9%92%88/"/>
</entry>
<entry>
<title>2022-09-21队列队每日一题</title>
<link href="https://hdheid.github.io/posts/ac80c16b.html"/>
<id>https://hdheid.github.io/posts/ac80c16b.html</id>
<published>2022-09-24T10:29:43.801Z</published>
<updated>2022-09-24T11:00:07.601Z</updated>
<content type="html"><![CDATA[<div class="tag link"><a class="link-card" title="力扣 648. 单词替换" href="https://leetcode.cn/problems/replace-words/"><div class="left"><img src="https://img.hipyt.cn/imgs/2022/09/e3f773cfe32f6f4f.jpg"/></div><div class="right"><p class="text">力扣 648. 单词替换</p><p class="url">https://leetcode.cn/problems/replace-words/</p></div></a></div><h2 id="题目大意"><a href="#题目大意" class="headerlink" title="题目大意"></a>题目大意</h2><p>给出一个词根数组,再给出一句话,要求将这句话里面的单词全部换成对应的词根,要求尽量是最短的词根。</p><h2 id="题意解析"><a href="#题意解析" class="headerlink" title="题意解析"></a>题意解析</h2><p>如题目所示,换句话说就是<span class='p red'>将一句话里面所有单词全部更换为其对应前缀数组里面出现的前缀,词根数组也就是前缀数组</span>。 我们要做的就是通过词根数组构造字典树(前缀树),然后再检索每一个单词,寻找最短的前缀。</p><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">const</span> <span class="type">int</span> N=<span class="number">4e4</span>+<span class="number">9e3</span>+<span class="number">10</span>;</span><br><span class="line"><span class="type">int</span> son[N][<span class="number">26</span>],cnt[N],idx;</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> </span><br><span class="line">{</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"> <span class="function"><span class="type">void</span> <span class="title">init</span><span class="params">()</span> <span class="comment">//初始化</span></span></span><br><span class="line"><span class="function"> </span>{</span><br><span class="line"> idx=<span class="number">0</span>;</span><br><span class="line"> <span class="built_in">memset</span>(son,<span class="number">0</span>,<span class="keyword">sizeof</span> son);</span><br><span class="line"> <span class="built_in">memset</span>(cnt,<span class="number">0</span>,<span class="keyword">sizeof</span> cnt);</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">insert</span><span class="params">(string s)</span> <span class="comment">//将字符串插入字典树</span></span></span><br><span class="line"><span class="function"> </span>{</span><br><span class="line"> <span class="type">int</span> p=<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<s.<span class="built_in">size</span>();i++)</span><br><span class="line"> {</span><br><span class="line"> <span class="type">int</span> u=s[i]-<span class="string">'a'</span>;</span><br><span class="line"> <span class="keyword">if</span>(!son[p][u]) son[p][u]=++idx;</span><br><span class="line"> p=son[p][u];</span><br><span class="line"> <span class="keyword">if</span>(cnt[p]) <span class="keyword">break</span>; <span class="comment">//如果存在比这个词跟更短的词根,就没有必要继续了</span></span><br><span class="line"> }</span><br><span class="line"> cnt[p]=<span class="number">1</span>; <span class="comment">//标记单词末尾字符</span></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">change</span><span class="params">(string &s)</span></span></span><br><span class="line"><span class="function"> </span>{</span><br><span class="line"> <span class="type">int</span> p=<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<s.<span class="built_in">size</span>();i++)</span><br><span class="line"> {</span><br><span class="line"> <span class="type">int</span> u=s[i]-<span class="string">'a'</span>;</span><br><span class="line"> p=son[p][u];</span><br><span class="line"> <span class="keyword">if</span>(!p) <span class="keyword">return</span> ;</span><br><span class="line"> <span class="keyword">if</span>(cnt[p]) { s=s.<span class="built_in">substr</span>(<span class="number">0</span>,i+<span class="number">1</span>); <span class="keyword">return</span> ; } <span class="comment">//取前缀</span></span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="function">string <span class="title">replaceWords</span><span class="params">(vector<string>& dictionary, string s)</span> </span></span><br><span class="line"><span class="function"> </span>{</span><br><span class="line"> <span class="built_in">init</span>();</span><br><span class="line"></span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">auto</span> str : dictionary) <span class="built_in">insert</span>(str);</span><br><span class="line"></span><br><span class="line"> string ans;</span><br><span class="line"> <span class="function">istringstream <span class="title">str</span><span class="params">(s)</span></span>;</span><br><span class="line"> string ss;</span><br><span class="line"> <span class="keyword">while</span>(str >> ss) <span class="built_in">change</span>(ss),ans+=ss+<span class="string">' '</span>; <span class="comment">//将一句话中的单词一个一个提取出来 </span></span><br><span class="line"> ans.<span class="built_in">pop_back</span>(); <span class="comment">//去掉最后面的一个空格</span></span><br><span class="line"> <span class="keyword">return</span> ans;</span><br><span class="line"> }</span><br><span class="line">};</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html"><div class="tag link"><a class="link-card" title="力扣 648. 单词替换" href="https://leetcode.cn/problems/replace-words/"><div class="left"><img sr</summary>
<category term="每日一题--队列队" scheme="https://hdheid.github.io/categories/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98-%E9%98%9F%E5%88%97%E9%98%9F/"/>
<category term="字典树" scheme="https://hdheid.github.io/tags/%E5%AD%97%E5%85%B8%E6%A0%91/"/>
</entry>
<entry>
<title>2022-09-20队列队每日一题</title>
<link href="https://hdheid.github.io/posts/bba8a5ab.html"/>
<id>https://hdheid.github.io/posts/bba8a5ab.html</id>
<published>2022-09-24T10:19:59.452Z</published>
<updated>2022-09-24T11:03:46.742Z</updated>
<content type="html"><![CDATA[<div class="tag link"><a class="link-card" title="力扣 208. 实现 Trie (前缀树)" href="https://leetcode.cn/problems/implement-trie-prefix-tree/"><div class="left"><img src="https://img.hipyt.cn/imgs/2022/09/e3f773cfe32f6f4f.jpg"/></div><div class="right"><p class="text">力扣 208. 实现 Trie (前缀树)</p><p class="url">https://leetcode.cn/problems/implement-trie-prefix-tree/</p></div></a></div><h2 id="题目大意"><a href="#题目大意" class="headerlink" title="题目大意"></a>题目大意</h2><p>题目要求构造一个字典树,实现字典树的初始化、字符串的插入、字符串的检索、查找树里面是否有相应的前缀。</p><h2 id="题意解析"><a href="#题意解析" class="headerlink" title="题意解析"></a>题意解析</h2><p>该题目意在构造一个字典树,实现基本功能,这里也是使用数组模拟字典树。我们在插入完一个字符串之后,对其最后一个字符进行标记,那么<strong>检索的字符串的时候,如果最后面一个单词在字典树中已经进行了标记,那么就证明检索成功。同理,如果我们查找前缀的时候发现相应的字符并没有对应的节点(还没有开它的节点 ),那么字典树中就没有这个前缀。</strong></p><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">const</span> <span class="type">int</span> N=<span class="number">3e4</span>+<span class="number">1e3</span>+<span class="number">10</span>; <span class="comment">//数组模拟字典树</span></span><br><span class="line"><span class="type">int</span> son[N][<span class="number">26</span>],cnt[N],idx;</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Trie</span> </span><br><span class="line">{</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"> <span class="built_in">Trie</span>() <span class="comment">//初始化</span></span><br><span class="line"> {</span><br><span class="line"> idx=<span class="number">0</span>; </span><br><span class="line"> <span class="built_in">memset</span>(cnt,<span class="number">0</span>,<span class="keyword">sizeof</span> cnt);</span><br><span class="line"> <span class="built_in">memset</span>(son,<span class="number">0</span>,<span class="keyword">sizeof</span> son);</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">insert</span><span class="params">(string word)</span> </span></span><br><span class="line"><span class="function"> </span>{</span><br><span class="line"> <span class="type">int</span> p=<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<word.<span class="built_in">size</span>();i++)</span><br><span class="line"> {</span><br><span class="line"> <span class="type">int</span> u=word[i]-<span class="string">'a'</span>;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span>(!son[p][u]) son[p][u]=++idx;</span><br><span class="line"> p=son[p][u];</span><br><span class="line"> }</span><br><span class="line"> cnt[p]=<span class="number">1</span>; <span class="comment">//对其末尾字符进行标记</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">search</span><span class="params">(string word)</span> </span></span><br><span class="line"><span class="function"> </span>{</span><br><span class="line"> <span class="type">int</span> p=<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<word.<span class="built_in">size</span>();i++)</span><br><span class="line"> {</span><br><span class="line"> <span class="type">int</span> u=word[i]-<span class="string">'a'</span>;</span><br><span class="line"> <span class="keyword">if</span>(!son[p][u]) <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line"> p=son[p][u];</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> cnt[p]; <span class="comment">//如果查找的字符的末尾单词在字典树中有标记,那么其已存在于字典树</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">startsWith</span><span class="params">(string prefix)</span> </span></span><br><span class="line"><span class="function"> </span>{</span><br><span class="line"> <span class="type">int</span> p=<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<prefix.<span class="built_in">size</span>();i++)</span><br><span class="line"> {</span><br><span class="line"> <span class="type">int</span> u=prefix[i]-<span class="string">'a'</span>;</span><br><span class="line"> <span class="keyword">if</span>(!son[p][u]) <span class="keyword">return</span> <span class="literal">false</span>; <span class="comment">//如果对应的字符未开节点,那么就没有对应的前缀</span></span><br><span class="line"> p=son[p][u];</span><br><span class="line"> }</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><br><span class="line"></span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * Your Trie object will be instantiated and called as such:</span></span><br><span class="line"><span class="comment"> * Trie* obj = new Trie();</span></span><br><span class="line"><span class="comment"> * obj->insert(word);</span></span><br><span class="line"><span class="comment"> * bool param_2 = obj->search(word);</span></span><br><span class="line"><span class="comment"> * bool param_3 = obj->startsWith(prefix);</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"></span><br></pre></td></tr></table></figure>]]></content>
<summary type="html"><div class="tag link"><a class="link-card" title="力扣 208. 实现 Trie (前缀树)" href="https://leetcode.cn/problems/implement-trie-prefix-tree/"><di</summary>
<category term="每日一题--队列队" scheme="https://hdheid.github.io/categories/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98-%E9%98%9F%E5%88%97%E9%98%9F/"/>
<category term="字典树" scheme="https://hdheid.github.io/tags/%E5%AD%97%E5%85%B8%E6%A0%91/"/>
</entry>
<entry>
<title>2022-09-19队列队每日一题</title>
<link href="https://hdheid.github.io/posts/6326de56.html"/>
<id>https://hdheid.github.io/posts/6326de56.html</id>
<published>2022-09-24T10:10:59.093Z</published>
<updated>2022-09-24T11:00:07.590Z</updated>
<content type="html"><![CDATA[<div class="tag link"><a class="link-card" title="力扣 2416. 字符串的前缀分数和" href="https://leetcode.cn/problems/sum-of-prefix-scores-of-strings/"><div class="left"><img src="https://img.hipyt.cn/imgs/2022/09/e3f773cfe32f6f4f.jpg"/></div><div class="right"><p class="text">力扣 2416. 字符串的前缀分数和</p><p class="url">https://leetcode.cn/problems/sum-of-prefix-scores-of-strings/</p></div></a></div><h2 id="题目大意"><a href="#题目大意" class="headerlink" title="题目大意"></a>题目大意</h2><p>题目给出一个长度为 n 的数组 words,该数组由非空字符串组成。<br>对于每一个 word,他的分数为<span class='p red'>他的所有前缀在 words 数组中为其他字符串的前缀的个数</span>。</p><p><br></p><h2 id="题意解析"><a href="#题意解析" class="headerlink" title="题意解析"></a>题意解析</h2><p>典型的字典树题目。如图所示:<br><div class="img-wrap"><div class="img-bg"><img class="img" src="https://img.hipyt.cn/imgs/2022/09/79027c913cab2dcc.jpg"/></div></div></p><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">const</span> <span class="type">int</span> N=<span class="number">4e5</span>+<span class="number">10</span>; <span class="comment">//数组模拟字典树</span></span><br><span class="line"><span class="type">int</span> son[N][<span class="number">26</span>],cnt[N],idx=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> </span><br><span class="line">{</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"> <span class="function"><span class="type">void</span> <span class="title">insert</span><span class="params">(string str)</span> <span class="comment">//往字典树中加入字符串,构造字典树</span></span></span><br><span class="line"><span class="function"> </span>{</span><br><span class="line"> <span class="type">int</span> p=<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> u=str[i]-<span class="string">'a'</span>;</span><br><span class="line"> <span class="keyword">if</span>(!son[p][u]) son[p][u]=++idx;</span><br><span class="line"> p=son[p][u];</span><br><span class="line"> cnt[p]++; <span class="comment">//节点值加一</span></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">query</span><span class="params">(string str,vector<<span class="type">int</span>> &ans)</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="type">int</span> p=<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> u=str[i]-<span class="string">'a'</span>;</span><br><span class="line"> p=son[p][u];</span><br><span class="line"> res+=cnt[p]; <span class="comment">//查找节点值,亦即分数</span></span><br><span class="line"> }</span><br><span class="line"> ans.<span class="built_in">push_back</span>(res);</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="function">vector<<span class="type">int</span>> <span class="title">sumPrefixScores</span><span class="params">(vector<string>& w)</span> </span></span><br><span class="line"><span class="function"> </span>{</span><br><span class="line"> idx=<span class="number">0</span>;</span><br><span class="line"> vector<<span class="type">int</span>> ans;</span><br><span class="line"> <span class="built_in">memset</span>(son,<span class="number">0</span>,<span class="keyword">sizeof</span> son); <span class="comment">//初始化</span></span><br><span class="line"> <span class="built_in">memset</span>(cnt,<span class="number">0</span>,<span class="keyword">sizeof</span> cnt);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">auto</span> s : w) <span class="built_in">insert</span>(s);</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">auto</span> s : w) <span class="built_in">query</span>(s,ans);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> ans;</span><br><span class="line"> }</span><br><span class="line">};</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html"><div class="tag link"><a class="link-card" title="力扣 2416. 字符串的前缀分数和" href="https://leetcode.cn/problems/sum-of-prefix-scores-of-strings/"><</summary>
<category term="每日一题--队列队" scheme="https://hdheid.github.io/categories/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98-%E9%98%9F%E5%88%97%E9%98%9F/"/>
<category term="字典树" scheme="https://hdheid.github.io/tags/%E5%AD%97%E5%85%B8%E6%A0%91/"/>
</entry>
<entry>
<title>2022-09-18队列队每日一题</title>
<link href="https://hdheid.github.io/posts/740eba96.html"/>
<id>https://hdheid.github.io/posts/740eba96.html</id>
<published>2022-09-21T14:19:04.848Z</published>
<updated>2022-09-21T15:51:16.254Z</updated>
<content type="html"><![CDATA[<div class="tag link"><a class="link-card" title="力扣 2411. 按位或最大的最小子数组长度" href="https://leetcode.cn/problems/smallest-subarrays-with-maximum-bitwise-or/"><div class="left"><img src="https://img.hipyt.cn/imgs/2022/09/e3f773cfe32f6f4f.jpg"/></div><div class="right"><p class="text">力扣 2411. 按位或最大的最小子数组长度</p><p class="url">https://leetcode.cn/problems/smallest-subarrays-with-maximum-bitwise-or/</p></div></a></div><h2 id="题目大意"><a href="#题目大意" class="headerlink" title="题目大意"></a>题目大意</h2><p>给出一个长度为 n 的数组 num ,所有的数都大于零,对于数组的每一个下标 i ( 0 <= i <= n-1 ),以 i 为起点向左找到最短的具有最大或运算值的子数组。最大或运算值的数组<strong>指的是将数组所有的数或运算得到的值</strong>。</p><h2 id="题意解析"><a href="#题意解析" class="headerlink" title="题意解析"></a>题意解析</h2><p>对于某一个下标 i,值为 num[i] ,我们可以知道如果果让一个数 x 与其按位或运算,想让值变大的话,<span class='p res'>那么在二进制上,num[i] 为 0 的位置 x 必须为 1</span>。<br>因此,我们可以倒序遍历 num 数组,并且用一个辅助数组 cnt 来记录二进制上某一位为 1 的数在 num 上的位置。然后,当我们需要计算 num[i] 的最短最大或运算的子数组的时候,我们已经记录了 num[i] 左边二进制某一位为一的数的位置,我们只需要<strong>找到所有在 num[i] 的二进制位为 0 的位置,但是某个是 1 在 cnt 的记录的位置取最大值即可</strong>,由于是从右往左覆盖记录的位置,所以 cnt 里面的值一定是最小的。</p><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> {</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"> <span class="function">vector<<span class="type">int</span>> <span class="title">smallestSubarrays</span><span class="params">(vector<<span class="type">int</span>>& n)</span> </span></span><br><span class="line"><span class="function"> </span>{</span><br><span class="line"> <span class="function">vector<<span class="type">int</span>> <span class="title">cnt</span><span class="params">(<span class="number">32</span>, <span class="number">-1</span>)</span></span>;<span class="comment">//看在哪一个位置的数的某一位为1</span></span><br><span class="line"> <span class="function">vector<<span class="type">int</span>> <span class="title">ans</span><span class="params">(n.size())</span></span>;</span><br><span class="line"> <span class="keyword">for</span>(<span class="type">int</span> i=n.<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> m=i;</span><br><span class="line"> <span class="keyword">for</span>(<span class="type">int</span> j=<span class="number">0</span>;j<<span class="number">32</span>;j++)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(n[i]>>j&<span class="number">1</span>) cnt[j]=i; <span class="comment">//因为从后往前,那么i必然越来越小,只要这个数的第j位为1,就直接记录下来</span></span><br><span class="line"> <span class="keyword">if</span>(cnt[j]!=<span class="number">-1</span>) m=<span class="built_in">max</span>(m,cnt[j]); <span class="comment">//找到能够保证每一位为1的最小位置(没有就算了)</span></span><br><span class="line"> }</span><br><span class="line"> ans[i]=m-i+<span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> ans;</span><br><span class="line"> }</span><br><span class="line">};</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html"><div class="tag link"><a class="link-card" title="力扣 2411. 按位或最大的最小子数组长度" href="https://leetcode.cn/problems/smallest-subarrays-with-maximum</summary>
<category term="每日一题--队列队" scheme="https://hdheid.github.io/categories/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98-%E9%98%9F%E5%88%97%E9%98%9F/"/>
<category term="位运算" scheme="https://hdheid.github.io/tags/%E4%BD%8D%E8%BF%90%E7%AE%97/"/>
</entry>
<entry>
<title>2022-09-16队列队每日一题</title>
<link href="https://hdheid.github.io/posts/bfbcc616.html"/>
<id>https://hdheid.github.io/posts/bfbcc616.html</id>
<published>2022-09-16T12:19:57.281Z</published>
<updated>2022-09-16T12:20:43.075Z</updated>
<content type="html"><![CDATA[<div class="tag link"><a class="link-card" title="力扣 1114. 棋盘问题" href="https://www.acwing.com/problem/content/description/1116/"><div class="left"><img src="https://img.hipyt.cn/imgs/2022/09/e3f773cfe32f6f4f.jpg"/></div><div class="right"><p class="text">力扣 1114. 棋盘问题</p><p class="url">https://www.acwing.com/problem/content/description/1116/</p></div></a></div><h2 id="题目大意"><a href="#题目大意" class="headerlink" title="题目大意"></a>题目大意</h2><p>给出一个棋盘,棋盘上为 <strong>‘#’</strong> 的位置才能放棋子,并且<strong>每一行每一列</strong>只能放一个旗子,有多组数据,当输入为 -1-1 的时候结束。</p><h2 id="题意解析"><a href="#题意解析" class="headerlink" title="题意解析"></a>题意解析</h2><p>这个题目与昨天的 n 皇后问题类似,区别在与它只放 k 个棋子,k 可能小于 n,并且只有特定区域才能放棋子。还是使用 DFS 的方法来做。</p><blockquote><p>一行一行的枚举,找到能放棋子的位置,cnt 计数,当放满 k 个棋子后,答案加一<br>这个题目有点需要注意的是:<strong>如果有一行没有放棋子那么还可以在下一行来放,这个需要手动添加</strong>。</p></blockquote><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string"><iostream></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> N=<span class="number">10</span>;</span><br><span class="line"><span class="type">char</span> g[N][N];</span><br><span class="line"><span class="type">bool</span> col[N];</span><br><span class="line"><span class="type">int</span> n,k;</span><br><span class="line"><span class="type">int</span> ans,cnt;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">dfs</span><span class="params">(<span class="type">int</span> u)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">if</span>(cnt==k) <span class="comment">//放完了就代表多了一种方法</span></span><br><span class="line"> {</span><br><span class="line"> ans++;</span><br><span class="line"> <span class="keyword">return</span> ;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span>(u>=n) <span class="keyword">return</span> ; <span class="comment">//如果遍历完了还没有放完,就代表着这一种方法不行</span></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<n;i++) <span class="comment">//遍历第 u 的每一列</span></span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(g[u][i]==<span class="string">'#'</span>&&!col[i])</span><br><span class="line"> { <span class="comment">//如果这一行能够放棋子</span></span><br><span class="line"> cnt++;</span><br><span class="line"> col[i]=<span class="number">1</span>;</span><br><span class="line"> <span class="built_in">dfs</span>(u+<span class="number">1</span>); <span class="comment">//那么进入下一行</span></span><br><span class="line"> cnt--; <span class="comment">//恢复现场</span></span><br><span class="line"> col[i]=<span class="number">0</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> </span><br><span class="line"> <span class="built_in">dfs</span>(u+<span class="number">1</span>); <span class="comment">//如果这一行不放棋子,那么直接进入下一行</span></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="keyword">while</span>(cin>>n>>k&&n!=<span class="number">-1</span>)</span><br><span class="line"> {</span><br><span class="line"> ans=<span class="number">0</span>,cnt=<span class="number">0</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<n;i++)</span><br><span class="line"> {</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><br><span class="line"> cin>>g[i][j];</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="built_in">dfs</span>(<span class="number">0</span>);</span><br><span class="line"> cout<<ans<<endl;</span><br><span class="line"> }</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>]]></content>
<summary type="html"><div class="tag link"><a class="link-card" title="力扣 1114. 棋盘问题" href="https://www.acwing.com/problem/content/description/1116/"><div class=</summary>
<category term="每日一题--队列队" scheme="https://hdheid.github.io/categories/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98-%E9%98%9F%E5%88%97%E9%98%9F/"/>
<category term="DFS" scheme="https://hdheid.github.io/tags/DFS/"/>
</entry>
<entry>
<title>2022-09-15队列队每日一题</title>
<link href="https://hdheid.github.io/posts/86c46b56.html"/>
<id>https://hdheid.github.io/posts/86c46b56.html</id>
<published>2022-09-15T10:05:52.467Z</published>
<updated>2022-09-15T10:18:38.904Z</updated>
<content type="html"><![CDATA[<div class="tag link"><a class="link-card" title="力扣 51. N 皇后" href="https://leetcode.cn/problems/n-queens/"><div class="left"><img src="https://img.hipyt.cn/imgs/2022/09/e3f773cfe32f6f4f.jpg"/></div><div class="right"><p class="text">力扣 51. N 皇后</p><p class="url">https://leetcode.cn/problems/n-queens/</p></div></a></div><h2 id="题目大意"><a href="#题目大意" class="headerlink" title="题目大意"></a>题目大意</h2><p>给出一个数 n,在一个 n x n 的矩阵中,摆上 n 个皇后,要求<strong>同一行、同一列、同一个斜线(左右)上只能存在一个皇后,皇后所在地用 ‘Q’ 表示,其他位置用 ‘.’ 表示</strong>,求出所有不同的摆放情况。</p><h2 id="题意解析"><a href="#题意解析" class="headerlink" title="题意解析"></a>题意解析</h2><p>如果采用 DFS 的想法,我们一行一行的枚举,<span class='p red'>对行进行深搜</span>。当我们判断到对 u 行的第 i 列是否能够放皇后的时候,如果能,继续判断第 u+1 行,如此循环。</p><p><br></p><p>因此,我们只需要判断在 <strong>[ u , i ]</strong> 这个点上能不能放皇后,不能就看下一列,能就直接跳到下一行。我们使用 col、dg、udg 三个数组来判断某个位置能不能放放后。</p><p><br></p><p>对于每一列,我们直接看 <strong>col[i]</strong> 是否为 false 即可。<br>我们如何使用 dg、udg 来判断对角线上是否有皇后呢?<br><div class="img-wrap"><div class="img-bg"><img class="img" src="https://www.hualigs.cn/image/6322f6ca87a7e.jpg"/></div></div></p><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">const</span> <span class="type">int</span> N=<span class="number">10</span>;</span><br><span class="line"><span class="type">int</span> col[N],dg[N<<<span class="number">1</span>],udg[N<<<span class="number">1</span>];</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> </span><br><span class="line">{</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"> <span class="function"><span class="type">void</span> <span class="title">dfs</span><span class="params">(<span class="type">int</span> u,<span class="type">int</span> n,vector<string> &res,vector<vector<string>> &ans)</span></span></span><br><span class="line"><span class="function"> </span>{</span><br><span class="line"> <span class="keyword">if</span>(u==n) <span class="comment">//如果成功放完</span></span><br><span class="line"> {</span><br><span class="line"> ans.<span class="built_in">push_back</span>(res);</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<n;i++)</span><br><span class="line"> {</span><br><span class="line"> <span class="comment">//对于每一列,判断这一列是否能够放一个皇后</span></span><br><span class="line"> <span class="keyword">if</span>(!col[i]&&!dg[i+u]&&!udg[n-u+i])</span><br><span class="line"> {</span><br><span class="line"> res[u][i]=<span class="string">'Q'</span>;</span><br><span class="line"> col[i]=dg[i+u]=udg[n-u+i]=<span class="literal">true</span>;</span><br><span class="line"> <span class="built_in">dfs</span>(u+<span class="number">1</span>,n,res,ans);</span><br><span class="line"> col[i]=dg[i+u]=udg[n-u+i]=<span class="literal">false</span>;</span><br><span class="line"> res[u][i]=<span class="string">'.'</span>;</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"> vector<vector<string>> <span class="built_in">solveNQueens</span>(<span class="type">int</span> n) </span><br><span class="line"> {</span><br><span class="line"> vector<string> res;</span><br><span class="line"> vector<vector<string>> ans;</span><br><span class="line"></span><br><span class="line"> string s;</span><br><span class="line"> <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i<n;i++) s+=<span class="string">'.'</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++) res.<span class="built_in">push_back</span>(s);</span><br><span class="line"> <span class="comment">//初始化</span></span><br><span class="line"></span><br><span class="line"> <span class="built_in">dfs</span>(<span class="number">0</span>,n,res,ans);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> ans;</span><br><span class="line"> }</span><br><span class="line">};</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html"><div class="tag link"><a class="link-card" title="力扣 51. N 皇后" href="https://leetcode.cn/problems/n-queens/"><div class="left"><img src="htt</summary>
<category term="每日一题--队列队" scheme="https://hdheid.github.io/categories/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98-%E9%98%9F%E5%88%97%E9%98%9F/"/>
<category term="DFS" scheme="https://hdheid.github.io/tags/DFS/"/>
</entry>
<entry>
<title>2022-09-14队列队每日一题</title>
<link href="https://hdheid.github.io/posts/91ec0f96.html"/>
<id>https://hdheid.github.io/posts/91ec0f96.html</id>
<published>2022-09-14T13:12:45.227Z</published>
<updated>2022-09-14T13:14:10.054Z</updated>
<content type="html"><![CDATA[<div class="tag link"><a class="link-card" title="力扣 1619. 删除某些元素后的数组均值" href="https://leetcode.cn/problems/mean-of-array-after-removing-some-elements/submissions/"><div class="left"><img src="https://img.hipyt.cn/imgs/2022/09/e3f773cfe32f6f4f.jpg"/></div><div class="right"><p class="text">力扣 1619. 删除某些元素后的数组均值</p><p class="url">https://leetcode.cn/problems/mean-of-array-after-removing-some-elements/submissions/</p></div></a></div><h2 id="题目大意"><a href="#题目大意" class="headerlink" title="题目大意"></a>题目大意</h2><p>把一个数组的前 %5 个数和后 %5 个数去掉,剩下的数求平均值。</p><h2 id="题意解析"><a href="#题意解析" class="headerlink" title="题意解析"></a>题意解析</h2><p>太简单略。</p><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> {</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"> <span class="function"><span class="type">double</span> <span class="title">trimMean</span><span class="params">(vector<<span class="type">int</span>>& arr)</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><br><span class="line"> <span class="built_in">sort</span>(arr.<span class="built_in">begin</span>(),arr.<span class="built_in">end</span>());</span><br><span class="line"> <span class="keyword">for</span>(<span class="type">int</span> i=arr.<span class="built_in">size</span>()*<span class="number">0.05</span>;i<arr.<span class="built_in">size</span>()*<span class="number">0.95</span>;i++)</span><br><span class="line"> { <span class="comment">//掐头去尾</span></span><br><span class="line"> cnt+=arr[i];</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> (<span class="type">double</span>)cnt/(arr.<span class="built_in">size</span>()*<span class="number">0.9</span>);</span><br><span class="line"> }</span><br><span class="line">};</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html"><div class="tag link"><a class="link-card" title="力扣 1619. 删除某些元素后的数组均值" href="https://leetcode.cn/problems/mean-of-array-after-removing-som</summary>
<category term="每日一题--队列队" scheme="https://hdheid.github.io/categories/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98-%E9%98%9F%E5%88%97%E9%98%9F/"/>
<category term="模拟" scheme="https://hdheid.github.io/tags/%E6%A8%A1%E6%8B%9F/"/>
</entry>
<entry>
<title>2022-09-13队列队每日一题</title>
<link href="https://hdheid.github.io/posts/f43531d6.html"/>
<id>https://hdheid.github.io/posts/f43531d6.html</id>
<published>2022-09-13T10:56:20.807Z</published>
<updated>2022-09-13T10:57:19.689Z</updated>
<content type="html"><![CDATA[<div class="tag link"><a class="link-card" title="力扣 670. 最大交换" href="https://leetcode.cn/problems/maximum-swap/"><div class="left"><img src="https://img.hipyt.cn/imgs/2022/09/e3f773cfe32f6f4f.jpg"/></div><div class="right"><p class="text">力扣 670. 最大交换</p><p class="url">https://leetcode.cn/problems/maximum-swap/</p></div></a></div><h2 id="题目大意"><a href="#题目大意" class="headerlink" title="题目大意"></a>题目大意</h2><p>给定一个非负整数,你至多可以交换一次数字中的<strong>任意两位</strong>。返回你能得到的<span class='p red'>最大值</span>。</p><h2 id="题意解析"><a href="#题意解析" class="headerlink" title="题意解析"></a>题意解析</h2><p>将数字拆分下来存放在数组 v 中,遍历交换任意两个数字,再将其变回数字,用 ans 来记录最大的数字。</p><h2 id="代码-暴力"><a href="#代码-暴力" class="headerlink" title="代码(暴力)"></a>代码(暴力)</h2><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> {</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"> <span class="function"><span class="type">int</span> <span class="title">to_number</span><span class="params">(vector<<span class="type">int</span>> &v)</span></span></span><br><span class="line"><span class="function"> </span>{ <span class="comment">//将数组变回数字</span></span><br><span class="line"> <span class="type">int</span> ans=<span class="number">0</span>,cnt=<span class="number">1</span>;</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">auto</span> x : v) ans+=x*cnt,cnt*=<span class="number">10</span>;</span><br><span class="line"> <span class="keyword">return</span> ans;</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">maximumSwap</span><span class="params">(<span class="type">int</span> num)</span> </span></span><br><span class="line"><span class="function"> </span>{</span><br><span class="line"> vector<<span class="type">int</span>> v;</span><br><span class="line"> <span class="type">int</span> ans=num;</span><br><span class="line"> <span class="keyword">while</span>(num)</span><br><span class="line"> {</span><br><span class="line"> v.<span class="built_in">push_back</span>(num%<span class="number">10</span>);</span><br><span class="line"> num/=<span class="number">10</span>;</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<v.<span class="built_in">size</span>();i++)</span><br><span class="line"> { <span class="comment">//遍历</span></span><br><span class="line"> <span class="keyword">for</span>(<span class="type">int</span> j=<span class="number">0</span>;j<v.<span class="built_in">size</span>();j++)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(i==j) <span class="keyword">continue</span>;</span><br><span class="line"> <span class="built_in">swap</span>(v[i],v[j]);</span><br><span class="line"> ans=<span class="built_in">max</span>(ans,<span class="built_in">to_number</span>(v));</span><br><span class="line"> <span class="built_in">swap</span>(v[i],v[j]);</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="comment">//暴力yyds</span></span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> ans;</span><br><span class="line"></span><br><span class="line"> }</span><br><span class="line">};</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html"><div class="tag link"><a class="link-card" title="力扣 670. 最大交换" href="https://leetcode.cn/problems/maximum-swap/"><div class="left"><img src</summary>
<category term="每日一题--队列队" scheme="https://hdheid.github.io/categories/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98-%E9%98%9F%E5%88%97%E9%98%9F/"/>
<category term="暴力" scheme="https://hdheid.github.io/tags/%E6%9A%B4%E5%8A%9B/"/>
</entry>
<entry>
<title>2022-09-12未来可期小组每日一题</title>
<link href="https://hdheid.github.io/posts/6ee60c0f.html"/>
<id>https://hdheid.github.io/posts/6ee60c0f.html</id>
<published>2022-09-13T10:32:38.178Z</published>
<updated>2022-09-13T10:57:19.685Z</updated>
<content type="html"><![CDATA[<div class="tag link"><a class="link-card" title="acwing 1762. 牛的洗牌" href="https://www.acwing.com/problem/content/description/1764/"><div class="left"><img src="https://img.hipyt.cn/imgs/2022/09/e3f773cfe32f6f4f.jpg"/></div><div class="right"><p class="text">acwing 1762. 牛的洗牌</p><p class="url">https://www.acwing.com/problem/content/description/1764/</p></div></a></div><h2 id="题目大意"><a href="#题目大意" class="headerlink" title="题目大意"></a>题目大意</h2><p>略<br><br><br><br></p><h2 id="题意解析"><a href="#题意解析" class="headerlink" title="题意解析"></a>题意解析</h2><p>由于给出的顺序是牛被洗牌三次的顺序,我们给出三个数组 a[N] , b[N] , c[N],b 数组装 id,a 数组记录逆洗牌的顺序,我们需要进行三次逆洗牌,那么每一次洗牌,i 未知的牛都回去 a[i] 的位置。所以三次逆洗牌之后,会回到 a[a[a[i]]] 的 位置。</p><h2 id="代码-c"><a href="#代码-c" class="headerlink" title="代码(c++)"></a>代码(c++)</h2><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string"><iostream></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> N=<span class="number">110</span>;</span><br><span class="line"><span class="type">int</span> a[N],b[N],c[N];</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> x,n;</span><br><span class="line"> cin>>n;</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><br><span class="line"> cin>>x;</span><br><span class="line"> a[x]=i;</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><br><span class="line"> cin>>b[i];</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">1</span>;i<=n;i++)</span><br><span class="line"> {</span><br><span class="line"> c[a[a[a[i]]]]=b[i];</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">1</span>;i<=n;i++) cout<<c[i]<<endl;</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>]]></content>
<summary type="html"><div class="tag link"><a class="link-card" title="acwing 1762. 牛的洗牌" href="https://www.acwing.com/problem/content/description/1764/"><div cl</summary>
<category term="每日一题--未来可期小组" scheme="https://hdheid.github.io/categories/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98-%E6%9C%AA%E6%9D%A5%E5%8F%AF%E6%9C%9F%E5%B0%8F%E7%BB%84/"/>
<category term="技巧题" scheme="https://hdheid.github.io/tags/%E6%8A%80%E5%B7%A7%E9%A2%98/"/>
</entry>
<entry>
<title>2022-09-11未来可期小组每日一题</title>
<link href="https://hdheid.github.io/posts/7dce357c.html"/>
<id>https://hdheid.github.io/posts/7dce357c.html</id>
<published>2022-09-13T10:32:31.858Z</published>
<updated>2022-09-13T10:57:19.676Z</updated>
<content type="html"><![CDATA[<div class="tag link"><a class="link-card" title="acwing 1761. 阻挡广告牌" href="https://www.acwing.com/problem/content/1763/"><div class="left"><img src="https://img.hipyt.cn/imgs/2022/09/e3f773cfe32f6f4f.jpg"/></div><div class="right"><p class="text">acwing 1761. 阻挡广告牌</p><p class="url">https://www.acwing.com/problem/content/1763/</p></div></a></div><h2 id="题目大意"><a href="#题目大意" class="headerlink" title="题目大意"></a>题目大意</h2><p>有两个矩形广告牌和一辆矩形货车,用坐标表示在二维坐标系中,每个矩形给出左下角和右上角的坐标,两个广告牌有 可能会被矩形货车盖住一部分,求出没有被盖住的广告牌的面积。</p><h2 id="题意解析"><a href="#题意解析" class="headerlink" title="题意解析"></a>题意解析</h2><p>创建一个二维矩阵,对于两个广告牌,我们使其区域中每个数都为 1,让矩形货车范围内的数都变成零,其他数都为零,计算有多少个 1 即可。</p><h2 id="代码-c"><a href="#代码-c" class="headerlink" title="代码(c++)"></a>代码(c++)</h2><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string"><iostream></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> N=<span class="number">1001</span>;</span><br><span class="line"><span class="type">int</span> a,b,c,d;<span class="comment">//第一个广告牌</span></span><br><span class="line"><span class="type">int</span> e,f,g,h;<span class="comment">//第二个广告牌</span></span><br><span class="line"><span class="type">int</span> i,j,k,l;<span class="comment">//第三个大货车</span></span><br><span class="line"><span class="type">int</span> z[N*<span class="number">2</span>][N*<span class="number">2</span>];</span><br><span class="line"><span class="type">int</span> ans;</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"> cin>>a>>b>>c>>d;</span><br><span class="line"> cin>>e>>f>>g>>h;</span><br><span class="line"> cin>>i>>j>>k>>l;</span><br><span class="line"> a+=N,b+=N,c+=N,d+=N,e+=N,f+=N,g+=N,h+=N,i+=N,j+=N,k+=N,l+=N;</span><br><span class="line"> </span><br><span class="line"> <span class="comment">//因为求的是面积所以需要减一</span></span><br><span class="line"> <span class="keyword">for</span>(<span class="type">int</span> x=a;x<c;x++)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">for</span>(<span class="type">int</span> y=b;y<d;y++) z[x][y]=<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> x=e;x<g;x++)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">for</span>(<span class="type">int</span> y=f;y<h;y++) z[x][y]=<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> x=i;x<k;x++)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">for</span>(<span class="type">int</span> y=j;y<l;y++) z[x][y]=<span class="number">0</span>;</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> x=<span class="number">0</span>;x<N*<span class="number">2</span>;x++)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">for</span>(<span class="type">int</span> y=<span class="number">0</span>;y<N*<span class="number">2</span>;y++) ans+=z[x][y];</span><br><span class="line"> }</span><br><span class="line"> </span><br><span class="line"> cout<<ans<<endl;</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>]]></content>
<summary type="html"><div class="tag link"><a class="link-card" title="acwing 1761. 阻挡广告牌" href="https://www.acwing.com/problem/content/1763/"><div class="left"></summary>
<category term="每日一题--未来可期小组" scheme="https://hdheid.github.io/categories/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98-%E6%9C%AA%E6%9D%A5%E5%8F%AF%E6%9C%9F%E5%B0%8F%E7%BB%84/"/>
<category term="技巧题" scheme="https://hdheid.github.io/tags/%E6%8A%80%E5%B7%A7%E9%A2%98/"/>
</entry>
<entry>
<title>2022-09-12队列队每日一题</title>
<link href="https://hdheid.github.io/posts/e31d5516.html"/>
<id>https://hdheid.github.io/posts/e31d5516.html</id>
<published>2022-09-13T09:20:50.380Z</published>
<updated>2022-09-13T10:57:19.688Z</updated>
<content type="html"><![CDATA[<div class="tag link"><a class="link-card" title="力扣 1608. 特殊数组的特征值" href="https://leetcode.cn/problems/special-array-with-x-elements-greater-than-or-equal-x/"><div class="left"><img src="https://img.hipyt.cn/imgs/2022/09/e3f773cfe32f6f4f.jpg"/></div><div class="right"><p class="text">力扣 1608. 特殊数组的特征值</p><p class="url">https://leetcode.cn/problems/special-array-with-x-elements-greater-than-or-equal-x/</p></div></a></div><h2 id="题目大意"><a href="#题目大意" class="headerlink" title="题目大意"></a>题目大意</h2><p>给出一个非负数数组,存在一个 x 使数组里面右 x 个数大于等于 x(<strong>x 不必为数组中的数</strong>),求出 x,如果没有则输出-1;</p><h2 id="题意解析"><a href="#题意解析" class="headerlink" title="题意解析"></a>题意解析</h2><p>这个题有个<strong>暴力</strong>做法,题目给的范围是数组的长度是 1 到 100,也就是说,x 的最大值也不肯超过一百,我们可以直接从一百到一遍历,碰到成立的直接输出就行。<br><br><br>其次,我们可以对数组进行降序处理,x 必然为 [1,n] 中的某一个数字,我们枚举 x,如果对于某一个 x,将其插入数组之后,左边有 x 个数大于等于它,右边的数全都小于它,那么 x 成立。否则输出-1;</p><h2 id="代码-暴力"><a href="#代码-暴力" class="headerlink" title="代码(暴力)"></a>代码(暴力)</h2><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> {</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"> <span class="function"><span class="type">int</span> <span class="title">specialArray</span><span class="params">(vector<<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">100</span>;i;i--)</span><br><span class="line"> {</span><br><span class="line"> <span class="type">int</span> cnt=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">for</span>(<span class="type">int</span> j=<span class="number">0</span>;j<n.<span class="built_in">size</span>();j++)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(i<=n[j]) cnt++;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span>(cnt==i) <span class="keyword">return</span> cnt;</span><br><span class="line"> <span class="comment">//暴力yyds</span></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><span class="line">};</span><br></pre></td></tr></table></figure><h2 id="代码-排序"><a href="#代码-排序" class="headerlink" title="代码(排序)"></a>代码(排序)</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">class Solution {</span><br><span class="line">public:</span><br><span class="line"> int specialArray(vector<int>& n) </span><br><span class="line"> {</span><br><span class="line"> sort(n.begin(),n.end(),greater<int>());</span><br><span class="line"> for(int i=1;i<=n.size();i++)</span><br><span class="line"> { /*用代码实现。n[i-1]是第 i 个数,因为是降序,所以 i<=n[i-1] 则有 i 个大于等于 i 的数,也即是 i 比左边的数都小或者相等,</span><br><span class="line">如果 i>n[i] ,则 i 比右边的数都大*/</span><br><span class="line"> </span><br><span class="line"> if(i<=n[i-1]&&(i==n.size()||i>n[i])) return i;</span><br><span class="line"> }</span><br><span class="line"> return -1;</span><br><span class="line"> }</span><br><span class="line">};</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html"><div class="tag link"><a class="link-card" title="力扣 1608. 特殊数组的特征值" href="https://leetcode.cn/problems/special-array-with-x-elements-greate</summary>
<category term="每日一题--队列队" scheme="https://hdheid.github.io/categories/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98-%E9%98%9F%E5%88%97%E9%98%9F/"/>
<category term="暴力" scheme="https://hdheid.github.io/tags/%E6%9A%B4%E5%8A%9B/"/>
</entry>
<entry>
<title>2022-09-11队列队每日一题</title>
<link href="https://hdheid.github.io/posts/da65f856.html"/>
<id>https://hdheid.github.io/posts/da65f856.html</id>
<published>2022-09-13T09:20:30.493Z</published>
<updated>2022-09-13T10:59:48.351Z</updated>
<content type="html"><![CDATA[<div class="tag link"><a class="link-card" title="力扣 6172. 严格回文的数字" href="https://leetcode.cn/problems/strictly-palindromic-number/"><div class="left"><img src="https://img.hipyt.cn/imgs/2022/09/e3f773cfe32f6f4f.jpg"/></div><div class="right"><p class="text">力扣 6172. 严格回文的数字</p><p class="url">https://leetcode.cn/problems/strictly-palindromic-number/</p></div></a></div><h2 id="题目大意"><a href="#题目大意" class="headerlink" title="题目大意"></a>题目大意</h2><p>将一个数 n 转化为 b 进制(b 为 2 到 n-2 的整数),如果在 b 进制下 n 都是回文字符串,那么 n 是严格回文的。是返回 true;否则返回 false。</p><h2 id="题意解析"><a href="#题意解析" class="headerlink" title="题意解析"></a>题意解析</h2><p>直接将 n 的每一个 b 进制表示出来,在一个个判断是否回文,可以枚举。<br><div class="tip info"><p>知识点:进制转换</p></div></p><blockquote><p>这个题目涉及到的就是进制转换,如何将十进制的 n 转换为其他进制?<br>我们需要用除 b 取余法。简单来说,我们将 n%b,将余数保存在数组,再将 n/b。不断地从重复上述操作,最后保存的数组就是将十进制转化的 b 进制数。<br>需要注意的是:<strong>保存的进制数是从左到右看的,而正常的进制数都是从右到左</strong>。</p></blockquote><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> {</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"> <span class="function"><span class="type">bool</span> <span class="title">zh</span><span class="params">(<span class="type">int</span> n,<span class="type">int</span> b)</span></span></span><br><span class="line"><span class="function"> </span>{</span><br><span class="line"> vector<<span class="type">int</span>> ans;</span><br><span class="line"> <span class="keyword">while</span>(n)</span><br><span class="line"> {</span><br><span class="line"> ans.<span class="built_in">push_back</span>(n%b);</span><br><span class="line"> n/=b;</span><br><span class="line"> }<span class="comment">//将 n 转换为 b 进制数,除 b 取余法</span></span><br><span class="line"> <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i<ans.<span class="built_in">size</span>()/<span class="number">2</span>;i++)</span><br><span class="line"> {<span class="comment">//因为判断回文,正反看都是一样的,所以这里进制数不需要处理</span></span><br><span class="line"> <span class="keyword">if</span>(ans[i]!=ans[ans.<span class="built_in">size</span>()-i<span class="number">-1</span>]) <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> <span class="literal">true</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">isStrictlyPalindromic</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<span class="number">-2</span>;i++)</span><br><span class="line"> {<span class="comment">//遍历判断回文即可</span></span><br><span class="line"> <span class="keyword">if</span>(!<span class="built_in">zh</span>(n,i)) <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> <span class="literal">true</span>;</span><br><span class="line"> }</span><br><span class="line">};</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html"><div class="tag link"><a class="link-card" title="力扣 6172. 严格回文的数字" href="https://leetcode.cn/problems/strictly-palindromic-number/"><div cl</summary>
<category term="每日一题--队列队" scheme="https://hdheid.github.io/categories/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98-%E9%98%9F%E5%88%97%E9%98%9F/"/>
<category term="进制转换" scheme="https://hdheid.github.io/tags/%E8%BF%9B%E5%88%B6%E8%BD%AC%E6%8D%A2/"/>
</entry>
</feed>