-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsearch.xml
7094 lines (7093 loc) · 400 KB
/
search.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>About Blog and Learning</title>
<url>/2023/03/27/About-Blog/</url>
<content><![CDATA[<h3 id="Reasons-to-Write-a-Blog">Reasons to Write a Blog</h3>
<p>这个博客是在一年之前建立的,但由于我觉得写博客很累就一直搁置着。在一年多的学习过程中,我时常感觉到遗忘和不知从何而来。前几天在翻找课程攻略时,我发现一个博客的主人曾几年不间断地每天写博客,我当然做不到这样,但是受到了莫大的激励,于是想起了这个博客,想要借此记录自己的学习和生活。不过说到做博客的经验的话,我是一点没有,但由于高中的时候写了不少随笔,因此我是擅长自言自语的。做这个博客,除了减少遗忘以外,更多的是给自己看,给自己一个念想,记录下自己的脚步。另外想说的还是,由于是给自己写的博客,技术纰漏很多,日记式自言自语的话很多,很多评价和感觉不成熟也不专业,很多感情很直接却也真实,看客们权当小孩子的把戏一笑而过。(不过应该也没人会看😆)</p>
<h3 id="📖Site-Log">📖Site Log</h3>
<ul class="lvl-0">
<li class="lvl-2">
<p>2023/3/28<br>
这几天多上传了几篇,发现文章的属性从学习记录变成随笔、日记和对未来的思考了,本来是督促学习的,现在为了写博客忘记了😆。</p>
</li>
<li class="lvl-2">
<p>2023/3/31<br>
感觉可以把课外阅读书单也加到博客里。</p>
</li>
<li class="lvl-2">
<p>2023/4/24<br>
水了好几篇博客文章,开了一些坑,不知道什么时候能补完。</p>
</li>
<li class="lvl-2">
<p>2023/5/1<br>
五一快乐!</p>
</li>
<li class="lvl-2">
<p>2023/5/14<br>
hexo d部署出了点问题,不知道是代理问题还是网络波动(已用git配置代理解决)</p>
</li>
<li class="lvl-2">
<p>2023/6/5<br>
期末事情变多了😭</p>
</li>
<li class="lvl-2">
<p>2023/7/1<br>
转眼间居然已经七月了,学长学姐都毕业了🎓,我也该上工了👷🧱</p>
</li>
<li class="lvl-2">
<p>2023/7/23<br>
回来学车了</p>
</li>
<li class="lvl-2">
<p>2023/9/22<br>
新的学期又开始了</p>
</li>
<li class="lvl-2">
<p>2024/2/28<br>
又是新学期,事情突然变得多起来了,好多新学的东西都转移到在线notebook上了</p>
</li>
</ul>
<span id="more"></span>
<h3 id="📔Lesson-List-and-Progress">📔Lesson List and Progress</h3>
<h4 id="Math">Math</h4>
<ul class="lvl-0">
<li class="lvl-4">
<p><strong>Maki Topology</strong><br>
Learning…<br>
rest video</p>
</li>
<li class="lvl-4">
<p><strong>Maki Abstract algebra</strong><br>
Learning…<br>
rest video</p>
</li>
</ul>
<h4 id="Computer-Science">Computer Science</h4>
<ul class="lvl-0">
<li class="lvl-4">
<p><strong>MIT-Missing-Semester</strong></p>
</li>
<li class="lvl-4">
<p><strong>CS106B/X</strong><br>
rest project</p>
</li>
<li class="lvl-4">
<p><strong>CS106L</strong><br>
rest project</p>
</li>
<li class="lvl-4">
<p><strong>CMU 15-213: CSAPP</strong><br>
rest lab</p>
</li>
<li class="lvl-4">
<p><strong>CS144</strong><br>
rest project</p>
</li>
<li class="lvl-4">
<p><strong>CS50ai</strong><br>
rest project</p>
</li>
<li class="lvl-4">
<p><strong>CS61A</strong></p>
</li>
<li class="lvl-4">
<p><strong>CS61B</strong><br>
rest lab</p>
</li>
<li class="lvl-4">
<p><strong>CS61C</strong><br>
rest multithreading lab</p>
</li>
<li class="lvl-4">
<p><strong>MIT 6.031: Software Construction</strong><br>
Learning…<br>
rest note problem</p>
</li>
<li class="lvl-4">
<p><strong>MIT 6.S081: Operating System Engineering</strong><br>
Learning…<br>
rest video lab</p>
</li>
<li class="lvl-4">
<p><strong>Hung-yi Lee Machine Learning</strong><br>
Maybe Learning later…<br>
rest video hw</p>
</li>
<li class="lvl-4">
<p><strong>GAMES101</strong><br>
Maybe Learning later…</p>
</li>
<li class="lvl-4">
<p><strong>CS162</strong><br>
Learning…</p>
</li>
<li class="lvl-4">
<p><strong>CS110L</strong><br>
Maybe Learning later…</p>
</li>
<li class="lvl-4">
<p><strong>USTC Computer Networking</strong></p>
</li>
<li class="lvl-4">
<p><strong>MIT weblab</strong><br>
Maybe Learning later…</p>
</li>
<li class="lvl-4">
<p><strong>CS161</strong><br>
Maybe Learning later…</p>
</li>
<li class="lvl-4">
<p><strong>MIT6.858</strong><br>
Maybe Learning later…</p>
</li>
</ul>
<h4 id="Electronics-Engineering">Electronics Engineering</h4>
<ul class="lvl-0">
<li class="lvl-4">
<p><strong>51单片机入门教程</strong></p>
</li>
<li class="lvl-4">
<p><strong>STM32入门教程</strong><br>
Maybe Learning later…</p>
</li>
</ul>
<h3 id="📚Book-List">📚Book List</h3>
<h4 id="Computer-Science-2">Computer Science</h4>
<ul class="lvl-0">
<li class="lvl-2">
<p>算法导论</p>
</li>
<li class="lvl-2">
<p>算法第四版</p>
</li>
<li class="lvl-2">
<p>数据结构和算法分析 C语言版</p>
</li>
<li class="lvl-2">
<p>C++ Primer</p>
</li>
<li class="lvl-2">
<p>C++ Primer Plus</p>
</li>
<li class="lvl-2">
<p>深入理解计算机系统</p>
</li>
<li class="lvl-2">
<p>计算机网络 自顶向下方法</p>
</li>
<li class="lvl-2">
<p>离散数学及其应用</p>
</li>
</ul>
<h3 id="⚡Disadvantage-Analysis-😭">⚡Disadvantage Analysis 😭</h3>
<p>整理一下目前学习过程中欠缺的地方</p>
<ul class="lvl-0">
<li class="lvl-2">
<p><mark>英语</mark></p>
<ul class="lvl-2">
<li class="lvl-4">网课能听懂了,但是字幕辅助还是挺重要,听力有点进步</li>
<li class="lvl-4">短文本教程可以看懂,长文本看的吃力,阅读论文感觉很吃力</li>
<li class="lvl-4">慢慢进步吧,感觉主要问题还是出在看的耐心不够,读长文献很不想读</li>
<li class="lvl-4">背单词之类的</li>
</ul>
</li>
<li class="lvl-2">
<p>数学</p>
<ul class="lvl-2">
<li class="lvl-4"><strong>离散、组合</strong>没学过,算法分析看的挺吃力</li>
<li class="lvl-4">找门课学学</li>
<li class="lvl-4">想学学其他<strong>数学课</strong>,时间有点跟不上,拓扑和抽代</li>
</ul>
</li>
</ul>
<hr>
<ul class="lvl-0">
<li class="lvl-2">
<p>电子</p>
<ul class="lvl-2">
<li class="lvl-4">无<strong>电子基础</strong>,缺少对硬件元件的基本认识,缺少对电路的认识</li>
<li class="lvl-4"><strong>模电、数电</strong>之类的</li>
<li class="lvl-4"><strong>信号与系统</strong>不熟</li>
</ul>
</li>
<li class="lvl-2">
<p>嵌入式</p>
<ul class="lvl-2">
<li class="lvl-4"><strong>嵌入式</strong>方面想了解下大致概念,单片机微处理器之类的,以及PCB设计工具</li>
</ul>
</li>
</ul>
<hr>
<ul class="lvl-0">
<li class="lvl-2">
<p>数据结构和<mark>算法</mark></p>
<ul class="lvl-2">
<li class="lvl-4">题写的很少,只会写一点链表</li>
<li class="lvl-4">得刷点<strong>力扣、洛谷</strong>啥的</li>
<li class="lvl-4">可以看看算法书、算法相关的网站之类的</li>
</ul>
</li>
<li class="lvl-2">
<p>开发</p>
<ul class="lvl-2">
<li class="lvl-4">开发经验很少,遇到项目开发和课程作业总是力不从心</li>
<li class="lvl-4">coding的熟练度不够</li>
<li class="lvl-4">合作开发的经验不够</li>
<li class="lvl-4">可以尝试下<strong>github造轮子的项目</strong></li>
</ul>
</li>
<li class="lvl-2">
<p>语言</p>
<ul class="lvl-2">
<li class="lvl-4">CJP三门都用过,但用的不熟,常用的包和库也不熟</li>
<li class="lvl-4">开发训练</li>
<li class="lvl-4">想学新语言(<strong>Rust</strong>?),时间有点不够</li>
</ul>
</li>
<li class="lvl-2">
<p>前端</p>
<ul class="lvl-2">
<li class="lvl-4"><strong>前端</strong>一点不会,不懂html,不懂Javascript,不懂CSS</li>
<li class="lvl-4">找门课学学,找点资料看看</li>
</ul>
</li>
<li class="lvl-2">
<p>计算机组成</p>
<ul class="lvl-2">
<li class="lvl-4">玩过图灵完备🤣</li>
<li class="lvl-4">CSAPP再看看,61C回去再看看</li>
</ul>
</li>
<li class="lvl-2">
<p>计算机网络</p>
<ul class="lvl-2">
<li class="lvl-4">计算机网络学的很早,学的不熟,快忘光了</li>
</ul>
</li>
<li class="lvl-2">
<p>操作系统</p>
<ul class="lvl-2">
<li class="lvl-4">快忘光了</li>
</ul>
</li>
<li class="lvl-2">
<p>数据库问题</p>
<ul class="lvl-2">
<li class="lvl-4"><strong>数据库</strong>一点没学过</li>
</ul>
</li>
<li class="lvl-2">
<p>机器学习</p>
<ul class="lvl-2">
<li class="lvl-4">了解大致概念但不深</li>
</ul>
</li>
<li class="lvl-2">
<p>图形学</p>
<ul class="lvl-2">
<li class="lvl-4">没了解过</li>
</ul>
</li>
<li class="lvl-2">
<p>系统安全</p>
<ul class="lvl-2">
<li class="lvl-4">想要了解<mark>CTF</mark>相关内容</li>
</ul>
</li>
<li class="lvl-2">
<p>lab补完</p>
<ul class="lvl-2">
<li class="lvl-4">CSAPPlab - arch</li>
<li class="lvl-4">CS144lab - network</li>
<li class="lvl-4">MIT6.S081lab - OS</li>
</ul>
</li>
</ul>
<hr>
<link rel="stylesheet" href="/css/spoiler.css" type="text/css"><script src="/js/spoiler.js" type="text/javascript" async></script>]]></content>
<categories>
<category>Others</category>
</categories>
<tags>
<tag>Plan</tag>
</tags>
</entry>
<entry>
<title>数据结构和算法笔记</title>
<url>/2023/09/03/algorithm-note/</url>
<content><![CDATA[<h3 id="Intro">Intro</h3>
<ul class="lvl-0">
<li class="lvl-2">记录数据结构和算法题</li>
<li class="lvl-2"><a href="https://huaeryi.github.io/notebook/">笔记</a></li>
</ul>
<span id="more"></span>
<h3 id="背包dp">背包dp</h3>
<h4 id="0-1背包">0-1背包</h4>
<ul class="lvl-0">
<li class="lvl-2">
<p>0-1背包指的是容量为W的背包,重量w[i]且价值v[i]的物品,每个物品只有两种状态,取或不取,怎样放入背包使背包中的物品价值最大。</p>
</li>
<li class="lvl-2">
<p>二维数组解法,内存过大</p>
</li>
</ul>
<figure class="highlight cpp"><figcaption><span>>folded</span></figcaption><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string"><bits/stdc++.h></span></span></span><br><span class="line"></span><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">int</span> w[<span class="number">1001</span>];</span><br><span class="line"><span class="type">int</span> v[<span class="number">1001</span>];</span><br><span class="line"><span class="type">int</span> dp[<span class="number">101</span>][<span class="number">1001</span>];</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> W, N;</span><br><span class="line"> cin >> W >> 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><br><span class="line"> cin >> w[i] >> v[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">0</span>; i <= N; i++) {</span><br><span class="line"> dp[i][<span class="number">0</span>] = <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++) {</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">1</span>; j <= W; j++) {</span><br><span class="line"> <span class="keyword">if</span> (j < w[i]) {</span><br><span class="line"> dp[i][j] = dp[i - <span class="number">1</span>][j];</span><br><span class="line"> } <span class="keyword">else</span> {</span><br><span class="line"> dp[i][j] = <span class="built_in">max</span>(dp[i - <span class="number">1</span>][j], dp[i - <span class="number">1</span>][j - w[i]] + v[i]); </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"> cout << dp[N][W];</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>
<ul class="lvl-0">
<li class="lvl-2">
<p>一维数组解法</p>
</li>
</ul>
<figure class="highlight cpp"><figcaption><span>>folded</span></figcaption><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string"><bits/stdc++.h></span></span></span><br><span class="line"></span><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">int</span> w[<span class="number">1001</span>];</span><br><span class="line"><span class="type">int</span> v[<span class="number">1001</span>];</span><br><span class="line"><span class="type">int</span> dp[<span class="number">1001</span>];</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"> dp[<span class="number">0</span>] = <span class="number">0</span>;</span><br><span class="line"> <span class="type">int</span> W, N;</span><br><span class="line"> cin >> W >> 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><br><span class="line"> cin >> w[i] >> v[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">0</span>; i <= N; i++) {</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> j = W; j >= w[i]; j--) {</span><br><span class="line"> <span class="keyword">if</span> (j - w[i] >= <span class="number">0</span>) {</span><br><span class="line"> dp[j] = <span class="built_in">max</span>(dp[j], dp[j - w[i]] + v[i]);</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> cout << dp[W];</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>
<ul class="lvl-0">
<li class="lvl-2">
<p><a href="https://www.luogu.com.cn/problem/P1048">P1048 采药</a></p>
</li>
</ul>
<h4 id="完全背包">完全背包</h4>
<ul class="lvl-0">
<li class="lvl-2">
<p>在01背包的基础上,每个物品都可以取任意数量</p>
</li>
</ul>
<figure class="highlight cpp"><figcaption><span>>folded</span></figcaption><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string"><bits/stdc++.h></span></span></span><br><span class="line"></span><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">long</span> <span class="type">long</span> w[<span class="number">10001</span>];</span><br><span class="line"><span class="type">long</span> <span class="type">long</span> v[<span class="number">10001</span>];</span><br><span class="line"><span class="type">long</span> <span class="type">long</span> dp[<span class="number">10000001</span>];</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">long</span> <span class="type">long</span> W, n;</span><br><span class="line"> cin >> W >> n;</span><br><span class="line"> dp[<span class="number">0</span>] = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i <= n; i++) {</span><br><span class="line"> cin >> w[i] >> v[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 class="keyword">for</span> (<span class="type">int</span> j = w[i]; j <= W; j++) {</span><br><span class="line"> dp[j] = <span class="built_in">max</span>(dp[j], dp[j - w[i]] + v[i]);</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> cout << dp[W];</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>
<ul class="lvl-0">
<li class="lvl-2">
<p><a href="https://www.luogu.com.cn/problem/P1616">P1616 疯狂的采药</a></p>
</li>
</ul>
<h3 id="并查集">并查集</h3>
<ul class="lvl-0">
<li class="lvl-2">
<p>并查集的实现是一个森林,其中每个节点1-n刚开始都是独立的树的根节点,通过维护一个父节点数组来体现哪些节点在一棵树上,一个最基本的带有find和unite操作的并查集实现如下</p>
</li>
</ul>
<figure class="highlight cpp"><figcaption><span>>folded</span></figcaption><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string"><bits/stdc++.h></span></span></span><br><span class="line"></span><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">struct</span> <span class="title class_">dsu</span></span><br><span class="line">{</span><br><span class="line"> vector<<span class="type">size_t</span>> pa;</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">explicit</span> <span class="title">dsu</span><span class="params">(<span class="type">size_t</span> size)</span> : pa(size) {</span></span><br><span class="line"> <span class="built_in">iota</span>(pa.<span class="built_in">begin</span>(), pa.<span class="built_in">end</span>(), <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="function"><span class="type">size_t</span> <span class="title">dsu::find</span><span class="params">(<span class="type">size_t</span> x)</span></span></span><br><span class="line"><span class="function"> </span>{</span><br><span class="line"> <span class="keyword">return</span> pa[x] == x ? x : pa[x] = <span class="built_in">find</span>(pa[x]);</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="type">void</span> <span class="title">dsu::unite</span><span class="params">(<span class="type">size_t</span> x, <span class="type">size_t</span> y)</span></span></span><br><span class="line"><span class="function"> </span>{</span><br><span class="line"> pa[<span class="built_in">find</span>(x)] = <span class="built_in">find</span>(y);</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line">};</span><br><span class="line"></span><br></pre></td></tr></table></figure>
<ul class="lvl-0">
<li class="lvl-2">
<p>并查集的两个常见优化是路径压缩和启发式合并,路径压缩在查询过程中将节点直接连接到根节点上,减少以后的查询时间,而启发式合并则维护两个集合的大小,总是把大集合的根节点作为小集合的根节点的父节点</p>
</li>
<li class="lvl-2">
<p><a href="https://www.luogu.com.cn/problem/P1111">P1111 修复公路</a></p>
</li>
</ul>
<h3 id="树状数组">树状数组</h3>
<h3 id="线段树">线段树</h3>
<h3 id="dfs-bfs">dfs & bfs</h3>
<ul class="lvl-0">
<li class="lvl-2">
<p>dfs的常用方法在于维护一个全局数组,对访问过的节点标记处理,利用递归搜索,回溯后清除标记</p>
</li>
</ul>
<h3 id="小项">小项</h3>
<h4 id="高精度">高精度</h4>
<ul class="lvl-0">
<li class="lvl-2">
<p>高精度计算利用字符串和竖式加减法实现大整数的四则运算</p>
</li>
</ul>
<figure class="highlight cpp"><figcaption><span>>folded</span></figcaption><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string"><bits/stdc++.h></span></span></span><br><span class="line"></span><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">static</span> <span class="type">const</span> <span class="type">int</span> LEN = <span class="number">1004</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> a[LEN], b[LEN], c[LEN];</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">clear</span><span class="params">(<span class="type">int</span> a[])</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < LEN; i++) {</span><br><span class="line"> a[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="function"><span class="type">void</span> <span class="title">read</span><span class="params">(<span class="type">int</span> a[])</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="type">static</span> <span class="type">char</span> s[LEN + <span class="number">1</span>];</span><br><span class="line"> <span class="built_in">scanf</span>(<span class="string">"%s"</span>, s);</span><br><span class="line"></span><br><span class="line"> <span class="built_in">clear</span>(a);</span><br><span class="line"></span><br><span class="line"> <span class="type">int</span> len = <span class="built_in">strlen</span>(s);</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < len; i++) {</span><br><span class="line"> a[len - i - <span class="number">1</span>] = s[i] - <span class="string">'0'</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">print</span><span class="params">(<span class="type">int</span> a[])</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="type">int</span> i;</span><br><span class="line"> <span class="keyword">for</span> (i = LEN - <span class="number">1</span>; i >= <span class="number">1</span>; i--) {</span><br><span class="line"> <span class="keyword">if</span> (a[i] != <span class="number">0</span>) {</span><br><span class="line"> <span class="keyword">break</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">for</span> (; i >= <span class="number">0</span>; i--) {</span><br><span class="line"> <span class="built_in">putchar</span>(a[i] + <span class="string">'0'</span>);</span><br><span class="line"> }</span><br><span class="line"> <span class="built_in">putchar</span>(<span class="string">'\n'</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">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"> <span class="built_in">clear</span>(c);</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 < LEN - <span class="number">1</span>; i++) {</span><br><span class="line"> c[i] += a[i] + b[i];</span><br><span class="line"> <span class="keyword">if</span> (c[i] >= <span class="number">10</span>) {</span><br><span class="line"> c[i + <span class="number">1</span>] += <span class="number">1</span>;</span><br><span class="line"> c[i] -= <span class="number">10</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"><span class="function"><span class="type">void</span> <span class="title">sub</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="built_in">clear</span>(c);</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 < LEN - <span class="number">1</span>; ++i) {</span><br><span class="line"> c[i] += a[i] - b[i];</span><br><span class="line"> <span class="keyword">if</span> (c[i] < <span class="number">0</span>) {</span><br><span class="line"> c[i + <span class="number">1</span>] -= <span class="number">1</span>;</span><br><span class="line"> c[i] += <span class="number">10</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"><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">read</span>(a);</span><br><span class="line"> <span class="built_in">read</span>(b);</span><br><span class="line"> <span class="built_in">add</span>(a, b, c);</span><br><span class="line"> <span class="built_in">print</span>(c);</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>
<h4 id="快速幂">快速幂</h4>
<ul class="lvl-0">
<li class="lvl-2">
<p>快速幂是以$\Theta(log \space n)$时间复杂度计算高次幂的小技巧</p>
</li>
</ul>
<figure class="highlight cpp"><figcaption><span>>folded</span></figcaption><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string"><bits/stdc++.h></span></span></span><br><span class="line"></span><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="comment">//递归</span></span><br><span class="line"><span class="function"><span class="type">long</span> <span class="type">long</span> <span class="title">binpow</span><span class="params">(<span class="type">long</span> <span class="type">long</span> a, <span class="type">long</span> <span class="type">long</span> b)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">if</span> (b == <span class="number">0</span>) {</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 class="type">long</span> <span class="type">long</span> res = <span class="built_in">binpow</span>(a, b / <span class="number">2</span>);</span><br><span class="line"> <span class="keyword">if</span> (b % <span class="number">2</span>) {</span><br><span class="line"> <span class="keyword">return</span> res * res * a;</span><br><span class="line"> } <span class="keyword">else</span> {</span><br><span class="line"> <span class="keyword">return</span> res * res;</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="function"><span class="type">long</span> <span class="type">long</span> <span class="title">binpow</span><span class="params">(<span class="type">long</span> <span class="type">long</span> a, <span class="type">long</span> <span class="type">long</span> b)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="type">long</span> <span class="type">long</span> res = <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">while</span> (b > <span class="number">0</span>) {</span><br><span class="line"> <span class="keyword">if</span> (b & <span class="number">1</span>) res = res * a;</span><br><span class="line"> a = a * a;</span><br><span class="line"> b >>= <span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> res;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<h4 id="gcd和lcm">gcd和lcm</h4>
<ul class="lvl-0">
<li class="lvl-2">
<p>最大公约数欧几里得算法</p>
</li>
</ul>
<figure class="highlight cpp"><figcaption><span>>folded</span></figcaption><table><tr><td class="code"><pre><span class="line"><span class="function"><span class="type">int</span> <span class="title">gcd</span><span class="params">(<span class="type">int</span> a, <span class="type">int</span> b)</span> </span>{</span><br><span class="line"> <span class="keyword">if</span> (b == <span class="number">0</span>) <span class="keyword">return</span> a;</span><br><span class="line"> <span class="keyword">return</span> <span class="built_in">gcd</span>(b, a % b);</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">lcm</span><span class="params">(<span class="type">int</span> a, <span class="type">int</span> b)</span> </span>{</span><br><span class="line"> <span class="keyword">return</span> a * b / <span class="built_in">gcd</span>(a, b);</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<ul class="lvl-0">
<li class="lvl-2">
<p>扩展欧几里得算法</p>
</li>
</ul>
<h3 id="常用stl库">常用stl库</h3>
<h4 id="排序-sort">排序 <code>sort</code></h4>
<figure class="highlight cpp"><figcaption><span>>folded</span></figcaption><table><tr><td class="code"><pre><span class="line"><span class="type">int</span> nums[<span class="number">100</span>];</span><br><span class="line"></span><br><span class="line"><span class="comment">//定义不同的cmp函数可以得到不同的排序</span></span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(<span class="type">int</span> &a, <span class="type">int</span> &b)</span> </span>{</span><br><span class="line"> <span class="keyword">return</span> a < b;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="built_in">sort</span>(nums, nums + n, cmp);</span><br></pre></td></tr></table></figure>
<h4 id="二分查找-lower-bound-upper-bound">二分查找 <code>lower_bound()</code> <code>upper_bound()</code></h4>
<figure class="highlight cpp"><figcaption><span>>folded</span></figcaption><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string"><algorithm></span></span></span><br><span class="line"></span><br><span class="line"><span class="comment">//取得最小的下标i使 a[i] >= x</span></span><br><span class="line"><span class="built_in">lower_bound</span>(a,a+n,x)-a <span class="comment">//下标从0开始</span></span><br><span class="line"><span class="built_in">lower_bound</span>(a+<span class="number">1</span>,a+n+<span class="number">1</span>,x)-a <span class="comment">//下标从1开始</span></span><br><span class="line"></span><br><span class="line"><span class="comment">//取得最小的下标i使 a[i] > x</span></span><br><span class="line"><span class="built_in">upper_bound</span>(a,a+n,x)-a <span class="comment">//下标从0开始</span></span><br><span class="line"><span class="built_in">upper_bound</span>(a+<span class="number">1</span>,a+n+<span class="number">1</span>,x)-a <span class="comment">//下标从1开始</span></span><br></pre></td></tr></table></figure>
<ul class="lvl-0">
<li class="lvl-2">
<p>可以对比两函数返回值,若不同则找到了a[i] == x,差值即为x的个数</p>
</li>
</ul>
<h4 id="set-map">set & map</h4>
<figure class="highlight cpp"><figcaption><span>>folded</span></figcaption><table><tr><td class="code"><pre><span class="line">set<<span class="type">int</span>> st;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">auto</span> i : st) {</span><br><span class="line"> cout << *it << endl;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">map<string, <span class="type">int</span>> mp;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">auto</span> it = mp.<span class="built_in">begin</span>(); it != mp.<span class="built_in">end</span>(); it++) {</span><br><span class="line"> cout << it->first << endl;</span><br><span class="line"> cout << it->second << endl;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<link rel="stylesheet" href="/css/spoiler.css" type="text/css"><script src="/js/spoiler.js" type="text/javascript" async></script>]]></content>
<categories>
<category>数据结构&算法</category>
</categories>
<tags>
<tag>C++</tag>
</tags>
</entry>
<entry>
<title>About Math</title>
<url>/2023/04/29/About-Math/</url>
<content><![CDATA[<h3 id="Introduction">Introduction</h3>
<p>介绍有关数学学习的问题</p>
<h3 id="🔗Links">🔗Links</h3>
<ul class="lvl-0">
<li class="lvl-2"><a href="https://www.bilibili.com/video/BV1XT4y1z78e">how to learn math</a></li>
<li class="lvl-2"><a href="https://www.bilibili.com/video/BV1kY4y1R76G">lesson list</a></li>
</ul>
<span id="more"></span>
<h3 id="Branch-of-mathematics">Branch of mathematics</h3>
<p><img src="/2023/04/29/About-Math/math.png" alt><br>
<img src="/2023/04/29/About-Math/layer0.png" alt><br>
<img src="/2023/04/29/About-Math/layer1.png" alt><br>
<img src="/2023/04/29/About-Math/layer21.png" alt><br>
<img src="/2023/04/29/About-Math/layer22.png" alt><br>
<img src="/2023/04/29/About-Math/layer23.png" alt><br>
<img src="/2023/04/29/About-Math/layer3.png" alt></p>
<h4 id="线性代数">线性代数</h4>
<h4 id="数学分析">数学分析</h4>
<h4 id="点集拓扑">点集拓扑</h4>
<h4 id="复分析">复分析</h4>
<h4 id="群论和抽象代数">群论和抽象代数</h4>
<h4 id="伽罗瓦理论">伽罗瓦理论</h4>
<h4 id="微分几何">微分几何</h4>
<h4 id="代数拓扑">代数拓扑</h4>
<link rel="stylesheet" href="/css/spoiler.css" type="text/css"><script src="/js/spoiler.js" type="text/javascript" async></script>]]></content>
<categories>
<category>数学</category>
</categories>
<tags>
<tag>Plan</tag>
<tag>Math</tag>
</tags>
</entry>
<entry>
<title>Literature and Philosophy</title>
<url>/2023/03/31/Literature-and-Philosophy/</url>
<content><![CDATA[<h3 id="Book-List">Book List</h3>
<span id="more"></span>
<h4 id="Literature">Literature</h4>
<h5 id="德">德</h5>
<ul class="lvl-0">
<li class="lvl-2">魔山</li>
</ul>
<h5 id="中">中</h5>
<ul class="lvl-0">
<li class="lvl-2">活着</li>
</ul>
<h4 id="Philosophy">Philosophy</h4>
<link rel="stylesheet" href="/css/spoiler.css" type="text/css"><script src="/js/spoiler.js" type="text/javascript" async></script>]]></content>
<categories>
<category>文学</category>
</categories>
<tags>
<tag>Plan</tag>
</tags>
</entry>
<entry>
<title>CSAPP bomblab</title>
<url>/2023/11/13/CSAPP-bomblab/</url>
<content><![CDATA[<h3 id="Intro-2">Intro</h3>
<ul class="lvl-0">
<li class="lvl-2">CSAPP里传奇的实验</li>
<li class="lvl-2">通过汇编能力拆除二进制炸弹,拯救世界!</li>
</ul>
<span id="more"></span>
<h3 id="phase-1">phase_1</h3>
<ul class="lvl-0">
<li class="lvl-2">
<p>通过<code>strings_not_equal</code>想到这里有个字符串判断</p>
</li>
<li class="lvl-2">
<p><code>x/s 402400</code>得到字符串为<code>Border relations with Canada have never been better.</code></p>
</li>
<li class="lvl-2">
<p>phase_1就是上述字符串</p>
</li>
</ul>
<h3 id="phase-2">phase_2</h3>
<ul class="lvl-0">
<li class="lvl-2">
<p>通过<code>read_six_numbers</code>得到phase_2是六个数字</p>
</li>
<li class="lvl-2">
<p><code>add eax, eax</code>可见每次取出的比较数字翻倍,第一个数字为1</p>
</li>
<li class="lvl-2">
<p>phase_2就是<code>1 2 4 8 16 32</code></p>
</li>
</ul>
<h3 id="phase-3">phase_3</h3>
<ul class="lvl-0">
<li class="lvl-2">
<p>阅读反汇编,可知读取两个数字</p>
</li>
<li class="lvl-2">
<p>第一个要比7小</p>
</li>
<li class="lvl-2">
<p>第二个根据第一个有不同的分支答案</p>
</li>
</ul>
<h3 id="phase-4">phase_4</h3>
<ul class="lvl-0">
<li class="lvl-2">
<p>第四题的func4是一个递归函数</p>
</li>
</ul>
<h3 id="phase-5">phase_5</h3>
<ul class="lvl-0">
<li class="lvl-2">
<p>通过内存查找关键字符串<code>flyers</code></p>
</li>
<li class="lvl-2">
<p><code>x/s 0x4024b0</code>查找另一个敏感字符串<code>maduiersnfotvbylSo you think you can stop the bomb with ctrl-c, do you?</code></p>
</li>
<li class="lvl-2">
<p>输入的六个字母的末4位正好是所取字符串<code>flyers</code>的索引<code>0x9 0xF 0xE 0x5 0x6 0x7</code></p>
</li>
</ul>
<h3 id="phase-6">phase_6</h3>
<ul class="lvl-0">
<li class="lvl-2">
<p>输入六个数字,用7减去六个数字得到六个索引</p>
</li>
<li class="lvl-2">
<p>是一个链表,要使链表的内容从大到小排列</p>
</li>
</ul>
<h3 id="答案">答案</h3>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line">Border relations with Canada have never been better.</span><br><span class="line"><span class="number">1</span> <span class="number">2</span> <span class="number">4</span> <span class="number">8</span> <span class="number">16</span> <span class="number">32</span></span><br><span class="line"><span class="number">0</span> <span class="number">207</span></span><br><span class="line"><span class="number">7</span> <span class="number">0</span></span><br><span class="line">ionefg</span><br><span class="line"><span class="number">4</span> <span class="number">3</span> <span class="number">2</span> <span class="number">1</span> <span class="number">6</span> <span class="number">5</span></span><br><span class="line"></span><br></pre></td></tr></table></figure>
<h3 id="secret-phase">secret_phase</h3>
<ul class="lvl-0">
<li class="lvl-2">
<p>彩蛋!一棵隐藏的二叉树</p>
</li>
</ul>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line">Border relations with Canada have never been better.</span><br><span class="line"><span class="number">1</span> <span class="number">2</span> <span class="number">4</span> <span class="number">8</span> <span class="number">16</span> <span class="number">32</span></span><br><span class="line"><span class="number">0</span> <span class="number">207</span></span><br><span class="line"><span class="number">7</span> <span class="number">0</span> DrEvil</span><br><span class="line">ionefg</span><br><span class="line"><span class="number">4</span> <span class="number">3</span> <span class="number">2</span> <span class="number">1</span> <span class="number">6</span> <span class="number">5</span></span><br><span class="line"><span class="number">22</span></span><br><span class="line"></span><br></pre></td></tr></table></figure>
<link rel="stylesheet" href="/css/spoiler.css" type="text/css"><script src="/js/spoiler.js" type="text/javascript" async></script>]]></content>
<categories>
<category>体系结构</category>
</categories>
<tags>
<tag>C</tag>
<tag>x86</tag>
</tags>
</entry>
<entry>
<title>CSAPP datalab</title>
<url>/2023/11/11/CSAPP-datalab/</url>
<content><![CDATA[<p>突发奇想,重做下CSAPP的lab,顺便把以前没做完的补上,希望能坚持下来</p>
<h3 id="Links">Links</h3>
<ul class="lvl-0">
<li class="lvl-2"><a href="http://csapp.cs.cmu.edu/3e/labs.html">lab download</a></li>
</ul>
<span id="more"></span>
<h3 id="Intro">Intro</h3>
<ul class="lvl-0">
<li class="lvl-2">datalab主要是使用位运算来实现函数,考验对底层数据类型的掌握</li>
<li class="lvl-2">修改<code>bit.c</code>文件以彰显你的位运算技术</li>
<li class="lvl-2"><code>32bit</code></li>
</ul>
<h3 id="Solution">Solution</h3>
<h4 id="bitXor">bitXor</h4>
<ul class="lvl-0">
<li class="lvl-2">用位与和位非实现位异或</li>
<li class="lvl-2">德摩根律走起</li>
</ul>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line"><span class="type">int</span> <span class="title function_">bitXor</span><span class="params">(<span class="type">int</span> x, <span class="type">int</span> y)</span> {</span><br><span class="line"> <span class="keyword">return</span> ~(~(~x & y) & ~(x & ~ y));</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<h4 id="tmin">tmin</h4>
<ul class="lvl-0">
<li class="lvl-2">要求返回最小的补码值0x10000000</li>
</ul>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line"><span class="type">int</span> <span class="title function_">tmin</span><span class="params">(<span class="type">void</span>)</span> {</span><br><span class="line"> <span class="keyword">return</span> <span class="number">1</span> << <span class="number">31</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<h4 id="isTmax">isTmax</h4>
<ul class="lvl-0">
<li class="lvl-2">判断是否是补码最大值</li>
<li class="lvl-2">由tmax的特征可得,特判0xFFFFFFFF</li>
</ul>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line"><span class="type">int</span> <span class="title function_">isTmax</span><span class="params">(<span class="type">int</span> x)</span> {</span><br><span class="line"> <span class="keyword">return</span> !(((x + <span class="number">1</span>) ^ x) ^ ~<span class="number">0x0</span>) & !!(~x);</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<h4 id="allOddBits">allOddBits</h4>
<ul class="lvl-0">
<li class="lvl-2">要求判断所有奇数位是否都为1</li>
<li class="lvl-2">先取奇数位</li>
<li class="lvl-2">再判断是否与0xAAAAAAAA相同</li>
</ul>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line"><span class="type">int</span> <span class="title function_">allOddBits</span><span class="params">(<span class="type">int</span> x)</span> {</span><br><span class="line"> <span class="keyword">return</span> !((x & <span class="number">0xAAAAAAAA</span>) ^ (<span class="number">0xAAAAAAAA</span>));</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<h4 id="negate">negate</h4>
<ul class="lvl-0">
<li class="lvl-2">求一个数的负数</li>
<li class="lvl-2"><code>~x + 1</code>取反加一,常见的转换了</li>
</ul>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line"><span class="type">int</span> <span class="title function_">negate</span><span class="params">(<span class="type">int</span> x)</span> {</span><br><span class="line"> <span class="keyword">return</span> (~x + <span class="number">1</span>);</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<h4 id="isAsciiDigit">isAsciiDigit</h4>
<ul class="lvl-0">
<li class="lvl-2">判断是否是Ascii码的0-9,0x30 <= x <= 0x39</li>
<li class="lvl-2">分三个条件</li>
<li class="lvl-2">前26位为0</li>
<li class="lvl-2">形如0x3*</li>
<li class="lvl-2">最后四位减去10,符号位为1</li>
</ul>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line"><span class="type">int</span> <span class="title function_">isAsciiDigit</span><span class="params">(<span class="type">int</span> x)</span> {</span><br><span class="line"> <span class="type">int</span> cond1 = !(x >> <span class="number">6</span>);</span><br><span class="line"></span><br><span class="line"> <span class="type">int</span> cond2 = !((x & <span class="number">0x30</span>) ^ (<span class="number">0x30</span>));</span><br><span class="line"></span><br><span class="line"> <span class="type">int</span> cond3 = !!(((x & <span class="number">0xF</span>) + (~<span class="number">0xA</span> + <span class="number">1</span>))>><span class="number">31</span>);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> cond1 & cond2 & cond3;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<h4 id="conditional">conditional</h4>
<ul class="lvl-0">
<li class="lvl-2">实现?运算符</li>
<li class="lvl-2">1取反加一为0xFFFFFFFF,0取反加一再取反为0x0,通过掩码实现选择</li>
</ul>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line"><span class="type">int</span> <span class="title function_">conditional</span><span class="params">(<span class="type">int</span> x, <span class="type">int</span> y, <span class="type">int</span> z)</span> {</span><br><span class="line"> x = !!x;</span><br><span class="line"> <span class="keyword">return</span> (~x + <span class="number">1</span>) & y | ~(~x + <span class="number">1</span>) & z;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<h4 id="isLessOrEqual">isLessOrEqual</h4>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line">* 实现<=</span><br><span class="line">* 主要思想是x-y的符号位</span><br><span class="line">* 要防止整型溢出</span><br><span class="line"><span class="type">int</span> isLessOrEqual(<span class="type">int</span> x, <span class="type">int</span> y) {</span><br><span class="line"> <span class="type">int</span> sub = x + (~y + <span class="number">1</span>);</span><br><span class="line"> <span class="type">int</span> xf = !(x >> <span class="number">31</span>);</span><br><span class="line"> <span class="type">int</span> yf = !(y >> <span class="number">31</span>);</span><br><span class="line"> <span class="type">int</span> sf = !(sub >> <span class="number">31</span>);</span><br><span class="line"> <span class="type">int</span> flag1 = (!xf & yf); <span class="comment">//x- y+ x</span></span><br><span class="line"> <span class="type">int</span> flag2 = !(xf & !yf);</span><br><span class="line"> <span class="keyword">return</span> flag2 & (!sf | !(x ^ y) | flag1);</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<h4 id="logicalNeg">logicalNeg</h4>
<ul class="lvl-0">
<li class="lvl-2">实现逻辑非!</li>
</ul>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line"><span class="type">int</span> <span class="title function_">logicalNeg</span><span class="params">(<span class="type">int</span> x)</span> {</span><br><span class="line"> <span class="type">int</span> sign = x | (~x + <span class="number">1</span>);</span><br><span class="line"> <span class="keyword">return</span> (sign >> <span class="number">31</span>) + <span class="number">1</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<h4 id="howManyBits">howManyBits</h4>
<ul class="lvl-0">
<li class="lvl-2">通过二的倍数不断逼近,得到所需位数</li>
</ul>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line"><span class="type">int</span> <span class="title function_">howManyBits</span><span class="params">(<span class="type">int</span> x)</span> {</span><br><span class="line"> <span class="type">int</span> b16,b8,b4,b2,b1,b0;</span><br><span class="line"> <span class="type">int</span> sign = x >> <span class="number">31</span>;</span><br><span class="line"> x = (sign & ~x)|(~sign & x);</span><br><span class="line"> b16 = !!(x>><span class="number">16</span>)<<<span class="number">4</span>;</span><br><span class="line"> x = x >> b16;</span><br><span class="line"> b8 = !!(x>><span class="number">8</span>)<<<span class="number">3</span>;</span><br><span class="line"> x = x >> b8;</span><br><span class="line"> b4 = !!(x>><span class="number">4</span>)<<<span class="number">2</span>;</span><br><span class="line"> x = x >> b4;</span><br><span class="line"> b2 = !!(x>><span class="number">2</span>)<<<span class="number">1</span>;</span><br><span class="line"> x = x >> b2;</span><br><span class="line"> b1 = !!(x>><span class="number">1</span>);</span><br><span class="line"> x = x >> b1;</span><br><span class="line"> b0 = x;</span><br><span class="line"> <span class="keyword">return</span> b16+b8+b4+b2+b1+b0+<span class="number">1</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<h4 id="floatScale2">floatScale2</h4>
<ul class="lvl-0">
<li class="lvl-2">实现IEEE浮点数*2</li>
<li class="lvl-2">对非规格化,</li>
<li class="lvl-2">对NaN返回本身</li>
<li class="lvl-2">对计算后expr超过255的返回正负无穷</li>
<li class="lvl-2">否则expr++</li>
</ul>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line"><span class="type">unsigned</span> <span class="title function_">floatScale2</span><span class="params">(<span class="type">unsigned</span> uf)</span> {</span><br><span class="line"> <span class="type">unsigned</span> fraction = uf & <span class="number">0x007FFFFF</span>;</span><br><span class="line"> <span class="type">unsigned</span> exponent = (uf >> <span class="number">23</span>) & <span class="number">0xFF</span>;</span><br><span class="line"> <span class="type">unsigned</span> sign = uf & (<span class="number">0x1</span> << <span class="number">31</span>);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (exponent == <span class="number">0</span>) {</span><br><span class="line"> <span class="comment">// 非规格化</span></span><br><span class="line"> <span class="keyword">return</span> uf << <span class="number">1</span> | sign;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span> (exponent == <span class="number">255</span>) {</span><br><span class="line"> <span class="comment">// NaN</span></span><br><span class="line"> <span class="keyword">return</span> uf;</span><br><span class="line"> }</span><br><span class="line"> exponent = exponent + <span class="number">1</span>; </span><br><span class="line"> <span class="keyword">if</span> (exponent == <span class="number">255</span>) {</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0x7f800000</span> | sign;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> sign | (exponent << <span class="number">23</span>) | fraction;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<h4 id="floatFloat2Int">floatFloat2Int</h4>
<ul class="lvl-0">
<li class="lvl-2">实现浮点数转int</li>
</ul>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line"><span class="type">int</span> <span class="title function_">floatFloat2Int</span><span class="params">(<span class="type">unsigned</span> uf)</span> {</span><br><span class="line"> <span class="type">int</span> fraction = (uf & <span class="number">0x007fffff</span>) | <span class="number">0x00800000</span>;</span><br><span class="line"> <span class="type">int</span> exponent = ((uf >> <span class="number">23</span>) & <span class="number">0xFF</span>) - <span class="number">127</span>;</span><br><span class="line"> <span class="type">int</span> sign = uf >> <span class="number">31</span>;</span><br><span class="line"> <span class="keyword">if</span> (exponent > <span class="number">31</span>) {</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0x80000000</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span> (exponent < <span class="number">0</span>) {</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0x0</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span> (exponent > <span class="number">23</span>) {</span><br><span class="line"> fraction = fraction << (exponent - <span class="number">23</span>);</span><br><span class="line"> } <span class="keyword">else</span> {</span><br><span class="line"> fraction = fraction >> (<span class="number">23</span> - exponent);</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span>(!((fraction >> <span class="number">31</span>) ^ sign)) <span class="keyword">return</span> fraction;</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(fraction >> <span class="number">31</span>) <span class="keyword">return</span> <span class="number">0x80000000</span>;</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">return</span> ~fraction + <span class="number">1</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<h4 id="floatPower2">floatPower2</h4>
<ul class="lvl-0">
<li class="lvl-2">实现2.0^x的IEEE浮点数</li>
</ul>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line"><span class="type">unsigned</span> <span class="title function_">floatPower2</span><span class="params">(<span class="type">int</span> x)</span> {</span><br><span class="line"> <span class="keyword">if</span> (x < <span class="number">-149</span>) {</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line"> } <span class="keyword">else</span> <span class="keyword">if</span> (x < <span class="number">-126</span>) {</span><br><span class="line"> <span class="type">int</span> shift = <span class="number">23</span> + (x + <span class="number">126</span>);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">1</span> << shift;</span><br><span class="line"> } <span class="keyword">else</span> <span class="keyword">if</span> (x <= <span class="number">127</span>) {</span><br><span class="line"> <span class="type">int</span> expr = x + <span class="number">127</span>;</span><br><span class="line"> <span class="keyword">return</span> expr << <span class="number">23</span>;</span><br><span class="line"> } <span class="keyword">else</span> {</span><br><span class="line"> <span class="keyword">return</span> (<span class="number">0xFF</span>) << <span class="number">23</span>; </span><br><span class="line"> } </span><br><span class="line">}</span><br></pre></td></tr></table></figure><link rel="stylesheet" href="/css/spoiler.css" type="text/css"><script src="/js/spoiler.js" type="text/javascript" async></script>]]></content>
<categories>
<category>体系结构</category>
</categories>
<tags>
<tag>C</tag>
<tag>x86</tag>
</tags>
</entry>
<entry>
<title>Latex</title>
<url>/2023/11/08/Latex/</url>
<content><![CDATA[<h3 id="Intro-2">Intro</h3>
<ul class="lvl-0">
<li class="lvl-2">记录有关Latex的使用指南,润色论文格式。</li>
</ul>
<h3 id="Links">Links</h3>
<ul class="lvl-0">
<li class="lvl-2">
<p><a href="https://www.overleaf.com/">Overleaf</a></p>
</li>
</ul>
<link rel="stylesheet" href="/css/spoiler.css" type="text/css"><script src="/js/spoiler.js" type="text/javascript" async></script>]]></content>
<categories>
<category>CS Tools</category>
</categories>
<tags>
<tag>Latex</tag>
</tags>
</entry>
<entry>
<title>Hackergame2023</title>
<url>/2023/11/04/hackergame2023/</url>
<content><![CDATA[<h2 id="Hackergame2023-writeup-by-huayi">Hackergame2023 writeup by huayi</h2>
<ul class="lvl-0">
<li class="lvl-2">紧张刺激的Hackergame2023结束了,第一次打hackergame,最后也拿到了自己十分满意的成绩</li>
<li class="lvl-2"><code>当前分数:3750, 总排名:142 / 2386</code></li>
</ul>
<span id="more"></span>
<h3 id="Hackergame-启动">Hackergame 启动 <img src="https://img.shields.io/badge/-Web-blueviolet?style=flat-square" alt></h3>
<ul class="lvl-0">
<li class="lvl-2">
<p>首先大喊Hackergame启动,url栏末尾出现<code>/?similarity=</code></p>
</li>
<li class="lvl-2">
<p>修改<code>/?similarity=100</code>即可获取flag</p>
</li>
</ul>
<h3 id="猫咪小测">猫咪小测 <img src="https://img.shields.io/badge/-OSINT-informational?style=flat-square" alt></h3>
<p>Q1 想要借阅世界图书出版公司出版的《A Classical Introduction To Modern Number Theory 2nd ed.》,应当前往中国科学技术大学西区图书馆的哪一层?</p>
<ul class="lvl-0">
<li class="lvl-2">
<p>搜索<code>中国科学技术大学西区图书馆</code>发现网页<a href="https://lib.ustc.edu.cn/%E6%9C%AC%E9%A6%86%E6%A6%82%E5%86%B5/%E5%9B%BE%E4%B9%A6%E9%A6%86%E6%A6%82%E5%86%B5%E5%85%B6%E4%BB%96%E6%96%87%E6%A1%A3/%E8%A5%BF%E5%8C%BA%E5%9B%BE%E4%B9%A6%E9%A6%86%E7%AE%80%E4%BB%8B/">西区图书馆简介</a></p>
</li>
<li class="lvl-2">
<p>因此外文图书在<strong>12</strong>层</p>
</li>
</ul>
<p>Q2 今年 arXiv 网站的天体物理版块上有人发表了一篇关于「可观测宇宙中的鸡的密度上限」的论文,请问论文中作者计算出的鸡密度函数的上限为 10 的多少次方每立方秒差距?</p>
<ul class="lvl-0">
<li class="lvl-2">
<p>搜索<code>可观测宇宙中的鸡的密度上限</code>答案<strong>23</strong>在这个<a href="https://www.zhihu.com/question/20337132/answer/3023506910">知乎回答</a>里</p>
</li>
</ul>
<p>Q3 为了支持 TCP BBR 拥塞控制算法,在编译 Linux 内核时应该配置好哪一条内核选项?</p>
<ul class="lvl-0">
<li class="lvl-2">
<p>搜索<code>TCP BBR Linux kernel config</code>,即得到答案<strong>CONFIG_TCP_CONG_BBR</strong></p>
</li>
</ul>
<p>Q4 🥒🥒🥒:「我……从没觉得写类型标注有意思过」。在一篇论文中,作者给出了能够让 Python 的类型检查器 MyPY mypy 陷入死循环的代码,并证明 Python 的类型检查和停机问题一样困难。请问这篇论文发表在今年的哪个学术会议上?</p>
<ul class="lvl-0">
<li class="lvl-2">
<p>参考网站(<a href="https://ccf.atom.im/">https://ccf.atom.im/</a>)中下拉找到<code>软件工程/系统软件/程序设计语言</code>类的会议,手动爆破得到会议名为<strong>ECOOP</strong></p>
</li>
</ul>
<h3 id="更深更暗">更深更暗 <img src="https://img.shields.io/badge/-Web-blueviolet?style=flat-square" alt></h3>
<ul class="lvl-0">
<li class="lvl-2">
<p><code>Crtl + a</code> <code>Crtl + c</code> <code>Crtl + v</code>粘贴即可获得flag</p>
</li>
</ul>
<h3 id="旅行照片-3-0-2-3">旅行照片 3.0(2/3) <img src="https://img.shields.io/badge/-OSINT-informational?style=flat-square" alt></h3>
<h4 id="神秘奖牌">神秘奖牌</h4>
<ul class="lvl-0">
<li class="lvl-2">
<p>含有奖牌的图中是诺贝尔物理学奖和诺贝尔化学奖奖牌,根据题意,学长是东京大学学生,因此搜索东京大学诺贝尔奖得主,发现符号条件且出生最晚是<code>梶田隆章 1959.3 东京大学</code>,研究所名为<strong>ICRR</strong>,东京大学宇宙射线研究所</p>
</li>
<li class="lvl-2">
<p>对暑假6 7 8 9月的日期爆破,得到日期<strong>2023.8.10</strong></p>
</li>
</ul>
<h4 id="这是什么活动?">这是什么活动?</h4>
<ul class="lvl-0">
<li class="lvl-2">
<p>第一问搜索<code>東京 上野公園 "2023.8.10"</code>,发现是<a href="https://umeshu-matsuri.jp/tokyo_ueno/">梅酒节</a>,其中含有<a href="https://umeshu-matsuri.jp/tokyo_staff/">【ボランティアSTAFF募集】</a>,发现编号为<strong>S495584522</strong></p>
</li>
<li class="lvl-2">
<p>第二问爆破,最后发现是<strong>0</strong></p>
</li>
</ul>
<h4 id="后会有期,学长!">后会有期,学长!</h4>
<ul class="lvl-0">
<li class="lvl-2">
<p>第一问卡了一年还是没做出来,以后要仔细看看图片里的文字了(statphys28),答案是<strong>安田讲堂</strong></p>
</li>
<li class="lvl-2">
<p>第二问<strong>熊猫-秋田犬</strong>,搜索<code>ボタン&カフリンクス 上野</code>,答案<strong>熊猫</strong>在这个<a href="https://www.instagram.com/explore/tags/%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%A2%E3%83%B3%E3%83%89%E3%82%AB%E3%83%95%E3%83%AA%E3%83%B3%E3%82%AF%E3%82%B9/?ref=9472">网站</a></p>
</li>
<li class="lvl-2">
<p>由后面的马里奥推测是涉谷任天堂旗舰店,搜索<code>涉谷 3d</code>即得到答案<strong>秋田犬</strong></p>
</li>
</ul>
<h3 id="赛博井字棋">赛博井字棋 <img src="https://img.shields.io/badge/-Web-blueviolet?style=flat-square" alt></h3>
<ul class="lvl-0">
<li class="lvl-2">
<p>和ai下一子</p>
</li>
<li class="lvl-2">
<p>F12打开控制台修改ai下的位置如<code>board[1][1] = 0</code>然后即可覆盖ai下的地方</p>
</li>
<li class="lvl-2">
<p>轻松拿下游戏,重振人类井字棋荣光!</p>
</li>
</ul>
<h3 id="奶奶的睡前-flag-故事">奶奶的睡前 flag 故事 <img src="https://img.shields.io/badge/-Misc-informational?style=flat-square" alt></h3>
<ul class="lvl-0">
<li class="lvl-2">
<p>根据题目中 <strong>谷歌的『亲儿子』连系统都没心思升级 截图 在最后</strong>几个关键词googl搜索</p>
</li>
<li class="lvl-2">
<p>发现google亲儿子系列pixel存在截图漏洞(事实上早期windows也存在)</p>
</li>
<li class="lvl-2">
<p>pixel acropalypse截图漏洞</p>
</li>
<li class="lvl-2">
<p><a href="https://lordofpipes.github.io/acropadetect/">检查工具</a></p>
</li>
<li class="lvl-2">
<p><a href="https://acropalypse.app/">恢复工具</a></p>
</li>
<li class="lvl-2">
<p>由于<strong>连系统都没心思升级</strong>,尝试低版本pixel,在系统为pixel3时就恢复成功了</p>
</li>
</ul>
<h3 id="组委会模拟器">组委会模拟器 <img src="https://img.shields.io/badge/-Web-blueviolet?style=flat-square" alt></h3>
<ul class="lvl-0">
<li class="lvl-2">
<p>可以进化成为高频率星人后再申请组委会</p>
</li>
<li class="lvl-2">
<p>如果进化失败,可以使用人类的javascript脚本</p>
</li>
</ul>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line"><span class="built_in">setInterval</span>(<span class="keyword">function</span>(<span class="params"></span>) {</span><br><span class="line"> <span class="keyword">var</span> x = <span class="variable language_">document</span>.<span class="title function_">getElementsByClassName</span>(<span class="string">"fakeqq-message__bubble"</span>);</span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">var</span> i = <span class="number">0</span>; i < x.<span class="property">length</span>; i++) {</span><br><span class="line"> <span class="keyword">var</span> content = x[i].<span class="property">textContent</span>;</span><br><span class="line"> <span class="keyword">if</span> (content.<span class="title function_">search</span>(<span class="regexp">/hack\[/</span>) != -<span class="number">1</span>) {</span><br><span class="line"> <span class="variable language_">console</span>.<span class="title function_">log</span>(content);</span><br><span class="line"> x[i].<span class="title function_">click</span>(); </span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}, <span class="number">1500</span>);</span><br></pre></td></tr></table></figure>
<h3 id="虫">虫 <img src="https://img.shields.io/badge/-Misc-informational?style=flat-square" alt></h3>
<ul class="lvl-0">
<li class="lvl-2">
<p>SSTV:慢扫描电视(Slow-scan television)是业余无线电爱好者的一种主要图片传输方法,慢扫描电视通过无线电传输和接收单色或彩色静态图片。</p>
</li>
<li class="lvl-2">
<p>推荐的工具MMSSTV,e2eSoft来读取.wav文件</p>
</li>
</ul>
<h3 id="JSON-⊂-YAML-1-2">JSON ⊂ YAML(1/2) <img src="https://img.shields.io/badge/-Misc-informational?style=flat-square" alt></h3>
<ul class="lvl-0">
<li class="lvl-2">
<p>这题没有真正读懂文档</p>
</li>
</ul>
<h3 id="Git-Git">Git? Git! <img src="https://img.shields.io/badge/-Misc-informational?style=flat-square" alt></h3>
<ul class="lvl-0">
<li class="lvl-2">
<p>根据题意猜测是git回滚</p>
</li>
<li class="lvl-2">
<p><code>git reflog</code>查看提交历史记录</p>
</li>
<li class="lvl-2">
<p><code>git reset --hard 505e1a3</code>回滚到含flag的版本,读取readme.md中的flag</p>
</li>
</ul>
<h3 id="HTTP-集邮册">HTTP 集邮册 <img src="https://img.shields.io/badge/-Web-blueviolet?style=flat-square" alt></h3>
<ul class="lvl-0">
<li class="lvl-2">
<p><a href="https://http.dev/">参考资料</a></p>
</li>
<li class="lvl-2">
<p>尝试了各种请求例子得到十二个状态码</p>
</li>
<li class="lvl-2">
<p>无状态码:去掉http协议</p>
</li>
</ul>
<h3 id="Docker-for-Everyone">Docker for Everyone <img src="https://img.shields.io/badge/-Misc-informational?style=flat-square" alt></h3>
<ul class="lvl-0">
<li class="lvl-2">
<p><code>docker run -v /:/mnt -it alpine</code>挂载根目录</p>
</li>
<li class="lvl-2">
<p>在mnt中寻找flag</p>
</li>
<li class="lvl-2">
<p>发现<code>flag -> /dev/shm/flag</code>目录下</p>
</li>
<li class="lvl-2">
<p><code>cat dev/shm/flag</code>读取</p>
</li>
</ul>
<h3 id="惜字如金-2-0">惜字如金 2.0 <img src="https://img.shields.io/badge/-Misc-informational?style=flat-square" alt></h3>
<ul class="lvl-0">
<li class="lvl-2">
<p>根据代码后面提示,每行应有24个字符,而原来每行只有23个,说明被惜字如金优化了</p>
</li>
</ul>
<figure class="highlight py"><table><tr><td class="code"><pre><span class="line">cod_dict += [<span class="string">'nymeh1niwemflcir}echaet'</span>]</span><br><span class="line">cod_dict += [<span class="string">'a3g7}kidgojernoetlsup?h'</span>]</span><br><span class="line">cod_dict += [<span class="string">'ulw!f5soadrhwnrsnstnoeq'</span>]</span><br><span class="line">cod_dict += [<span class="string">'ct{l-findiehaai{oveatas'</span>]</span><br><span class="line">cod_dict += [<span class="string">'ty9kxborszstguyd?!blm-p'</span>]</span><br></pre></td></tr></table></figure>
<ul class="lvl-0">
<li class="lvl-2">
<p>根据<code>flag{}</code>的格式恢复数据</p>
</li>
</ul>
<figure class="highlight py"><table><tr><td class="code"><pre><span class="line">cod_dict += [<span class="string">'nymeh1niwemflcir}echaete'</span>]</span><br><span class="line">cod_dict += [<span class="string">'a3g7}kidgojernoetlsup?he'</span>]</span><br><span class="line">cod_dict += [<span class="string">'ulw!ff5soadrhwnrsnstnoeq'</span>]</span><br><span class="line">cod_dict += [<span class="string">'ctt{l-findiehaai{oveatas'</span>]</span><br><span class="line">cod_dict += [<span class="string">'ty9kxborszstgguyd?!blm-p'</span>]</span><br></pre></td></tr></table></figure>
<ul class="lvl-0">
<li class="lvl-2">
<p>运行得到flag</p>
</li>
</ul>
<h3 id="🪐-高频率星球">🪐 高频率星球 <img src="https://img.shields.io/badge/-Misc-informational?style=flat-square" alt></h3>
<ul class="lvl-0">
<li class="lvl-2">
<p><code>asciinema play asciinema_restore.rec >> flag.js</code></p>
</li>
<li class="lvl-2">
<p>查找删除多余的数据</p>
</li>
<li class="lvl-2">
<p><code>nodejs flag.js</code>得到flag</p>
</li>
</ul>
<h3 id="🪐-小型大语言模型星球(2-4)">🪐 小型大语言模型星球(2/4) <img src="https://img.shields.io/badge/-Misc-informational?style=flat-square" alt></h3>
<h4 id="You-Are-Smart">You Are Smart</h4>
<ul class="lvl-0">
<li class="lvl-2">
<p>输入<code>Am I smart?</code></p>
</li>
</ul>
<h4 id="Accepted">Accepted</h4>
<ul class="lvl-0">
<li class="lvl-2">
<p>Python脚本随机爆破七位英文字母或六位英文字母</p>
</li>
</ul>
<figure class="highlight py"><table><tr><td class="code"><pre><span class="line"><span class="keyword">from</span> transformers <span class="keyword">import</span> AutoModelForCausalLM, AutoTokenizer, GenerationConfig</span><br><span class="line"></span><br><span class="line">model = AutoModelForCausalLM.from_pretrained(<span class="string">"roneneldan/TinyStories-33M"</span>)</span><br><span class="line"></span><br><span class="line">tokenizer = AutoTokenizer.from_pretrained(<span class="string">"EleutherAI/gpt-neo-125M"</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> random</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">generate_random_str</span>(<span class="params">randomlength=<span class="number">16</span></span>):</span><br><span class="line"> random_str =<span class="string">''</span></span><br><span class="line"> base_str =<span class="string">'abcdefghigklmnopqrstuvwxyz'</span></span><br><span class="line"> length =<span class="built_in">len</span>(base_str) -<span class="number">1</span></span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(randomlength):</span><br><span class="line"> random_str +=base_str[random.randint(<span class="number">0</span>, length)]</span><br><span class="line"> <span class="keyword">return</span> random_str</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> __name__ == <span class="string">'__main__'</span>:</span><br><span class="line"></span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">10000</span>):</span><br><span class="line"> prompt = generate_random_str(<span class="number">6</span>)</span><br><span class="line"> <span class="comment"># prompt = "Am I smart?"</span></span><br><span class="line"> input_ids = tokenizer.encode(prompt, return_tensors=<span class="string">"pt"</span>)</span><br><span class="line"></span><br><span class="line"> <span class="comment"># Generate completion</span></span><br><span class="line"> output = model.generate(input_ids, max_length = <span class="number">1000</span>, num_beams=<span class="number">1</span>)</span><br><span class="line"></span><br><span class="line"> <span class="comment"># Decode the completion</span></span><br><span class="line"> output_text = tokenizer.decode(output[<span class="number">0</span>], skip_special_tokens=<span class="literal">True</span>)</span><br><span class="line"></span><br><span class="line"> <span class="comment"># Print the generated text</span></span><br><span class="line"> <span class="keyword">if</span> <span class="string">"accepted"</span> <span class="keyword">in</span> output_text:</span><br><span class="line"> <span class="built_in">print</span>(i, <span class="string">"-> OK"</span>)</span><br><span class="line"> <span class="built_in">print</span>(<span class="string">"prompt: "</span>, prompt)</span><br><span class="line"> <span class="built_in">print</span>(<span class="string">"output: "</span>, output_text)</span><br><span class="line"> <span class="keyword">break</span></span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> <span class="built_in">print</span>(i, <span class="string">"-> no"</span>)</span><br><span class="line"> <span class="built_in">print</span>(<span class="string">"prompt: "</span>, prompt)</span><br></pre></td></tr></table></figure>
<ul class="lvl-0">
<li class="lvl-2">
<p>运气好爆破成功了,爆破出来的结果应该不尽相同<br>
prompt: vffwmi<br>
output: accepted the cone and was so happy. She thanked the man and ran off with her cone.<br>
The cone was so delicious and she was so</p>
</li>
</ul>
<h3 id="🪐-流式星球">🪐 流式星球 <img src="https://img.shields.io/badge/-Misc-informational?style=flat-square" alt></h3>
<ul class="lvl-0">
<li class="lvl-2">
<p>Python脚本读取二进制到flag.mp4</p>
</li>
</ul>
<figure class="highlight py"><table><tr><td class="code"><pre><span class="line"><span class="keyword">import</span> cv2</span><br><span class="line"><span class="keyword">import</span> numpy <span class="keyword">as</span> np</span><br><span class="line"><span class="keyword">import</span> time</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> w <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1500</span>, <span class="number">2000</span>):</span><br><span class="line"> <span class="built_in">print</span>(<span class="string">"w = "</span>, w)</span><br><span class="line"> h = w</span><br><span class="line"> num = <span class="built_in">int</span>(<span class="number">135146688</span> / w / h / <span class="number">3</span>)</span><br><span class="line"> <span class="comment"># 打开二进制文件</span></span><br><span class="line"> f = <span class="built_in">open</span>(<span class="string">'video.bin'</span>, <span class="string">'rb'</span>)</span><br><span class="line"></span><br><span class="line"> <span class="comment"># 创建VideoWriter对象</span></span><br><span class="line"> out = cv2.VideoWriter(<span class="string">'output.mp4'</span>, cv2.VideoWriter_fourcc(*<span class="string">"mp4v"</span>), num, (w, h), <span class="literal">True</span>)</span><br><span class="line"></span><br><span class="line"> <span class="comment"># 循环读取二进制数据,并转换为图像</span></span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">0</span>, num):</span><br><span class="line"> <span class="comment"># 读取一帧的字节数</span></span><br><span class="line"> data = f.read(w*h*<span class="number">3</span>)</span><br><span class="line"> <span class="comment"># 如果没有数据,则退出循环</span></span><br><span class="line"> <span class="keyword">if</span> <span class="keyword">not</span> data:</span><br><span class="line"> <span class="keyword">break</span></span><br><span class="line"> <span class="comment"># 将字节数据转换为一维数组</span></span><br><span class="line"> arr = np.frombuffer(data, dtype=np.uint8)</span><br><span class="line"> <span class="comment"># 将一维数组转换为三维图像</span></span><br><span class="line"> img = arr.reshape(w, h, <span class="number">3</span>)</span><br><span class="line"> <span class="comment"># 将图像写入视频文件</span></span><br><span class="line"> out.write(img)</span><br><span class="line"></span><br><span class="line"> <span class="comment"># 释放资源</span></span><br><span class="line"> f.close()</span><br><span class="line"> out.release()</span><br><span class="line"></span><br><span class="line"> time.sleep(<span class="number">3</span>)</span><br></pre></td></tr></table></figure>
<ul class="lvl-0">
<li class="lvl-2">
<p>先尝试几个宽和高,失败后人肉调频发现w=1708,h=1708时出现了4列多行的画面</p>
</li>
<li class="lvl-2">
<p>于是w=1708/4=427得到正常一帧图片的宽,最后在视频中得到flag</p>
</li>
</ul>
<h3 id="🪐-低带宽星球-1-2">🪐 低带宽星球(1/2) <img src="https://img.shields.io/badge/-Misc-informational?style=flat-square" alt></h3>
<ul class="lvl-0">
<li class="lvl-2">
<p>第一问扔一个压缩网站里面就好了</p>
</li>
</ul>
<h3 id="为什么要打开-flag-😡-1-2">为什么要打开 /flag 😡(1/2) <img src="https://img.shields.io/badge/-Pwn-grey?style=flat-square" alt></h3>
<ul class="lvl-0">
<li class="lvl-2">
<p>想过打包main和动态链接库(但没用)</p>
</li>
<li class="lvl-2">
<p>想过在根目录写入动态链接库(但Read Only)</p>
</li>
<li class="lvl-2">
<p>想过运行时改变环境变量LD_PRELOAD(但已经迟了)</p>
</li>
<li class="lvl-2">
<p>最后居然是静态链接直接绕过了函数</p>
</li>
</ul>
<figure class="highlight c"><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string"><stdio.h></span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string"><stdlib.h></span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">is_flag</span><span class="params">(<span class="type">const</span> <span class="type">char</span> *pathname)</span> {</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">{</span><br><span class="line"> <span class="comment">// Read Only, open flag </span></span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">"where is flag:"</span>);</span><br><span class="line"> FILE *fp;</span><br><span class="line"> <span class="type">char</span> buffer[<span class="number">100</span>];</span><br><span class="line"></span><br><span class="line"> fp = fopen(<span class="string">"/flag"</span>, <span class="string">"rw"</span>);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (fp == <span class="literal">NULL</span>) {</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">"no\n"</span>);</span><br><span class="line"> <span class="keyword">return</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">while</span> (fgets(buffer, <span class="number">100</span>, fp) != <span class="literal">NULL</span>) {</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">"%s"</span>, buffer);</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> fclose(fp); </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>
<h3 id="异星歧途">异星歧途 <img src="https://img.shields.io/badge/-Pwn-grey?style=flat-square" alt></h3>
<ul class="lvl-0">
<li class="lvl-2">
<p>会就玩,不会就枚举!</p>
</li>
<li class="lvl-2">
<p>一个个试出来的,话说这真的是"二进制"题吗?</p>
</li>
</ul>
<h3 id="总结">总结</h3>
<ul class="lvl-0">
<li class="lvl-2">
<p>感谢hackergame幕后的工作人员,也感谢这七天疯狂烧脑互相陪伴的大家,下次还来!</p>
</li>
</ul>
<link rel="stylesheet" href="/css/spoiler.css" type="text/css"><script src="/js/spoiler.js" type="text/javascript" async></script>]]></content>
<categories>
<category>CTF</category>
</categories>
<tags>
<tag>CTF</tag>
</tags>
</entry>
<entry>
<title>About Physics</title>
<url>/2023/10/20/About-Physics/</url>
<content><![CDATA[<h3 id="Introduction-2">Introduction</h3>
<p>介绍有关物理学习的问题</p>
<span id="more"></span>
<h3 id="🔗Links-2">🔗Links</h3>
<p>(updating…)</p>
<link rel="stylesheet" href="/css/spoiler.css" type="text/css"><script src="/js/spoiler.js" type="text/javascript" async></script>]]></content>
<categories>