-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathatom.xml
1281 lines (679 loc) · 775 KB
/
atom.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"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>yys_c</title>
<link href="/yys123456.github.io/atom.xml" rel="self"/>
<link href="https://yys123456.github.io/"/>
<updated>2019-11-27T14:53:16.690Z</updated>
<id>https://yys123456.github.io/</id>
<author>
<name>yu yan song</name>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title>2019 B题</title>
<link href="https://yys123456.github.io/2019/11/27/2019%E8%93%9D%E6%A1%A5%E6%9D%AFB%E9%A2%98/"/>
<id>https://yys123456.github.io/2019/11/27/2019蓝桥杯B题/</id>
<published>2019-11-27T14:48:15.000Z</published>
<updated>2019-11-27T14:53:16.690Z</updated>
<content type="html"><![CDATA[<h3 id="试题-B-年号字串"><a href="#试题-B-年号字串" class="headerlink" title="试题 B: 年号字串"></a>试题 B: 年号字串</h3><p>【问题描述】 小明用字母 A 对应数字 1,B 对应 2,以此类推,用 Z 对应 26。对于 27 以上的数字,小明用两位或更长位的字符串来对应,例如 AA 对应 27,AB 对 应 28,AZ 对应 52,LQ 对应 329。 请问 2019 对应的字符串是什么?<br>【答案提交】<br>这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个大写英文字符串,在提交答案时只填写这个字符串,注意全部大写,填写多 余的内容将无法得分。</p><h3 id="问题分析"><a href="#问题分析" class="headerlink" title="问题分析"></a>问题分析</h3><p>10进制转26进制</p><h3 id="C-代码"><a href="#C-代码" class="headerlink" title="C++代码"></a>C++代码</h3><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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><algorithm></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"><span class="keyword">int</span> n;</span><br><span class="line"><span class="built_in">string</span> s=<span class="string">""</span>;</span><br><span class="line"><span class="built_in">cin</span>>>n;</span><br><span class="line"><span class="keyword">while</span>(n){</span><br><span class="line">s+=n%<span class="number">26</span><span class="number">-1</span>+<span class="string">'A'</span>;</span><br><span class="line">n/=<span class="number">26</span>;</span><br><span class="line">}</span><br><span class="line">reverse(s.begin(),s.end());</span><br><span class="line"><span class="built_in">cout</span><<s<<<span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p><strong>答案是BYQ</strong></p>]]></content>
<summary type="html">
<h3 id="试题-B-年号字串"><a href="#试题-B-年号字串" class="headerlink" title="试题 B: 年号字串"></a>试题 B: 年号字串</h3><p>【问题描述】 小明用字母 A 对应数字 1,B 对应 2,以此类推,用 Z 对应
</summary>
<category term="蓝桥杯" scheme="https://yys123456.github.io/categories/%E8%93%9D%E6%A1%A5%E6%9D%AF/"/>
<category term="2019" scheme="https://yys123456.github.io/tags/2019/"/>
</entry>
<entry>
<title>最长不下降子序列</title>
<link href="https://yys123456.github.io/2019/11/18/%E6%9C%80%E9%95%BF%E4%B8%8D%E9%80%92%E5%87%8F%E5%AD%90%E5%BA%8F%E5%88%97/"/>
<id>https://yys123456.github.io/2019/11/18/最长不递减子序列/</id>
<published>2019-11-18T14:22:13.000Z</published>
<updated>2019-11-19T09:30:02.464Z</updated>
<content type="html"><![CDATA[<h3 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h3><p><img src="https://ftp.bmp.ovh/imgs/2019/11/de3bf1ecce14ae4c.jpg"></p><h3 id="读题"><a href="#读题" class="headerlink" title="读题"></a>读题</h3><p>题目所给数据为一个无序的整数序列,要求找到这个序列中最长的那一个子序列的长度,并输出整个序列。</p><h3 id="分析"><a href="#分析" class="headerlink" title="分析"></a>分析</h3><h4 id="1-分阶段问题"><a href="#1-分阶段问题" class="headerlink" title="1. 分阶段问题"></a>1. 分阶段问题</h4><p>为了求出整体的最长不下降子序列,就需要不断地在前一个阶段的所有最长不下降子序列(状态)中做决策,从而求出当前状态下的最长不下降子序列。</p><h4 id="2-最优子结构性"><a href="#2-最优子结构性" class="headerlink" title="2. 最优子结构性"></a>2. 最优子结构性</h4><p>由于局部的最长不下降子序列将导致整体的最长不下降子序列,所以满足最优子结构性。</p><h4 id="3-无后效性"><a href="#3-无后效性" class="headerlink" title="3. 无后效性"></a>3. 无后效性</h4><p>$i-1$阶段的所有最长不下降子序列(状态),只会对第$i$个阶段的决策造成影响,并<font color="red">以此</font>来影响未来的决策,所以满足无后效性。</p><font size="5" color="purple">综上,符合动态规划的条件,所以本题使用动态规划方法。</font><h3 id="从左向右动态规划"><a href="#从左向右动态规划" class="headerlink" title="从左向右动态规划"></a>从左向右动态规划</h3><h4 id="阶段分析"><a href="#阶段分析" class="headerlink" title="阶段分析"></a>阶段分析</h4><p>前一个阶段的所有状态是目前已经求得的所有最长不下降子序列,后一个阶段则根据前一个阶段的所有状态综合考虑做出决策。</p><h4 id="决策"><a href="#决策" class="headerlink" title="决策"></a>决策</h4><p>每一次的决策一定是对于当前阶段的最优决策,但不一定是整体的最优决策,但是通过对每一个阶段的最有决策再求最优解,便可以得到整体的最有决策。</p><h4 id="状态转移方程"><a href="#状态转移方程" class="headerlink" title="状态转移方程"></a>状态转移方程</h4><p>设整个序列为s,以s[i]为结尾的LIS的长度为len</p><script type="math/tex; mode=display">len_{i}=1+max\{0,len_{a},len_{b},len_c...\}\\a,b,c,d...\in\{t\mid s[t]\le s[i]\wedge 0\le t\lt i\}\\</script><h4 id="输出路径"><a href="#输出路径" class="headerlink" title="输出路径"></a>输出路径</h4><p>路径是在一步一步的决策中形成的,对于每一个阶段,会从它前一个阶段的所有状态中选择满足条件并且以其为结尾的LIS长度最大的那一个状态作为本阶段当前状态的前驱,所以输出路径是从LIS的结尾向前输出,直到一个没有前驱的结点为止,便输出了对于整个序列的LIS。</p><h4 id="C-代码"><a href="#C-代码" class="headerlink" title="C++代码"></a>C++代码</h4><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="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="comment">//LIS </span></span><br><span class="line"><span class="keyword">int</span> l[<span class="number">50</span>];<span class="comment">//原序列</span></span><br><span class="line"><span class="keyword">int</span> len[<span class="number">50</span>];<span class="comment">//保存以i号为结尾的LIS的长度 </span></span><br><span class="line"><span class="keyword">int</span> p[<span class="number">50</span>];<span class="comment">//前驱下标</span></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"><span class="keyword">int</span> n;</span><br><span class="line"><span class="built_in">cin</span>>>n;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<n;i++){</span><br><span class="line"><span class="built_in">cin</span>>>l[i];</span><br><span class="line">}</span><br><span class="line">l[<span class="number">0</span>]=<span class="number">1</span>;<span class="comment">//以第一个结点为结尾的LIS的长度为1</span></span><br><span class="line">p[<span class="number">0</span>]=<span class="number">0</span>; <span class="comment">//第一个结点的前驱就是自己</span></span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<n;i++){</span><br><span class="line"><span class="keyword">int</span> ll=<span class="number">0</span>,k=i;<span class="comment">//ll找出最大LIS长度,k保存前驱</span></span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> j=<span class="number">0</span>;j<i;j++){<span class="comment">//找前一个状态的满足值小于等于当前阶段状态值的最大LIS长度和其结尾的下标</span></span><br><span class="line"><span class="keyword">if</span>(l[i]>=l[j]&&ll<len[j]){</span><br><span class="line">ll=len[j];</span><br><span class="line">k=j;</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line">len[i]=ll+<span class="number">1</span>;</span><br><span class="line">p[i]=k;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">int</span> inx=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">int</span> max=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<n;i++){</span><br><span class="line"><span class="keyword">if</span>(len[i]>max){</span><br><span class="line">max=len[i];</span><br><span class="line">inx=i;</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="built_in">cout</span><<max<<<span class="built_in">endl</span>;</span><br><span class="line"><span class="built_in">cout</span><<l[inx];</span><br><span class="line"> <span class="comment">//倒序输出路径</span></span><br><span class="line"><span class="keyword">while</span>(p[inx]!=inx){<span class="comment">//直到一个没有前驱的点</span></span><br><span class="line">inx=p[inx];</span><br><span class="line"><span class="built_in">cout</span><<<span class="string">' '</span><<l[inx];</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="从右向左动态规划"><a href="#从右向左动态规划" class="headerlink" title="从右向左动态规划"></a>从右向左动态规划</h3><p>其中阶段分析,决策分析和从左向右的相同</p><h4 id="状态转移方程-1"><a href="#状态转移方程-1" class="headerlink" title="状态转移方程"></a>状态转移方程</h4><p>设整个序列为s,以s[i]为开头的LIS的长度为len,s的总长度为n</p><script type="math/tex; mode=display">len_{i}=1+max\{0,len_{a},len_{b},len_c...\}\\a,b,c,d...\in\{t\mid s[t]\ge s[i]\wedge i+1\le t\lt n-1\}</script><h4 id="输出路径-1"><a href="#输出路径-1" class="headerlink" title="输出路径"></a>输出路径</h4><p>对于每一个阶段的决策依据的是它后面已经形成的所有LIS,如果找到了满足值大于当前阶段值并且以它为开头的LIS长度最长的那一个状态,则将当前阶段状态的后继设置为那一个结点,输出路径时是从前向后输出,直到一个没有后继的结点为止。</p><h4 id="C-代码-1"><a href="#C-代码-1" class="headerlink" title="C++代码"></a>C++代码</h4><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="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="comment">//LIS </span></span><br><span class="line"><span class="keyword">int</span> l[<span class="number">50</span>];<span class="comment">//原序列</span></span><br><span class="line"><span class="keyword">int</span> len[<span class="number">50</span>];<span class="comment">//保存以i号为开始的LIS的长度 </span></span><br><span class="line"><span class="keyword">int</span> p[<span class="number">50</span>];<span class="comment">//后继下标</span></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"><span class="keyword">int</span> n;</span><br><span class="line"><span class="built_in">cin</span>>>n;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<n;i++){</span><br><span class="line"><span class="built_in">cin</span>>>l[i];</span><br><span class="line">}</span><br><span class="line"><span class="comment">/*从后向前*/</span></span><br><span class="line">len[n<span class="number">-1</span>]=<span class="number">1</span>;</span><br><span class="line">p[n<span class="number">-1</span>]=n<span class="number">-1</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=n<span class="number">-2</span>;i>=<span class="number">0</span>;i--){</span><br><span class="line"><span class="keyword">int</span> ll=<span class="number">0</span>,k=i;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> j=i+<span class="number">1</span>;j<n;j++){</span><br><span class="line"><span class="keyword">if</span>(l[j]>=l[i]&&ll<=len[j]){</span><br><span class="line">ll=len[j];</span><br><span class="line">k=j;</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line">len[i]=ll+<span class="number">1</span>;</span><br><span class="line">p[i]=k;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">int</span> inx=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">int</span> max=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<n;i++){</span><br><span class="line"><span class="keyword">if</span>(len[i]>max){</span><br><span class="line">max=len[i];</span><br><span class="line">inx=i;</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="built_in">cout</span><<max<<<span class="built_in">endl</span>;</span><br><span class="line"><span class="built_in">cout</span><<l[inx];</span><br><span class="line"><span class="keyword">while</span>(p[inx]!=inx){</span><br><span class="line">inx=p[inx];</span><br><span class="line"><span class="built_in">cout</span><<<span class="string">' '</span><<l[inx];</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">
<h3 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h3><p><img src="https://ftp.bmp.ovh/imgs/2019/11/de3bf1ecce14ae4c.jpg"></p>
</summary>
<category term="动态规划" scheme="https://yys123456.github.io/categories/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/"/>
<category term="LIS" scheme="https://yys123456.github.io/tags/LIS/"/>
</entry>
<entry>
<title></title>
<link href="https://yys123456.github.io/2019/11/18/LIS/"/>
<id>https://yys123456.github.io/2019/11/18/LIS/</id>
<published>2019-11-18T14:20:14.022Z</published>
<updated>2019-11-18T14:20:14.022Z</updated>
<summary type="html">
</summary>
</entry>
<entry>
<title>HDU - 1495</title>
<link href="https://yys123456.github.io/2019/10/08/HDU%20-%201495/"/>
<id>https://yys123456.github.io/2019/10/08/HDU - 1495/</id>
<published>2019-10-08T10:38:28.000Z</published>
<updated>2019-10-08T10:41:57.153Z</updated>
<content type="html"><![CDATA[<p>大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为。因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多。但seeyou的手中只有两个杯子,它们的容量分别是N 毫升和M 毫升 可乐的体积为S (S<101)毫升 (正好装满一瓶) ,它们三个之间可以相互倒可乐 (都是没有刻度的,且 S==N+M,101>S>0,N>0,M>0) 。聪明的ACMER你们说他们能平分吗?如果能请输出倒可乐的最少的次数,如果不能输出”NO”。 </p><p>Input</p><p>三个整数 : S 可乐的体积 , N 和 M是两个杯子的容量,以”0 0 0”结束。</p><p>Output</p><p>如果能平分的话请输出最少要倒的次数,否则输出”NO”。</p><p>Sample Input</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">7 4 3</span><br><span class="line">4 1 3</span><br><span class="line">0 0 0</span><br></pre></td></tr></table></figure><p>Sample Output</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">NO</span><br><span class="line">3</span><br></pre></td></tr></table></figure><h3 id="读题"><a href="#读题" class="headerlink" title="读题"></a>读题</h3>]]></content>
<summary type="html">
<p>大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为。因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多。但seeyou的手中只有两个杯子,它们的容量分别是N 毫升和M 毫升 可乐的体积为
</summary>
<category term="HDU" scheme="https://yys123456.github.io/categories/HDU/"/>
<category term="HDU - 1495" scheme="https://yys123456.github.io/tags/HDU-1495/"/>
</entry>
<entry>
<title>中点画线法</title>
<link href="https://yys123456.github.io/2019/09/23/%E4%B8%AD%E7%82%B9%E7%94%BB%E7%BA%BF%E6%B3%95/"/>
<id>https://yys123456.github.io/2019/09/23/中点画线法/</id>
<published>2019-09-23T13:24:45.000Z</published>
<updated>2019-09-24T14:19:59.320Z</updated>
<content type="html"><![CDATA[<h3 id="算法描述"><a href="#算法描述" class="headerlink" title="算法描述"></a>算法描述</h3><p>中点画线法是一种绘制指定起点和终点的直线的算法。由于计算机对于一个图形的显示是使用像素点来构成此图形并显示在屏幕上的,所以对于一个图形的显示并不是连续的(因为并不存在小数个像素),而是通过像素来进行近似的,所以<strong>中点画线法就是<font color="red">一种</font>去近似像素点来逼近真实直线的一种方法</strong>。</p><h3 id="算法过程"><a href="#算法过程" class="headerlink" title="算法过程"></a>算法过程</h3><p>以<b>0<=k<=1</b>为例,给定起点(x0,y0)和终点(x1,y1)(可以保证这两个点都在直线上,并且都是整点,保证x0<x1)。</p><p>由于<b>0<=k<=1</b>,对于一条直线$y=kx+b$,<b>在x方向上增加一个单位,y方向上的增量不会超过1</b>,而对于计算机来说,x方向上增加一个像素,y方向上的增量不会超过1个像素,对于一个已经确定的直线上的像素(x,y),想要确定下一个<b>在直线上(逼近直线)</b>的像素,<b>只需要在(x+1,y)和(x+1,y+1)里确定一个即可(这一步使用中点画线法进行选择)</b>。<b>若k>1,那么x每增大1,y方向上可能会增大多个像素</b>,<font color="red">若还以x为自变量</font>就无法确定下一个点的备选集合(用DDA算法的确可以点出这个像素,但是画出来的线像素非常分散)。</p><h4 id="未加优化的中点画线法画线过程"><a href="#未加优化的中点画线法画线过程" class="headerlink" title="未加优化的中点画线法画线过程"></a>未加优化的中点画线法画线过程</h4><p>0<=k<=1,假设此时已经选下一个点(x,y)</p><ol><li>x<=x1?转到2:结束;</li><li>需要在(x+1,y)和(x+1,y+1)里确定一个点作为逼近直线的近似点;</li><li>取两点的中点(x+1,y+0.5),并计算判别式$ax+by+c\ (a=y1-y0,b=x0-x1)$的值d;</li><li>d>=0?转到4:转到5;</li><li>选择(x+1,y)作为近似点,x=x+1;</li><li>选择(x+1,y+1)作为近似点x=x+1,y=y+1;</li><li>转到1。</li></ol><h4 id="较优化的中点画线法选点过程"><a href="#较优化的中点画线法选点过程" class="headerlink" title="较优化的中点画线法选点过程"></a>较优化的中点画线法选点过程</h4><p>观察未优化算法中的第3步,每次判断选择哪一个点的时候都要进行一次计算判别式的浮点运算,对于硬件较慢,所以考虑如何获得每次判别式的值,观察得到,判别式$d=a(x+1)+b(y+0.5)+c$可以简化为$d=\delta{x}+\delta{y}+c$,而$\delta x和\delta y$是x和y的线性函数,所以d可以进行增量计算。由于第一个点x0,y0一定在直线上,所以d的初始值为a+0.5b(注意只有在<strong>0<=k<=1</strong>时才是这个)</p><p>d的增量计算</p><p>假设已经确定了(x,y),此时d=a(x+1)+b(y+0.5)+c,那么可以根据d的正负去判断去取(x+1,y)和(x+1,y+1)两者之一</p><p>d>=0:表示(x+1,y+0.5)在直线的上方,所以取点(x+1,y)作为近似,那么下一个d=a(x+2)+b(y+0.5)+c,那么$\delta d=a$;</p><p>d<0:表示(x+1,y+0.5)在直线的下方,所以取点(x+1,y+1)作为近似,那么下一个d=a(x+2)+b(y+1+0.5)+c,那么$\delta d=a+b$;</p><p>可以得到算法过程</p><p>1>=斜率>=0,起始点为(x,y),d=a+0.5b</p><ol><li>x<=x1?转到2:结束;</li><li>drawpixel(x,y);</li><li>x++;</li><li>d>=0?(d=d+a,转到1):(y++,转到1);</li></ol><h4 id="最优化的中线画线法"><a href="#最优化的中线画线法" class="headerlink" title="最优化的中线画线法"></a>最优化的中线画线法</h4><p>发现较优化的画线方法中d依然是浮点数类型,又由于只使用d的符号,所以可以将d进行乘二处理,此时d可以用整型表示。</p><h3 id="算法实现"><a href="#算法实现" class="headerlink" title="算法实现"></a>算法实现</h3><h4 id="增量更新d的C-代码"><a href="#增量更新d的C-代码" class="headerlink" title="增量更新d的C++代码"></a>增量更新d的C++代码</h4><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></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">centerPoint</span><span class="params">(<span class="keyword">int</span> x, <span class="keyword">int</span> y, <span class="keyword">int</span> p, <span class="keyword">int</span> q)</span> </span>{</span><br><span class="line"><span class="comment">//x0,y0起点,x1,y1终点,这两点均在直线上并为整数</span></span><br><span class="line"><span class="comment">//适用于所有斜率</span></span><br><span class="line"><span class="keyword">int</span> x0, y0, x1, y1;</span><br><span class="line"><span class="keyword">if</span> (x >= p) {</span><br><span class="line">x0 = p;</span><br><span class="line">y0 = q;</span><br><span class="line">x1 = x;</span><br><span class="line">y1 = y;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">else</span> {</span><br><span class="line">x0 = x;</span><br><span class="line">y0 = y;</span><br><span class="line">x1 = p;</span><br><span class="line">y1 = q;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">int</span> a, b;</span><br><span class="line">a = y0 - y1;</span><br><span class="line">b = x1 - x0;</span><br><span class="line"><span class="keyword">if</span> (x1 - x0 < y1 - y0) {<span class="comment">//k>1</span></span><br><span class="line"><span class="comment">//此时将x,y角色反转</span></span><br><span class="line"><span class="keyword">float</span> d = b + <span class="number">0.5</span>*a;</span><br><span class="line"><span class="keyword">for</span> (; y0 <= y1; y0++) {</span><br><span class="line">glVertex2i(x0, y0);</span><br><span class="line"><span class="keyword">if</span> (d >= <span class="number">0</span>) {</span><br><span class="line">x0++;</span><br><span class="line">d += a + b;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">else</span> {</span><br><span class="line">d += b;</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"><span class="keyword">else</span> <span class="keyword">if</span> (x1 - x0 >= y1 - y0) {</span><br><span class="line"><span class="keyword">if</span> (y1 - y0 >= <span class="number">0</span>) {<span class="comment">//0<=k<=1</span></span><br><span class="line"><span class="keyword">float</span> d = a + <span class="number">0.5</span>*b;<span class="comment">//注意点的大小关系</span></span><br><span class="line"><span class="keyword">for</span> (; x0 <= x1;x0++) {</span><br><span class="line">glVertex2i(x0, y0);</span><br><span class="line"><span class="keyword">if</span> (d < <span class="number">0</span>) {</span><br><span class="line">d += a + b;</span><br><span class="line">y0++;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">else</span> {</span><br><span class="line">d += a;</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="keyword">else</span> <span class="keyword">if</span> (<span class="built_in">abs</span>(y1 - y0) <= x1 - x0) {<span class="comment">//-1<=k<0</span></span><br><span class="line"><span class="keyword">float</span> d = a - <span class="number">0.5</span>*b;</span><br><span class="line"><span class="keyword">for</span> (; x0 <= x1; x0++) {</span><br><span class="line">glVertex2i(x0, y0);</span><br><span class="line"><span class="keyword">if</span> (d >= <span class="number">0</span>) {</span><br><span class="line">y0--;</span><br><span class="line">d += a - b;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">else</span> {</span><br><span class="line">d += a;</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="keyword">else</span> {<span class="comment">//k<-1</span></span><br><span class="line"><span class="comment">//对调x,y以y为自变量</span></span><br><span class="line"><span class="keyword">float</span> d = <span class="number">0.5</span>*a - b;</span><br><span class="line"><span class="keyword">for</span> (; y0 >= y1; y0--) {</span><br><span class="line">glVertex2i(x0, y0);</span><br><span class="line"><span class="keyword">if</span> (d >= <span class="number">0</span>) {</span><br><span class="line">d += -b;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">else</span> {</span><br><span class="line">x0++;</span><br><span class="line">d += a - b;</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></pre></td></tr></table></figure><h4 id="OpenGL工程"><a href="#OpenGL工程" class="headerlink" title="OpenGL工程"></a>OpenGL工程</h4><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><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><gl/GLUT.H></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="keyword">int</span> xb, yb, xa, ya;</span><br><span class="line"><span class="comment">//中点画线法</span></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">centerPoint</span><span class="params">(<span class="keyword">int</span> x, <span class="keyword">int</span> y, <span class="keyword">int</span> p, <span class="keyword">int</span> q)</span> </span>{</span><br><span class="line"><span class="comment">//x0,y0起点,x1,y1终点,这两点均在直线上并为整数</span></span><br><span class="line"><span class="comment">//适用于所有斜率</span></span><br><span class="line"><span class="keyword">int</span> x0, y0, x1, y1;</span><br><span class="line"><span class="keyword">if</span> (x >= p) {</span><br><span class="line">x0 = p;</span><br><span class="line">y0 = q;</span><br><span class="line">x1 = x;</span><br><span class="line">y1 = y;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">else</span> {</span><br><span class="line">x0 = x;</span><br><span class="line">y0 = y;</span><br><span class="line">x1 = p;</span><br><span class="line">y1 = q;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">int</span> a, b;</span><br><span class="line">a = y0 - y1;</span><br><span class="line">b = x1 - x0;</span><br><span class="line"><span class="keyword">if</span> (x1 - x0 < y1 - y0) {<span class="comment">//k>1</span></span><br><span class="line"><span class="comment">//此时将x,y角色反转</span></span><br><span class="line"><span class="keyword">float</span> d = b + <span class="number">0.5</span>*a;</span><br><span class="line"><span class="keyword">for</span> (; y0 <= y1; y0++) {</span><br><span class="line">glVertex2i(x0, y0);</span><br><span class="line"><span class="keyword">if</span> (d >= <span class="number">0</span>) {</span><br><span class="line">x0++;</span><br><span class="line">d += a + b;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">else</span> {</span><br><span class="line">d += b;</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"><span class="keyword">else</span> <span class="keyword">if</span> (x1 - x0 >= y1 - y0) {</span><br><span class="line"><span class="keyword">if</span> (y1 - y0 >= <span class="number">0</span>) {<span class="comment">//0<=k<=1</span></span><br><span class="line"><span class="keyword">float</span> d = a + <span class="number">0.5</span>*b;<span class="comment">//注意点的大小关系</span></span><br><span class="line"><span class="keyword">for</span> (; x0 <= x1;x0++) {</span><br><span class="line">glVertex2i(x0, y0);</span><br><span class="line"><span class="keyword">if</span> (d < <span class="number">0</span>) {</span><br><span class="line">d += a + b;</span><br><span class="line">y0++;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">else</span> {</span><br><span class="line">d += a;</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="keyword">else</span> <span class="keyword">if</span> (<span class="built_in">abs</span>(y1 - y0) <= x1 - x0) {<span class="comment">//-1<=k<0</span></span><br><span class="line"><span class="keyword">float</span> d = a - <span class="number">0.5</span>*b;</span><br><span class="line"><span class="keyword">for</span> (; x0 <= x1; x0++) {</span><br><span class="line">glVertex2i(x0, y0);</span><br><span class="line"><span class="keyword">if</span> (d >= <span class="number">0</span>) {</span><br><span class="line">y0--;</span><br><span class="line">d += a - b;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">else</span> {</span><br><span class="line">d += a;</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="keyword">else</span> {<span class="comment">//k<-1</span></span><br><span class="line"><span class="comment">//对调x,y以y为自变量</span></span><br><span class="line"><span class="keyword">float</span> d = <span class="number">0.5</span>*a - b;</span><br><span class="line"><span class="keyword">for</span> (; y0 >= y1; y0--) {</span><br><span class="line">glVertex2i(x0, y0);</span><br><span class="line"><span class="keyword">if</span> (d >= <span class="number">0</span>) {</span><br><span class="line">d += -b;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">else</span> {</span><br><span class="line">x0++;</span><br><span class="line">d += a - b;</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="keyword">void</span> <span class="title">showline</span><span class="params">()</span> </span>{</span><br><span class="line">glClear(GL_COLOR_BUFFER_BIT);</span><br><span class="line">glColor3f(<span class="number">1.0</span>, <span class="number">1.0</span>, <span class="number">1.0</span>);</span><br><span class="line">glBegin(GL_POINTS);</span><br><span class="line">centerPoint(xb, yb, xa, ya);<span class="comment">//中点画线法</span></span><br><span class="line">glEnd();</span><br><span class="line">glFlush();</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">(<span class="keyword">int</span> argc, <span class="keyword">char</span> * argv[])</span><span class="comment">//这是使用glut库函数进行窗口管理</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="comment">glutMainLoop();</span></span><br><span class="line"><span class="comment">让所有的与“事件”有关的函数调用无限循环。</span></span><br><span class="line"><span class="comment">例如: </span></span><br><span class="line"><span class="comment">glutReshapeFunc(zprReshape);</span></span><br><span class="line"><span class="comment">glutDisplayFunc(display);</span></span><br><span class="line"><span class="comment">glutKeyboardFunc(press_s);</span></span><br><span class="line"><span class="comment">则让 zprReshape(),display(),press_s() 无限循环 </span></span><br><span class="line"><span class="comment">事件 -- 按了不同的键,做了不同的鼠标操作等 互动。</span></span><br><span class="line"><span class="comment">程序响应,做新的操作,例如物体转动,放大,</span></span><br><span class="line"><span class="comment">重画,输入了新的参数,数据。。。 </span></span><br><span class="line"><span class="comment">*/</span></span><br><span class="line">glutInit(&argc, argv);</span><br><span class="line">glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);</span><br><span class="line"><span class="built_in">cin</span> >> xb >> yb >> xa >> ya;</span><br><span class="line"><span class="comment">//指定窗口参数</span></span><br><span class="line">glutInitWindowPosition(<span class="number">50</span>, <span class="number">100</span>);</span><br><span class="line">glutInitWindowSize(<span class="number">500</span>, <span class="number">500</span>);</span><br><span class="line"><span class="comment">//建立绘制的窗口</span></span><br><span class="line">glutCreateWindow(<span class="string">"中点画线算法"</span>);</span><br><span class="line"><span class="comment">//设置背景色</span></span><br><span class="line">glClearColor(<span class="number">0.0</span>, <span class="number">0.0</span>, <span class="number">0.0</span>, <span class="number">0.0</span>);</span><br><span class="line"><span class="comment">//指定二维坐标系</span></span><br><span class="line">glMatrixMode(GL_PROJECTION);</span><br><span class="line">glLoadIdentity();<span class="comment">//设置当前矩阵为单位矩阵</span></span><br><span class="line">gluOrtho2D(<span class="number">-500.0</span>, <span class="number">500.0</span>, <span class="number">-500.0</span>, <span class="number">500.0</span>);</span><br><span class="line">glutDisplayFunc(showline);</span><br><span class="line">glutMainLoop();</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="测试"><a href="#测试" class="headerlink" title="测试"></a>测试</h3><p><img src="https://ftp.bmp.ovh/imgs/2019/09/fccebf1dbc61c2f7.png" width="400px"></p>]]></content>
<summary type="html">
<h3 id="算法描述"><a href="#算法描述" class="headerlink" title="算法描述"></a>算法描述</h3><p>中点画线法是一种绘制指定起点和终点的直线的算法。由于计算机对于一个图形的显示是使用像素点来构成此图形并显示在屏幕上的,所以对
</summary>
<category term="CG" scheme="https://yys123456.github.io/categories/CG/"/>
<category term="直线扫描算法" scheme="https://yys123456.github.io/tags/%E7%9B%B4%E7%BA%BF%E6%89%AB%E6%8F%8F%E7%AE%97%E6%B3%95/"/>
</entry>
<entry>
<title>1010 Radix</title>
<link href="https://yys123456.github.io/2019/09/21/1010%20Radix/"/>
<id>https://yys123456.github.io/2019/09/21/1010 Radix/</id>
<published>2019-09-21T07:54:13.000Z</published>
<updated>2019-09-21T09:21:31.084Z</updated>
<content type="html"><![CDATA[<h3 id="1010-Radix-25-分"><a href="#1010-Radix-25-分" class="headerlink" title="1010 Radix (25 分)"></a>1010 Radix (25 分)</h3><p>Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The answer is <code>yes</code>, if 6 is a decimal number and 110 is a binary number.</p><p>Now for any pair of positive integers <em>N</em>1 and <em>N</em>2, your task is to find the radix of one number while that of the other is given.</p><h3 id="Input-Specification"><a href="#Input-Specification" class="headerlink" title="Input Specification:"></a>Input Specification:</h3><p>Each input file contains one test case. Each case occupies a line which contains 4 positive integers:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">N1 N2 tag radix</span><br></pre></td></tr></table></figure><p>Here <code>N1</code> and <code>N2</code> each has no more than 10 digits. A digit is less than its radix and is chosen from the set { 0-9, <code>a</code>-<code>z</code> } where 0-9 represent the decimal numbers 0-9, and <code>a</code>-<code>z</code> represent the decimal numbers 10-35. The last number <code>radix</code> is the radix of <code>N1</code> if <code>tag</code> is 1, or of <code>N2</code> if <code>tag</code> is 2.</p><h3 id="Output-Specification"><a href="#Output-Specification" class="headerlink" title="Output Specification:"></a>Output Specification:</h3><p>For each test case, print in one line the radix of the other number so that the equation <code>N1</code> = <code>N2</code> is true. If the equation is impossible, print <code>Impossible</code>. If the solution is not unique, output the smallest possible radix.</p><h3 id="Sample-Input-1"><a href="#Sample-Input-1" class="headerlink" title="Sample Input 1:"></a>Sample Input 1:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">6 110 1 10</span><br></pre></td></tr></table></figure><h3 id="Sample-Output-1"><a href="#Sample-Output-1" class="headerlink" title="Sample Output 1:"></a>Sample Output 1:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">2</span><br></pre></td></tr></table></figure><h3 id="Sample-Input-2"><a href="#Sample-Input-2" class="headerlink" title="Sample Input 2:"></a>Sample Input 2:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">1 ab 1 2</span><br></pre></td></tr></table></figure><h3 id="Sample-Output-2"><a href="#Sample-Output-2" class="headerlink" title="Sample Output 2:"></a>Sample Output 2:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Impossible</span><br></pre></td></tr></table></figure><h3 id="读题"><a href="#读题" class="headerlink" title="读题"></a>读题</h3><p>先输入两个<b>数码串</b>,然后给出两个整数a和b,a和b表示指定了第a个数码的进制是b,要求给出一个进制c,使得<strong>将另一个数码按照c进制来解释得到的真值t</strong>和<strong>a按照b进制解释所得到的真值r</strong>相等。</p><h3 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h3><p>将一串数码按照给出的进制c进行解释有以下特点</p><ol><li>只有<strong>c满足大于这串数码中的最大数字</strong>,才可以用c进制来对这串数字进行解释,从而得到真值;</li><li>若这串数字的<strong>长度只有1</strong>(或者只有最低为非零值或0,其他全是0,真值的大小并不受进制的影响),那么只要是用<strong>合法的进制</strong>进行解释,那么无论用哪一种进制进行解释,都会得到<strong>相同大小</strong>的真值;</li><li>若这串数字的长度大于1,在长度大于1的情况中最短并且最小的数码情况是10,除去长度为1的数码,无论用何种进制解释出来的真值都是当前进制中的最小真值。</li></ol><p><strong>方法1(穷举)</strong></p><p>先将给出进制的数码按照所给进制进行解释得到真值$A$,然后对于给出的另一个数码串b进行穷举进制,可以确定穷举的下限是max(b中的包含数码)+1,进而从穷举下限不断向上列举进制来解释串b得到真值$B$,再比较$A$和$B$的大小,如果$A\leq B$则代表可能找到了相应的进制,则退出穷举,再判断A==B?找到对应进制:<strong>不存在对应进制</strong>。</p><p>之所以通过A<B判断不存在相应的b的进制是因为:所列举的进制使得A<B,当进制大小继续向上列举时,只可能出现两种情况{B不变,B更大}。</p><p><strong><font color="red">方法2(二分)</font></strong></p><p>使用二分的方法来列举进制,需要知道<strong>进制的列举范围(列举范围指的是如果存在一个进制使得B=A,那么进制的值一定包含于这个范围)</strong>。</p><p>对于串b的进制的列举可以确认下限是C=max(b包含的数码)+1。</p><p>确定上限</p><p><strong>对于数码长度>=2的情况</strong>,所得真值最小的数码情况为<code>10</code>,所以可以得到使得B=A所需要的<strong>最大进制列举值为A</strong>,若C一开始就大于A,那么不存在使得串b真值=A的进制值。</p><p><strong>对于一位数码来说</strong>,<font color="red" style="font-weight:bold">对应的真值并不受进制解释的影响,所以对于一位的数码,数码值即为对应所有列举进制下的真值B,只需要检查B是否等于A即可,若B=A那么可以直接得到最小进制就是列举的下限进制,否则不存在这样的进制使得B==A。</font></p><h3 id="算法实现"><a href="#算法实现" class="headerlink" title="算法实现"></a>算法实现</h3><h4 id="C-代码"><a href="#C-代码" class="headerlink" title="C++代码"></a>C++代码</h4><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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><algorithm></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> ll long long</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function">ll <span class="title">getCard</span><span class="params">(<span class="keyword">char</span> c)</span></span>{</span><br><span class="line"><span class="keyword">return</span> (c>=<span class="string">'0'</span>&&c<=<span class="string">'9'</span>?c-<span class="string">'0'</span>:c-<span class="string">'a'</span>+<span class="number">10</span>);</span><br><span class="line">}</span><br><span class="line"><span class="function">ll <span class="title">power</span><span class="params">(ll a,ll b)</span></span>{<span class="comment">//快速幂</span></span><br><span class="line">ll e=<span class="number">1</span>;</span><br><span class="line">ll base=a;</span><br><span class="line"><span class="keyword">while</span>(b){</span><br><span class="line"><span class="keyword">if</span>(b%<span class="number">2</span>==<span class="number">1</span>){</span><br><span class="line">e*=base;</span><br><span class="line">}</span><br><span class="line">base*=base;</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> e;</span><br><span class="line">}</span><br><span class="line"><span class="function">ll <span class="title">getnum</span><span class="params">(<span class="built_in">string</span>& s,ll radix)</span></span>{</span><br><span class="line">ll sum=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<s.length();i++){</span><br><span class="line">sum+=power(radix,s.length()<span class="number">-1</span>-i)*getCard(s[i]);</span><br><span class="line">}</span><br><span class="line"><span class="keyword">return</span> sum;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"><span class="built_in">string</span> n1,n2;</span><br><span class="line"><span class="keyword">int</span> flag;</span><br><span class="line"><span class="keyword">int</span> radix;</span><br><span class="line"><span class="built_in">cin</span>>>n1>>n2>>flag>>radix;</span><br><span class="line"><span class="keyword">if</span>(flag==<span class="number">2</span>){<span class="comment">//始终让n1为给定数制的那一个 </span></span><br><span class="line">swap(n1,n2);</span><br><span class="line">} </span><br><span class="line">ll _n1=getnum(n1,radix);</span><br><span class="line"><span class="comment">// char*t=(char*)n2.c_str();//无法通过19号测试点</span></span><br><span class="line"><span class="comment">// ll i=getCard(*max(t,t+n2.length()-1))+1;</span></span><br><span class="line"> <span class="keyword">char</span> max=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<n2.length();i++){</span><br><span class="line"> <span class="keyword">if</span>(max<n2[i])max=n2[i];</span><br><span class="line"> }</span><br><span class="line"> ll i=getCard(max)+<span class="number">1</span>;<span class="comment">//进制列举下限</span></span><br><span class="line">ll j=_n1;</span><br><span class="line"><span class="keyword">if</span>(n2.length()==<span class="number">1</span>){</span><br><span class="line"><span class="keyword">if</span>(getnum(n2,i)!=_n1){</span><br><span class="line">}<span class="keyword">else</span>{</span><br><span class="line"><span class="built_in">cout</span><<i<<<span class="built_in">endl</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 class="keyword">else</span>{<span class="comment">//二分法列举进制值</span></span><br><span class="line"> <span class="keyword">while</span>(i<=j){</span><br><span class="line">ll mid=(i+j)/<span class="number">2</span>;</span><br><span class="line">ll temp=getnum(n2,mid);</span><br><span class="line"><span class="keyword">if</span>(temp==_n1){</span><br><span class="line"><span class="built_in">cout</span><<mid<<<span class="built_in">endl</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>(temp<_n1&&temp><span class="number">0</span>){</span><br><span class="line">i=mid+<span class="number">1</span>;</span><br><span class="line">}<span class="keyword">else</span>{</span><br><span class="line">j=mid<span class="number">-1</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">cout</span><<<span class="string">"Impossible"</span><<<span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<h3 id="1010-Radix-25-分"><a href="#1010-Radix-25-分" class="headerlink" title="1010 Radix (25 分)"></a>1010 Radix (25 分)</h3><p>Given a pair o
</summary>
<category term="pat" scheme="https://yys123456.github.io/categories/pat/"/>
<category term="1010 Radix" scheme="https://yys123456.github.io/tags/1010-Radix/"/>
</entry>
<entry>
<title>连接远程数据库问题解决</title>
<link href="https://yys123456.github.io/2019/09/17/%E8%BF%9E%E6%8E%A5%E8%BF%9C%E7%A8%8B%E6%95%B0%E6%8D%AE%E5%BA%93%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3/"/>
<id>https://yys123456.github.io/2019/09/17/连接远程数据库问题解决/</id>
<published>2019-09-17T13:17:03.000Z</published>
<updated>2019-09-18T03:15:28.472Z</updated>
<content type="html"><![CDATA[<h3 id="卸载并在服务器上安装mysql"><a href="#卸载并在服务器上安装mysql" class="headerlink" title="卸载并在服务器上安装mysql"></a>卸载并在服务器上安装mysql</h3><h4 id="删除mysql以及残留项"><a href="#删除mysql以及残留项" class="headerlink" title="删除mysql以及残留项"></a>删除mysql以及残留项</h4><p>sudo apt-get remove mysql-*</p><p>dpkg -l |grep ^rc|awk ‘{print $2}’ |sudo xargs dpkg -P</p><h4 id="安装mysql并检查运行状态"><a href="#安装mysql并检查运行状态" class="headerlink" title="安装mysql并检查运行状态"></a>安装mysql并检查运行状态</h4><p>sudo apt-get install mysql-client mysql-server </p><p>sudo service mysql status</p><h4 id="开启、关闭、重启mysql服务命令"><a href="#开启、关闭、重启mysql服务命令" class="headerlink" title="开启、关闭、重启mysql服务命令"></a>开启、关闭、重启mysql服务命令</h4><p>sudo service mysql start</p><p>sudo service mysql restart</p><p>sudo service mysql stop</p><p><strong>注意:</strong>若在卸载期间或下载期间出现</p><p>Ignoring file xxxxx in directory ‘/etc/apt/sources.list.d/‘</p><p>处理方式是</p><p>sudo rm /etc/apt/sources.list.d/xxxxx</p><h3 id="配置mysql的root用户的密码(使用mysql-u-root-p来登陆)"><a href="#配置mysql的root用户的密码(使用mysql-u-root-p来登陆)" class="headerlink" title="配置mysql的root用户的密码(使用mysql -u root -p来登陆)"></a>配置mysql的root用户的密码(使用mysql -u root -p来登陆)</h3><p>mysql -u root -p 或 mysql </p><p>use mysql; </p><p>update user set authentication_string=PASSWORD(“密码”) where user=’root’; </p><p>update user set plugin=”mysql_native_password”; </p><p>flush privileges; </p><p>quit; </p><p>/etc/init.d/mysql restart;</p><p>mysql -u root -p 密码;</p><h3 id="开启3306端口允许其他主机访问"><a href="#开启3306端口允许其他主机访问" class="headerlink" title="开启3306端口允许其他主机访问"></a>开启3306端口允许其他主机访问</h3><p>先查看是否允许接入</p><p>netstat -an|grep 3306</p><p>找到<code>/etc/mysql/my.cnf</code>文件,查看内容</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">!includedir /etc/mysql/conf.d/</span><br><span class="line">!includedir /etc/mysql/mysql.conf.d/</span><br></pre></td></tr></table></figure><p>到<code>/etc/mysql/mysql.conf.d/</code>下编辑,把</p><p><code>bind-address = 127.0.0.1</code>注释掉</p><p>进行授权</p><p>输入sudo mysql -u root -p</p><p>输入密码之后,进入mysql</p><p>授权给所有连接</p><p>grant all privileges on <em>.</em> to ‘root’@’%’ identified by ‘root’;</p><p>权限生效</p><p>flush privileges;</p><p>重启mysql</p><p>/etc/init.d/mysql restart</p><p>或</p><p>sudo service mysql restart</p><p>已经可以远程连接。</p>]]></content>
<summary type="html">
<h3 id="卸载并在服务器上安装mysql"><a href="#卸载并在服务器上安装mysql" class="headerlink" title="卸载并在服务器上安装mysql"></a>卸载并在服务器上安装mysql</h3><h4 id="删除mysql以及残留项"
</summary>
<category term="问题解决" scheme="https://yys123456.github.io/categories/%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3/"/>
<category term="连接远程数据库问题解决" scheme="https://yys123456.github.io/tags/%E8%BF%9E%E6%8E%A5%E8%BF%9C%E7%A8%8B%E6%95%B0%E6%8D%AE%E5%BA%93%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3/"/>
</entry>
<entry>
<title>1080 MOOC期终成绩</title>
<link href="https://yys123456.github.io/2019/09/10/1080%20MOOC%E6%9C%9F%E7%BB%88%E6%88%90%E7%BB%A9/"/>
<id>https://yys123456.github.io/2019/09/10/1080 MOOC期终成绩/</id>
<published>2019-09-10T13:37:00.000Z</published>
<updated>2019-09-10T13:59:34.179Z</updated>
<content type="html"><![CDATA[<h3 id="1080-MOOC期终成绩-25-分"><a href="#1080-MOOC期终成绩-25-分" class="headerlink" title="1080 MOOC期终成绩 (25 分)"></a>1080 MOOC期终成绩 (25 分)</h3><p>对于在中国大学MOOC(<a href="http://www.icourse163.org/" target="_blank" rel="noopener">http://www.icourse163.org/</a> )学习“数据结构”课程的学生,想要获得一张合格证书,必须首先获得不少于200分的在线编程作业分,然后总评获得不少于60分(满分100)。总评成绩的计算公式为</p><p>$G=(G_{mid−term}\times{40\%}+G_{final}\times{60\%})$ ,如果 $G_{mid−term}>G_{final}$,否则总评 $G$ 就是 $G_{final}$。</p><p>现在的问题是,每次考试都产生一张独立的成绩单。本题就请你编写程序,把不同的成绩单合为一张。</p><h3 id="输入格式:"><a href="#输入格式:" class="headerlink" title="输入格式:"></a>输入格式:</h3><p>输入在第一行给出3个整数,分别是 P(做了在线编程作业的学生数)、M(参加了期中考试的学生数)、N(参加了期末考试的学生数)。每个数都不超过10000。</p><p>接下来有三块输入。第一块包含 P 个在线编程成绩 $G_p$;第二块包含 M 个期中考试成绩 $G_{mid−term}$,第三块包含 N 个期末考试成绩 $G_{final}$。每个成绩占一行,格式为:<code>学生学号 分数</code>。其中<code>学生学号</code>为不超过20个字符的英文字母和数字;<code>分数</code>是非负整数(编程总分最高为900分,期中和期末的最高分为100分)。</p><h3 id="输出格式:"><a href="#输出格式:" class="headerlink" title="输出格式:"></a>输出格式:</h3><p>打印出获得合格证书的学生名单。每个学生占一行,格式为:</p><p><code>学生学号</code> $G_p\ G_{mid−term} \ G_{final}$</p><p>如果有的成绩不存在(例如某人没参加期中考试),则在相应的位置输出“−1”。输出顺序为按照总评分数(四舍五入精确到整数)递减。若有并列,则按学号递增。题目保证学号没有重复,且至少存在1个合格的学生。</p><h3 id="输入样例:"><a href="#输入样例:" class="headerlink" title="输入样例:"></a>输入样例:</h3><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">6 6 7</span><br><span class="line">01234 880</span><br><span class="line">a1903 199</span><br><span class="line">ydjh2 200</span><br><span class="line">wehu8 300</span><br><span class="line">dx86w 220</span><br><span class="line">missing 400</span><br><span class="line">ydhfu77 99</span><br><span class="line">wehu8 55</span><br><span class="line">ydjh2 98</span><br><span class="line">dx86w 88</span><br><span class="line">a1903 86</span><br><span class="line">01234 39</span><br><span class="line">ydhfu77 88</span><br><span class="line">a1903 66</span><br><span class="line">01234 58</span><br><span class="line">wehu8 84</span><br><span class="line">ydjh2 82</span><br><span class="line">missing 99</span><br><span class="line">dx86w 81</span><br></pre></td></tr></table></figure><h3 id="输出样例:"><a href="#输出样例:" class="headerlink" title="输出样例:"></a>输出样例:</h3><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">missing 400 -1 99 99</span><br><span class="line">ydjh2 200 98 82 88</span><br><span class="line">dx86w 220 88 81 84</span><br><span class="line">wehu8 300 55 84 84</span><br></pre></td></tr></table></figure><h3 id="C-实现"><a href="#C-实现" class="headerlink" title="C++实现"></a>C++实现</h3><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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream> </span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><vector></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cmath></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><algorithm></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><string></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><unordered_map></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">stu</span> {</span></span><br><span class="line"> <span class="keyword">public</span>: <span class="built_in">string</span> id;</span><br><span class="line"> <span class="keyword">int</span> gp,gm,gf;</span><br><span class="line"> <span class="keyword">double</span> g;</span><br><span class="line"> stu() {</span><br><span class="line"> gp = gm = gf = g = <span class="number">-1</span>;</span><br><span class="line"> }</span><br><span class="line">};</span><br><span class="line"><span class="function"><span class="keyword">bool</span> <span class="title">cmp</span><span class="params">(<span class="keyword">const</span> stu & s1, <span class="keyword">const</span> stu & s2)</span> </span>{</span><br><span class="line"> <span class="keyword">if</span> (s1.g > s2.g) {</span><br><span class="line"> <span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line"> } <span class="keyword">else</span> {</span><br><span class="line"> <span class="keyword">if</span> (s1.g == s2.g) {</span><br><span class="line"> <span class="keyword">return</span> s1.id < s2.id;</span><br><span class="line"> } <span class="keyword">else</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><br><span class="line"><span class="function"><span class="keyword">double</span> <span class="title">getG</span><span class="params">(<span class="keyword">int</span> f, <span class="keyword">int</span> m)</span> </span>{</span><br><span class="line"> <span class="keyword">return</span> round(m >= f ? m * <span class="number">0.4</span> + f * <span class="number">0.6</span> : f * <span class="number">1.0</span>);</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>{</span><br><span class="line"> <span class="built_in">unordered_map</span> < <span class="built_in">string</span>,</span><br><span class="line"> <span class="keyword">int</span> > name2index;</span><br><span class="line"> <span class="built_in">vector</span> < stu > v;</span><br><span class="line"> <span class="keyword">int</span> p,m,n;</span><br><span class="line"> <span class="built_in">string</span> id;</span><br><span class="line"> <span class="keyword">int</span> grade;</span><br><span class="line"> <span class="built_in">cin</span> >> p >> m >> n;</span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i < p; i++) {</span><br><span class="line"> <span class="built_in">cin</span> >> id >> grade;</span><br><span class="line"> <span class="keyword">if</span> (grade >= <span class="number">200</span>) {</span><br><span class="line"> stu s;</span><br><span class="line"> s.id = id;</span><br><span class="line"> s.gp = grade;</span><br><span class="line"> v.push_back(s);</span><br><span class="line"> name2index[id] = v.size();</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i < m; i++) {</span><br><span class="line"> <span class="built_in">cin</span> >> id >> grade;</span><br><span class="line"> <span class="keyword">if</span> (name2index[id] > <span class="number">0</span>) {</span><br><span class="line"> v[name2index[id] - <span class="number">1</span>].gm = grade;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i < n; i++) {</span><br><span class="line"> <span class="built_in">cin</span> >> id >> grade;</span><br><span class="line"> <span class="keyword">if</span> (name2index[id] > <span class="number">0</span>) {</span><br><span class="line"> v[name2index[id] - <span class="number">1</span>].gf = grade;</span><br><span class="line"> v[name2index[id] - <span class="number">1</span>].g = getG(v[name2index[id] - <span class="number">1</span>].gf, v[name2index[id] - <span class="number">1</span>].gm);</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> sort(v.begin(), v.end(), cmp);</span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i < v.size(); i++) {</span><br><span class="line"> <span class="keyword">if</span> (v[i].g >= <span class="number">60</span>) <span class="built_in">cout</span> << v[i].id << <span class="string">' '</span> << v[i].gp << <span class="string">' '</span> << v[i].gm << <span class="string">' '</span> << v[i].gf << <span class="string">' '</span> << v[i].g << <span class="built_in">endl</span>;</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">break</span>;</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><strong>注意:不要先将所有学生的信息先存放入结果集中在输出之前再进行删除再输出,而是排序之后,进行筛选输出。第一次的筛选是最重要的,如果编程分数<200那么将来根本不会考虑这个人。</strong></p>]]></content>
<summary type="html">
<h3 id="1080-MOOC期终成绩-25-分"><a href="#1080-MOOC期终成绩-25-分" class="headerlink" title="1080 MOOC期终成绩 (25 分)"></a>1080 MOOC期终成绩 (25 分)</h3><p>对于
</summary>
<category term="pat" scheme="https://yys123456.github.io/categories/pat/"/>
<category term="1080 MOOC期终成绩" scheme="https://yys123456.github.io/tags/1080-MOOC%E6%9C%9F%E7%BB%88%E6%88%90%E7%BB%A9/"/>
</entry>
<entry>
<title>1094 谷歌的招聘</title>
<link href="https://yys123456.github.io/2019/09/09/1094%20%E8%B0%B7%E6%AD%8C%E7%9A%84%E6%8B%9B%E8%81%98/"/>
<id>https://yys123456.github.io/2019/09/09/1094 谷歌的招聘/</id>
<published>2019-09-09T11:25:04.000Z</published>
<updated>2019-09-09T12:49:18.169Z</updated>
<content type="html"><![CDATA[<h3 id="1094-谷歌的招聘-20-分"><a href="#1094-谷歌的招聘-20-分" class="headerlink" title="1094 谷歌的招聘 (20 分)"></a>1094 谷歌的招聘 (20 分)</h3><p>2004 年 7 月,谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌(如下图)用于招聘。内容超级简单,就是一个以 .com 结尾的网址,而前面的网址是一个 10 位素数,这个素数是自然常数 e 中最早出现的 10 位连续数字。能找出这个素数的人,就可以通过访问谷歌的这个网站进入招聘流程的下一步。</p><p><img src="https://images.ptausercontent.com/57148679-d574-4f49-b048-775c6c07791c.jpg" alt="prime.jpg"></p><p>自然常数 e 是一个著名的超越数,前面若干位写出来是这样的:e = 2.71828182845904523536028747135266249775724709369995957496696762772407663035354759457138217852516642<strong>7427466391</strong>932003059921… 其中粗体标出的 10 位数就是答案。</p><p>本题要求你编程解决一个更通用的问题:从任一给定的长度为 L 的数字中,找出最早出现的 K 位连续数字所组成的素数。</p><h3 id="输入格式:"><a href="#输入格式:" class="headerlink" title="输入格式:"></a>输入格式:</h3><p>输入在第一行给出 2 个正整数,分别是 L(不超过 1000 的正整数,为数字长度)和 K(小于 10 的正整数)。接下来一行给出一个长度为 L 的正整数 N。</p><h3 id="输出格式:"><a href="#输出格式:" class="headerlink" title="输出格式:"></a>输出格式:</h3><p>在一行中输出 N 中最早出现的 K 位连续数字所组成的素数。如果这样的素数不存在,则输出 <code>404</code>。注意,原始数字中的前导零也计算在位数之内。例如在 200236 中找 4 位素数,0023 算是解;但第一位 2 不能被当成 0002 输出,因为在原始数字中不存在这个 2 的前导零。</p><h3 id="输入样例-1:"><a href="#输入样例-1:" class="headerlink" title="输入样例 1:"></a>输入样例 1:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">20 5</span><br><span class="line">23654987725541023819</span><br></pre></td></tr></table></figure><h3 id="输出样例-1:"><a href="#输出样例-1:" class="headerlink" title="输出样例 1:"></a>输出样例 1:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">49877</span><br></pre></td></tr></table></figure><h3 id="输入样例-2:"><a href="#输入样例-2:" class="headerlink" title="输入样例 2:"></a>输入样例 2:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">10 3</span><br><span class="line">2468024680</span><br></pre></td></tr></table></figure><h3 id="输出样例-2:"><a href="#输出样例-2:" class="headerlink" title="输出样例 2:"></a>输出样例 2:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">404</span><br></pre></td></tr></table></figure><h3 id="读题"><a href="#读题" class="headerlink" title="读题"></a>读题</h3><p>本题要求在一个长度为L<strong>(L≤1000)</strong>的正整数中找到一个长度规定为K(K<10)的数字,要求这个数字必须是素数,并且是最早出现的那一个。由于正整数的长度的最多可达到1000,所以考虑使用字符串保存大整数,然后令i指向大整数的第一个位置,求长度为K的子序列str,并将其转换为整数X,再判断X是否为素数,若X为素数,那么就输出str并退出循环,否则将i向后移动一个重复上述过程。</p><p>由此写出如下代码</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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cmath></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><string></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><sstream></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">long</span> <span class="title">string2long</span><span class="params">(<span class="built_in">string</span> s)</span></span>{</span><br><span class="line"><span class="built_in">stringstream</span> ss;</span><br><span class="line"><span class="keyword">long</span> res;</span><br><span class="line">ss<<s;</span><br><span class="line">ss>>res;</span><br><span class="line"><span class="keyword">return</span> res;</span><br><span class="line">} </span><br><span class="line"><span class="function"><span class="keyword">bool</span> <span class="title">isprime</span><span class="params">(<span class="keyword">long</span> t)</span></span>{</span><br><span class="line"><span class="keyword">if</span>(t==<span class="number">0</span>||t==<span class="number">1</span>)<span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">long</span> i=<span class="number">2</span>;i<=<span class="built_in">sqrt</span>(t);i++){</span><br><span class="line"><span class="keyword">if</span>(t%i==<span class="number">0</span>)<span class="keyword">return</span> <span class="number">0</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 class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"><span class="keyword">int</span> len,k;</span><br><span class="line"><span class="built_in">string</span> s;</span><br><span class="line"><span class="built_in">cin</span>>>len>>k>>s;</span><br><span class="line"><span class="keyword">int</span> i;</span><br><span class="line"><span class="keyword">for</span>(i=<span class="number">0</span>;i<=s.length()-k;i++){</span><br><span class="line"><span class="built_in">string</span> str=s.substr(i,k);</span><br><span class="line"> <span class="keyword">long</span> r=string2long(str);</span><br><span class="line"><span class="keyword">if</span>(isprime(r)){</span><br><span class="line"><span class="built_in">cout</span><<str<<<span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">break</span>;</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="keyword">if</span>(i>s.length()-k){</span><br><span class="line"><span class="built_in">cout</span><<<span class="number">404</span><<<span class="built_in">endl</span>;</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>但是出现错误,错误的原因是没有读清题目,题目并没有说明给出的输入数据一定合法,<strong><font color="red">大整数的长度L不一定会大于K的长度</font></strong>,所以需要注意string中的length方法的返回值类型,length方法的返回值类型是<strong>unsigned long long</strong>,所以能够表示的范围是$0到2^{64}-1$。</p><p><strong>含有unsigned类型变量的运算表达式类型转换规则:如果带符号类型的值域包含了无符号类型所表示的值,就把无符号转化为有符号类型,否则,两个操作数都转化为<font color="red">对应的</font>无符号类型。</strong></p><p><strong>示例</strong></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></pre></td><td class="code"><pre><span class="line"><span class="keyword">long</span> <span class="keyword">long</span> a=<span class="number">10</span>;<span class="comment">//8 bytes 可以保证值域覆盖了unsigned int</span></span><br><span class="line"><span class="keyword">unsigned</span> b=<span class="number">100</span>;</span><br><span class="line"><span class="built_in">cout</span><<<span class="keyword">typeid</span>(a-b).name();<span class="comment">//x((signed)long long)</span></span><br></pre></td></tr></table></figure><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">long</span> a=<span class="number">10</span>;<span class="comment">//4 bytes</span></span><br><span class="line"><span class="keyword">unsigned</span> b=<span class="number">100</span>;</span><br><span class="line"><span class="built_in">cout</span><<<span class="keyword">typeid</span>(a-b).name();<span class="comment">//m(unsigned long)</span></span><br></pre></td></tr></table></figure><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">int</span> a=<span class="number">10</span>;<span class="comment">//4 bytes</span></span><br><span class="line"><span class="keyword">unsigned</span> b=<span class="number">100</span>;</span><br><span class="line"><span class="built_in">cout</span><<<span class="keyword">typeid</span>(a-b).name();<span class="comment">//j(unsigned int)</span></span><br></pre></td></tr></table></figure><p>计算过程:先根据两边类型执行转换,再进行加减运算(算出的正值或者负值),然后再根据前面应当转换的类型来<strong><font size="5px">解释</font></strong>这个计算出来的数据。</p><p>所以本题如果L<K,而由于类型的转化一定是从int向unsigned long long转换,又由于L<k以及计算机中负数的补码表示,导致补码表示的负数L-K被当作unsigned long long解释,从而是一个特别大的数字,所以会导致进入一开始的循环(如果string的length方法返回值为int就没有此问题)。</p><p>又如</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></pre></td><td class="code"><pre><span class="line"><span class="keyword">long</span> a=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">unsigned</span> b=<span class="number">1</span>;</span><br><span class="line"><span class="built_in">cout</span><<a-b;</span><br></pre></td></tr></table></figure><p>分析</p><p>在计算之前会先执行类型的转换,根据以上规则,a和b都会转换为unsigned long(4字节),在计算时,32为的0-1补码运算得到的结果是-1的补码<code>32个1</code>,而这个结果会被看成是unsigned long来解释,所以一定会被解释成$2^{32}-1$,所以输出的结果并不是-1而是系统以为的那个无符号数<code>4294967295</code>,实际结果也是如此。</p><h3 id="C-实现"><a href="#C-实现" class="headerlink" title="C++实现"></a>C++实现</h3><h4 id="改进代码"><a href="#改进代码" class="headerlink" title="改进代码"></a>改进代码</h4><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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><cmath></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><string></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><sstream></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">long</span> <span class="title">string2long</span><span class="params">(<span class="built_in">string</span> s)</span></span>{</span><br><span class="line"><span class="built_in">stringstream</span> ss;</span><br><span class="line"><span class="keyword">long</span> res;</span><br><span class="line">ss<<s;</span><br><span class="line">ss>>res;</span><br><span class="line"><span class="keyword">return</span> res;</span><br><span class="line">} </span><br><span class="line"><span class="function"><span class="keyword">bool</span> <span class="title">isprime</span><span class="params">(<span class="keyword">long</span> t)</span></span>{</span><br><span class="line"><span class="keyword">if</span>(t==<span class="number">0</span>||t==<span class="number">1</span>)<span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">double</span> sqt=<span class="built_in">sqrt</span>(t);</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">long</span> i=<span class="number">2</span>;i<=sqt;i++){</span><br><span class="line"><span class="keyword">if</span>(t%i==<span class="number">0</span>)<span class="keyword">return</span> <span class="number">0</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 class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"><span class="keyword">int</span> len,k;</span><br><span class="line"><span class="built_in">string</span> s;</span><br><span class="line"><span class="built_in">cin</span>>>len>>k>>s;</span><br><span class="line"><span class="keyword">int</span> i;</span><br><span class="line"><span class="keyword">for</span>(i=<span class="number">0</span>;i<=(<span class="keyword">int</span>)s.length()-k;i++){</span><br><span class="line"><span class="built_in">string</span> str=s.substr(i,k);</span><br><span class="line"> <span class="keyword">long</span> r=string2long(str);</span><br><span class="line"><span class="keyword">if</span>(isprime(r)){</span><br><span class="line"><span class="built_in">cout</span><<str<<<span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">break</span>;</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="keyword">if</span>(i>(<span class="keyword">int</span>)s.length()-k){</span><br><span class="line"><span class="built_in">cout</span><<<span class="number">404</span><<<span class="built_in">endl</span>;</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><strong>改进代码将length方法的返回值强制转换为(signed)int型,这样,在L<K时所得到的负数补码结果就不会被解释成很大的无符号正数了。</strong></p>]]></content>
<summary type="html">
<h3 id="1094-谷歌的招聘-20-分"><a href="#1094-谷歌的招聘-20-分" class="headerlink" title="1094 谷歌的招聘 (20 分)"></a>1094 谷歌的招聘 (20 分)</h3><p>2004 年 7 月,谷歌在
</summary>
<category term="pat" scheme="https://yys123456.github.io/categories/pat/"/>
<category term="1094 谷歌的招聘" scheme="https://yys123456.github.io/tags/1094-%E8%B0%B7%E6%AD%8C%E7%9A%84%E6%8B%9B%E8%81%98/"/>
</entry>
<entry>
<title>leetcode 反转整数</title>
<link href="https://yys123456.github.io/2019/09/08/leetcode%20%E5%8F%8D%E8%BD%AC%E6%95%B4%E6%95%B0/"/>
<id>https://yys123456.github.io/2019/09/08/leetcode 反转整数/</id>
<published>2019-09-08T12:55:53.000Z</published>
<updated>2019-09-08T13:31:29.208Z</updated>
<content type="html"><![CDATA[<blockquote><p>给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。</p><p>示例 1:</p><p>输入: 123<br>输出: 321</p><p> 示例 2:</p><p>输入: -123<br>输出: -321</p><p>示例 3:</p><p>输入: 120<br>输出: 21</p><p>注意:</p><p>假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。</p></blockquote><h3 id="读题"><a href="#读题" class="headerlink" title="读题"></a>读题</h3><p>有题目中给出的<code>32 位的有符号整数</code>条件,又由<strong>C++中的int类型占用内存4字节</strong>(4<em>8=32 bits)可以知道需要进行反转的整数的类型是<em>*C++中的int类型</em></em>。又由此条件中的有符号整数条件可以知道,输入的整数可能为正可能为负,对于正数,直接逆置即可,而负数还需要先保存符号,再对数字部分进行反转之后添加上符号。</p><p>在不考虑范围的情况下,可以很容易写出以下代码</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></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">reverse</span><span class="params">(<span class="keyword">int</span> t)</span></span>{</span><br><span class="line"> <span class="keyword">int</span> q=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">int</span> flag=(t><span class="number">0</span>?<span class="number">1</span>:<span class="number">-1</span>);</span><br><span class="line"> t*=flag;</span><br><span class="line"> <span class="keyword">while</span>(t){</span><br><span class="line"> q=q*<span class="number">10</span>+t%<span class="number">10</span>;</span><br><span class="line"> t/=<span class="number">10</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> q*flag;</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>但是会出现runtime error问题,即溢出问题,也是一开始没有读全题目造成的。</p><font color="purple">**重要条件:如果反转后整数溢出那么就返回 0**</font><p>首先,输入的t一定是满足整型的要求的不会超范围,在进入函数之后第一时间保存了t的符号,并把t转换为正数,此处需要注意问题,<strong>在t>0时</strong>,t<em>flag(即取t的绝对值一定不会溢出范围),当t<0时,因为补码表示的原因,负数表示范围比正数多一个$-2^{31}$,所以如果输入的负数是$ -2^{31}$,那么在取其绝对值时就会超出32位整型能够表示的范围,所以需要<strong>设置一个long型变量</strong>来保存输入数据的数字部分,另外由于要判断反转后的数据是否溢出,<em>*所以保存反转数据的变量需要使用long型(如果用int,在出现溢出的时候,还没来得及判断就会系统错误)</em></em>。</p><h3 id="C-实现"><a href="#C-实现" class="headerlink" title="C++实现"></a>C++实现</h3><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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> INT_MAX 2147483647</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> INT_MIN (-INT_MAX - 1)</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">reverse</span><span class="params">(<span class="keyword">int</span> t)</span></span>{</span><br><span class="line"><span class="keyword">long</span> t1;</span><br><span class="line"><span class="keyword">long</span> q=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">int</span> flag=(t><span class="number">0</span>?<span class="number">1</span>:<span class="number">-1</span>);</span><br><span class="line">t1=(<span class="keyword">long</span>)t*flag;</span><br><span class="line"><span class="keyword">while</span>(t1){</span><br><span class="line">q=q*<span class="number">10</span>+t1%<span class="number">10</span>;</span><br><span class="line">t1/=<span class="number">10</span>;</span><br><span class="line">}</span><br><span class="line">q*=flag;</span><br><span class="line"><span class="keyword">if</span>(q>INT_MAX||q<INT_MIN)<span class="keyword">return</span> <span class="number">0</span></span><br><span class="line"><span class="keyword">return</span> q;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"><span class="keyword">int</span> t;</span><br><span class="line"><span class="built_in">cin</span>>>t;</span><br><span class="line"><span class="built_in">cout</span><<reverse(t);</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">
<blockquote>
<p>给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。</p>
<p>示例 1:</p>
<p>输入: 123<br>输出: 321</p>
<p> 示例 2:</p>
<p>输入: -123<br>输出: -321</p>
<p
</summary>
<category term="leetcode" scheme="https://yys123456.github.io/categories/leetcode/"/>
<category term="反转整数" scheme="https://yys123456.github.io/tags/%E5%8F%8D%E8%BD%AC%E6%95%B4%E6%95%B0/"/>
</entry>
<entry>
<title>原码、反码和补码</title>
<link href="https://yys123456.github.io/2019/09/07/%E5%8E%9F%E7%A0%81%E3%80%81%E5%8F%8D%E7%A0%81%E5%92%8C%E8%A1%A5%E7%A0%81/"/>
<id>https://yys123456.github.io/2019/09/07/原码、反码和补码/</id>
<published>2019-09-07T14:26:04.000Z</published>
<updated>2019-09-22T13:55:33.285Z</updated>
<content type="html"><![CDATA[<p>根据冯·诺依曼的计算机结构原理,计算机中的程序和数据被以<b>二进制形式(因为二进制简单易实现,运算规则简单)</b>存放在存储器中,在日常生活中,我们使用的是十进制数,而为了能够使计算机识别,必须在输入的时候将我们熟悉的十进制数转换为计算机能够识别的形式(二进制形式)。<strong>以下说明均基于机器字长为n</strong>。</p><h3 id="真值"><a href="#真值" class="headerlink" title="真值"></a>真值</h3><p>一个数无论使用何种数制或编码去表示它,它的数值大小都是固定不变的,比如$(1)_{10}$,表示的是十进制下符号为+,数值大小为1的数,在二进制下的$(1)_{2}$依然表示的是+1,所以真值就是客观存在的实际值,计算机中使用符号加绝对值(绝对值2、10…进制)的方式去表示一个真值。</p><h3 id="机器数"><a href="#机器数" class="headerlink" title="机器数"></a>机器数</h3><p>将数值部分是二进制的真值进行一定的处理,才能被计算机所识别,处理方法(<strong>做了一个真值和机器数的映射</strong>)有四种</p><p>对于<strong>纯整数</strong>而言</p><table style="text-align:center"> <tr> <td>机器数的表示方法</td> <td>映射</td> </tr> <tr> <td>原码</td> <td> <img src="https://latex.codecogs.com/gif.download?%5Bx%5D_%7Btrue-form%7D%3D%5Cleft%5C%7B%20%5Cbegin%7Baligned%7D%20x%20%5C%20%5C%20%5C%20%5C%20%5C%20%5C%20%5C%20%5C%20%5C%20%5C%20%5C%200%5Cleq%20x%20%5Cleq%202%5E%7Bn-1%7D-1%5C%5C%202%5E%7Bn-1%7D+%7Cx%7C%20%5C%20%5C%20%5C%20%5C%20%5C%20%5C%20%5C%20%5C%20%5C%20-2%5E%7Bn-1%7D%20%3C%20x%20%5Cleq%200%20%5C%5C%20%5Cend%7Baligned%7D%20%5Cright.%5C%5C"> </td> </tr> <tr> <td>反码</td> <td> <img src="https://latex.codecogs.com/gif.download?%5Bx%5D_%7Binverse-form%7D%3D%5Cleft%5C%7B%20%5Cbegin%7Baligned%7D%20x%20%5C%20%5C%20%5C%20%5C%20%5C%20%5C%20%5C%20%5C%20%5C%20%5C%20%5C%200%5Cleq%20x%20%5Cleq%202%5E%7Bn-1%7D-1%5C%5C%202%5E%7Bn%7D-1-%7Cx%7C%20%5C%20%5C%20%5C%20%5C%20%5C%20%5C%20%5C%20%5C%20%5C%20-2%5E%7Bn-1%7D%20%3C%20x%20%5Cleq%200%20%5C%5C%20%5Cend%7Baligned%7D%20%5Cright.%5C%5C"> </td> </tr> <tr> <td>补码</td> <td><img src="https://latex.codecogs.com/gif.download?%5Bx%5D_%7B%20two%27s%20%5C%20complement%5C%20representation%20%7D%3D%5Cleft%5C%7B%20%5Cbegin%7Baligned%7D%20x%20%5C%20%5C%20%5C%20%5C%20%5C%20%5C%20%5C%20%5C%20%5C%20%5C%20%5C%200%5Cleq%20x%20%5Cleq%202%5E%7Bn-1%7D-1%5C%5C%202%5E%7Bn%7D-%7Cx%7C%20%5C%20%5C%20%5C%20%5C%20%5C%20%5C%20%5C%20%5C%20%5C%20-2%5E%7Bn-1%7D%20%5Cleq%20x%20%3C%200%20%5C%5C%20%5Cend%7Baligned%7D%20%5Cright.%5C%5C"></td> </tr> <tr> <td>移码</td> <td><img src="https://latex.codecogs.com/gif.download?%5Bx%5D_%7Bframe%20%5C%20shift%7D%3D%5Bx%5D_%7Bcomplemental%20%5C%20code%7D+2%5E%7Bn-1%7D%20%5C%20-2%5E%7Bn-1%7D%5Cleq%20x%3C2%5E%7Bn-1%7D"> </td> </tr></table><p>对于<strong>纯小数</strong>而言</p><table> <tr> <td>机器数表示方法</td> <td>映射</td> </tr> <tr> <td>原码</td> <td><img src="https://latex.codecogs.com/gif.download?%5Bx%5D_%7Btrue%5C%20code%7D%3D%5Cleft%5C%7B%20%5Cbegin%7Baligned%7D%20x%20%26%20%26%200%5Cleq%20x%3C1%20%5C%5C%201+%7Cx%7C%20%26%20%26%20-1%3Cx%5Cleq0%20%5C%5C%20%5Cend%7Baligned%7D%20%5Cright."></td> </tr> <tr> <td>补码</td> <td><img src="https://latex.codecogs.com/gif.download?%5Bx%5D_%7Bcomplemental%5C%20code%7D%3D%5Cleft%5C%7B%20%5Cbegin%7Baligned%7D%20x%20%26%20%26%200%5Cleq%20x%3C1%20%5C%5C%202-%7Cx%7C%20%26%20%26%20-1%5Cleq%20x%3C0%20%5C%5C%20%5Cend%7Baligned%7D%20%5Cright."></td> </tr></table><p><strong>原码</strong>:是和真值最接近的一种机器数表示方法。</p><p><strong>反码</strong>:为了将减法转换为加法(想要使a<sub>反</sub>-b<sub>反</sub>=a+(-b)<sub>反</sub>)的尝试(无法消除<span>±0</span>)。</p><p><strong>补码</strong>:使用计量器具的<strong>容量的概念结合同余</strong>的方法,将减法转换为了加法(a<sub>补</sub>+(-b)<sub>补</sub>==[a-b]<sub>补</sub>),并消除了±0。</p><h3 id="定点数"><a href="#定点数" class="headerlink" title="定点数"></a>定点数</h3><p>定点数就是在计算机中包含小数点,并且小数点位置<strong>固定</strong>的机器数。</p><h4 id="定点整数"><a href="#定点整数" class="headerlink" title="定点整数"></a>定点整数</h4><p>定点<strong>整数</strong>的小数点位于最低位的后面,对于<strong>n</strong>位字长的计算机而言,使用n位来存储一个定点整数,其中最高位存储符号。</p><table> <tr> <td>表示方法</td> <td>能够表示真值x的范围</td> </tr> <tr> <td>原码、反码</td> <td><img src="https://latex.codecogs.com/gif.download?-2%5E%7Bn-1%7D+1%5Cleq%20x%5Cleq2%5E%7Bn-1%7D-1"></td> </tr> <tr> <td>补码、移码</td> <td><img src="https://latex.codecogs.com/gif.download?-2%5E%7Bn-1%7D%5Cleq%20x%5Cleq2%5E%7Bn-1%7D-1"></td> </tr></table><h4 id="定点小数"><a href="#定点小数" class="headerlink" title="定点小数"></a>定点小数</h4><p>定点小数的小数点位于符号为和最高有效数值位之间。</p><table> <tr> <td>表示方法</td> <td>能够表示的范围</td> </tr> <tr> <td>原码</td> <td><img src="https://latex.codecogs.com/gif.download?2%5E%7B-%28n-1%29%7D%5Cleq%20%7Cx%7C%5Cleq%201-2%5E%7B-%28n-1%29%7D%20%5C%20and%5C%20%5Cpm%200"></td> </tr> <tr> <td>补码</td> <td><img src="https://latex.codecogs.com/gif.download?-1%5Cleq%20x%5Cleq%201-2%5E%7B-%28n-1%29%7D"></td> </tr></table><h3 id="浮点数"><a href="#浮点数" class="headerlink" title="浮点数"></a>浮点数</h3><p>浮点数和定点数的区别在于</p><ol><li>小数点的浮动与否;</li><li>表示范围的大小;</li><li>表示的数据可以<strong>既有整数部分也有小数部分</strong>;</li></ol><p>表示方法以下两种</p><p><strong>方法1</strong></p><table> <tr> <td colspan="2">阶码部分(常用补码定点整数)</td> <td colspan="2">尾数部分(常用补码定点小数)</td> </tr> <tr> <td>阶符J</td> <td>阶码E</td> <td>尾符S</td> <td>尾码D</td> </tr></table><p><strong>方法2</strong></p><table> <tr> <td>数符</td> <td colspan="2">阶码部分(使用移码)</td> <td>尾数部分(不包括数符)</td> </tr></table><p><strong>浮点数X真值的计算方法</strong></p><script type="math/tex; mode=display">X=(-1)^sD\times 2^{E}</script><p>在使用浮点数来表示一个数的时候,阶码(定点整数)的表示范围决定了这种浮点表示方法能表示的范围,而尾数(定点小数)的范围大小(或长度大小)决定了这种方法能表示到的精度。</p><p>求一个真值的浮点形式步骤</p><ol><li>根据此数求得阶码和尾数;</li><li>根据要求使用阶码的原码/补码,尾数的原码/补码;</li><li>根据尾数所属类型(原码/补码)调整尾数(使尾数的有效数值部分左移或右移)使其满足规格化要求,从而增减阶码(注意阶码的基数2);</li></ol><p>注意:浮点数并不是小数的代名词,并不是说int是整型而float就是小数型,float里面同样可以放整数,浮点数只是计算机内用来表示机器数的一种手段,这种手段可以表示更大范围、更多种类的数。</p><h3 id="机器数之间的转化关系"><a href="#机器数之间的转化关系" class="headerlink" title="机器数之间的转化关系"></a>机器数之间的转化关系</h3><p><strong>机器字长为n的条件下</strong></p><ol><li>无论是纯小数还是纯整数,都一定可以通过<strong>真值</strong>并使用对应的公式,求出它所对应的机器数(原码、补码、反码、移码),<strong>即可以直接通过真值对应机器数,不管它们之间的相互转化</strong>。</li><li>对于<strong>负数的真值</strong>,可以通过一种普适方法来直接得到它的补码,对于纯整数,先将绝对值放入存储单元(高位补零),然后所有位取反,然后再加1,对于纯小数(设小数部分位数为k),将小数的所有位取反,但<strong>一定不包括后导零</strong>,再加上2<sup>-k</sup>。</li><li>对于负的纯小数和满足最低位为1的负的纯整数真值,可以使用除了普适方法以外的简便方法来求其对应的补码,对于负的纯小数,找到这个负小数的非零最低位,然后将其他所有位取反即可得到表示它的补码,对于满足条件的负的纯整数,先将它的<strong>绝对值</strong>放入n位存储单元(高位补零),然后再将除了最后一位的所有位取反。</li><li>对于小数使用简化后的方法(可以使用原码->反码->补码),而对于整数使用普适方法(或者常规的原码->反码->补码->移码)。</li></ol><p>注意点:</p><ol><li>目测求反码之前一定要先求出对应机器字长的原码(<font color="red">尤其对于小数</font>);</li><li>小数没有IEEE754中所描述的移码,但是小数有常规定义的移码(对补码的最高位取反);</li></ol><font size="20px">2019.9.22:</font><p>对机器数之间的转化关系里的第3点进行修正(来自于通过[y]<sub>补</sub>求[-y]<sub>补</sub>的启发)</p><p>对于给定的一个真值,要求它的补码分以下两种情况</p><ol><li>给出的真值为正,那么它的补码就的等于它的原码;</li><li>给出的真值为负,要求它的补码,先分析它的<strong>绝对值</strong>,如果是定点小数,那么对于绝对值,从最低位开始找第一个1,然后对于其他的所有位取反,即可得到负数真值的补码。若为定点整数,那么<strong>同样</strong>是从最低位开始找第一个1,然后其他所有位取反(但是在真值的位数小于机器字长时注意前导零到最高位(符号位)都要取反),也可得到对应的补码。</li></ol>]]></content>
<summary type="html">
<p>根据冯·诺依曼的计算机结构原理,计算机中的程序和数据被以<b>二进制形式(因为二进制简单易实现,运算规则简单)</b>存放在存储器中,在日常生活中,我们使用的是十进制数,而为了能够使计算机识别,必须在输入的时候将我们熟悉的十进制数转换为计算机能够识别的形式(二进制形式)。<
</summary>
<category term="计算机组成原理" scheme="https://yys123456.github.io/categories/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%84%E6%88%90%E5%8E%9F%E7%90%86/"/>
<category term="原码、反码和补码" scheme="https://yys123456.github.io/tags/%E5%8E%9F%E7%A0%81%E3%80%81%E5%8F%8D%E7%A0%81%E5%92%8C%E8%A1%A5%E7%A0%81/"/>
</entry>
<entry>
<title>2-路归并排序</title>
<link href="https://yys123456.github.io/2019/09/05/%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F/"/>
<id>https://yys123456.github.io/2019/09/05/归并排序/</id>
<published>2019-09-05T09:58:39.000Z</published>
<updated>2019-09-06T11:49:13.052Z</updated>
<content type="html"><![CDATA[<p>在之前的数据结构算法实现中,有一个合并两个有序线性表(顺序表或单链表)的算法,此算法实现了将两个升序的线性表合并成一个线性表并保持合并结果仍为升序,而对于归并排序,它的<strong>核心操作</strong>就是<strong>两个<font color="red">有序序列</font>的<font color="red">有序合并</font></strong>的操作。</p><h3 id="合并两个升序线性表"><a href="#合并两个升序线性表" class="headerlink" title="合并两个升序线性表"></a>合并两个升序线性表</h3><h4 id="顺序表"><a href="#顺序表" class="headerlink" title="顺序表"></a>顺序表</h4><figure class="highlight plain"><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">a[0...n-1]</span><br><span class="line">b[0...m-1]</span><br><span class="line">c[0...m+n-1]</span><br><span class="line">k=0</span><br><span class="line">for i<n&&j<m</span><br><span class="line">if a[i]<=b[j]</span><br><span class="line">c[k++]=a[i++]</span><br><span class="line">else</span><br><span class="line">c[k++]=b[j++]</span><br><span class="line">while j<m</span><br><span class="line">c[k++]=b[j++]</span><br><span class="line">while i<n</span><br><span class="line">c[k++]=a[i++]</span><br></pre></td></tr></table></figure><h4 id="链表"><a href="#链表" class="headerlink" title="链表"></a>链表</h4><figure class="highlight plain"><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">头指针:A</span><br><span class="line">头指针:B</span><br><span class="line">指针:L,C</span><br><span class="line">L=C=A</span><br><span class="line">while A&&B</span><br><span class="line">if A->data<=b->data</span><br><span class="line">C->next=A</span><br><span class="line">C=A</span><br><span class="line">A=A->next</span><br><span class="line">else</span><br><span class="line">C->next=B</span><br><span class="line">C=B</span><br><span class="line">B=B->next</span><br><span class="line">C->next=(A==NULL?B:A)</span><br></pre></td></tr></table></figure><h3 id="算法描述"><a href="#算法描述" class="headerlink" title="算法描述"></a>算法描述</h3><p>归并排序的过程是认为一个待排序序列(可能是某一个大序列的<strong>子序列</strong>)是由多个子序列组成的,所以对整个序列的排序就可以自底向上的理解:将一个一个子序列按照要求(升序或降序)进行排列好了以后,然后再整个地将它们按照要求(升序或降序)地合并起来成为整个序列,<strong>而其中对子序列的按要求排序同样会将子序列分成多个子序列,然后将子序列的子序列按照要求排序并合并成子序列…</strong></p><h3 id="算法过程"><a href="#算法过程" class="headerlink" title="算法过程"></a>算法过程</h3><h4 id="递归算法"><a href="#递归算法" class="headerlink" title="递归算法"></a>递归算法</h4><p>首先接收待排序序列a,以及排序范围$[left,right]$,排序函数MergeSort(int*a,int left,int right)然后按下列步骤</p><ol><li>MergeSort函数接收left和right,判断left<right?转到2:转到6;</li><li>此时尚未划分到最小的序列,设置$mid=\frac{right+left}{2}$;</li><li>递归调用MergeSort(a,left,mid)(对left~mid进行归并排序);</li><li>递归调用MergeSort(a,mid+1,right)(对mid+1~right进行归并排序);</li><li>到达这一步,<strong>说明mid左侧和mid右侧的两个子序列已经排序完毕</strong>,所以将left~mid和mid+1~right两个有序子序列有序<strong>合并为序列a的left~right</strong>;</li><li>MergeSort函数结束(此时可以回归上层)。</li></ol><p>实际上,递归方法的归并排序的思想就是对于一个待排序序列a,从组成它的最小序列开始<strong>不断去形成</strong>成对的有序<b>子</b>序列,并使用有序序列有序合并算法将它们合并到a的对应范围。</p><h4 id="非递归算法"><a href="#非递归算法" class="headerlink" title="非递归算法"></a>非递归算法</h4><p>非递归算法使用的是模拟的方法,模拟归并排序的过程,即通过<strong>逐渐增大分组的len</strong>设置每一次归并排序的<strong>子序列单位长度</strong>,由于每一个子序列的单位长度为1时不需要进行merge操作,所以设置len从2开始增大,使用每次的len对原序列进行分段有序合并,直到原序列长度的一半即可(因为再len成为原序列的一半时便可以使用此len将原序列的左右两半有序合并)。</p><p>注意:对于一个子序列单位长度len,可能对于原序列长度n<strong>并不能</strong>被分成完整的几个子序列,所以对于这种情况的处理只需要将最后的那几个元素当成一个序列和它之前的子序列一起合并到原序列即可。</p><h3 id="复杂度分析"><a href="#复杂度分析" class="headerlink" title="复杂度分析"></a>复杂度分析</h3><p>由于对于归并排序每次确定一个子序列后都需要辅助区间来实现将left~mid和mid+1~right的元素有序合并到原序列中,并且每个子序列的长度都满足小于等于原序列的一半,所以可以知道对于长度为n的序列进行归并排序时的空间复杂度为</p><script type="math/tex; mode=display">O(n)</script><p>时间复杂度分析</p><p>对于一个长度为n的序列设其需要的时间为$T(n)$可得$T(n)=T(\frac{n}{2})\times2+O(n)$。</p><script type="math/tex; mode=display">O(nlogn)</script><h3 id="算法实现"><a href="#算法实现" class="headerlink" title="算法实现"></a>算法实现</h3><h4 id="递归实现"><a href="#递归实现" class="headerlink" title="递归实现"></a>递归实现</h4><h5 id="C-代码"><a href="#C-代码" class="headerlink" title="C++代码"></a>C++代码</h5><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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">MergeList</span><span class="params">(<span class="keyword">int</span>, <span class="keyword">int</span>, <span class="keyword">int</span>, <span class="keyword">int</span>)</span></span>;</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">mergeSort</span><span class="params">(<span class="keyword">int</span> * a, <span class="keyword">int</span> left, <span class="keyword">int</span> right)</span> </span>{</span><br><span class="line"> <span class="keyword">if</span> (left < right) {</span><br><span class="line"> <span class="keyword">int</span> mid = (left + right) / <span class="number">2</span>;</span><br><span class="line"> mergeSort(a, left, mid);</span><br><span class="line"> mergeSort(a, mid + <span class="number">1</span>, right);</span><br><span class="line"> MergeList(a, left, mid, right);</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">MergeList</span><span class="params">(<span class="keyword">int</span> * a, <span class="keyword">int</span> left, <span class="keyword">int</span> mid, <span class="keyword">int</span> right)</span> </span>{</span><br><span class="line"> <span class="keyword">int</span> lenl = mid - left + <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">int</span> lenr = right - mid;</span><br><span class="line"> <span class="keyword">int</span> * l = <span class="keyword">new</span> <span class="keyword">int</span>[lenl];</span><br><span class="line"> <span class="keyword">int</span> * r = <span class="keyword">new</span> <span class="keyword">int</span>[lenr];</span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i < lenl; i++) {</span><br><span class="line"> l[i] = a[left + i];</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i < lenr; i++) {</span><br><span class="line"> r[i] = a[mid + <span class="number">1</span> + i];</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">int</span> i = <span class="number">0</span>,</span><br><span class="line"> j = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span> (i < lenl && j < lenr) {</span><br><span class="line"> <span class="keyword">if</span> (l[i] <= r[j]) {</span><br><span class="line"> a[left++] = l[i++];</span><br><span class="line"> } <span class="keyword">else</span> {</span><br><span class="line"> a[left++] = r[j++];</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span> (i < lenl) {</span><br><span class="line"> a[left++] = l[i++];</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span> (j < lenr) {</span><br><span class="line"> a[left++] = r[j++];</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">delete</span>[] l;</span><br><span class="line"> <span class="keyword">delete</span>[] r;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>{</span><br><span class="line"> <span class="keyword">int</span> n;</span><br><span class="line"> <span class="built_in">cin</span> >> n;</span><br><span class="line"> <span class="keyword">int</span> * a = <span class="keyword">new</span> <span class="keyword">int</span>[n];</span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i < n; i++) {</span><br><span class="line"> <span class="built_in">cin</span> >> a[i];</span><br><span class="line"> }</span><br><span class="line"> <span class="comment">//归并排序</span></span><br><span class="line"> <span class="built_in">cout</span> << <span class="string">"before: "</span>;</span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i < n; i++) {</span><br><span class="line"> <span class="built_in">cout</span> << a[i] << <span class="string">' '</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="built_in">cout</span> << <span class="built_in">endl</span>;</span><br><span class="line"> mergeSort(a, <span class="number">0</span>, n - <span class="number">1</span>);</span><br><span class="line"> <span class="built_in">cout</span> << <span class="string">"after: "</span>;</span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i < n; i++) {</span><br><span class="line"> <span class="built_in">cout</span> << a[i] << <span class="string">' '</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">delete</span>[] a;</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><h5 id="python3代码"><a href="#python3代码" class="headerlink" title="python3代码"></a>python3代码</h5><figure class="highlight python"><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></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">mergeSort</span><span class="params">(a, L, R)</span>:</span></span><br><span class="line"> <span class="keyword">if</span>(L < R):</span><br><span class="line"> mid = (L+R)//<span class="number">2</span></span><br><span class="line"> mergeSort(a, L, mid)</span><br><span class="line"> mergeSort(a, mid+<span class="number">1</span>, R)</span><br><span class="line"> merge(a, L, mid, R)</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">merge</span><span class="params">(a, L, mid, R)</span>:</span></span><br><span class="line"> left = []</span><br><span class="line"> right = []</span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> range(L, mid+<span class="number">1</span>):</span><br><span class="line"> left.append(a[i])</span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> range(mid+<span class="number">1</span>, R+<span class="number">1</span>):</span><br><span class="line"> right.append(a[i])</span><br><span class="line"> l = <span class="number">0</span></span><br><span class="line"> r = <span class="number">0</span></span><br><span class="line"> <span class="keyword">while</span> l<len(left) <span class="keyword">and</span> r<len(right):</span><br><span class="line"> <span class="keyword">if</span>(left[l]<=right[r]):</span><br><span class="line"> a[L]=left[l]</span><br><span class="line"> L+=<span class="number">1</span></span><br><span class="line"> l+=<span class="number">1</span></span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> a[L]=right[r]</span><br><span class="line"> L+=<span class="number">1</span></span><br><span class="line"> r+=<span class="number">1</span></span><br><span class="line"> <span class="keyword">while</span> l<len(left):</span><br><span class="line"> a[L]=left[l]</span><br><span class="line"> L+=<span class="number">1</span></span><br><span class="line"> l+=<span class="number">1</span></span><br><span class="line"> <span class="keyword">while</span> r<len(right):</span><br><span class="line"> a[L]=right[r]</span><br><span class="line"> L+=<span class="number">1</span></span><br><span class="line"> r+=<span class="number">1</span></span><br><span class="line"></span><br><span class="line">a = (input(<span class="string">"请输入 排序数组长度,数组内容\n"</span>).split(<span class="string">','</span>))</span><br><span class="line">arr = list(map(int, a[<span class="number">1</span>].split()))</span><br><span class="line">mergeSort(arr, <span class="number">0</span>, len(arr)<span class="number">-1</span>)</span><br><span class="line">print(arr)</span><br></pre></td></tr></table></figure><h5 id="Java代码"><a href="#Java代码" class="headerlink" title="Java代码"></a>Java代码</h5><figure class="highlight java"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> java.util.*;</span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Main</span></span>{</span><br><span class="line"> <span class="keyword">int</span>[] before;</span><br><span class="line"> <span class="keyword">int</span>[] after;<span class="comment">//保存最终结果</span></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="title">Main</span><span class="params">(<span class="keyword">int</span> n,Scanner scn)</span></span>{</span><br><span class="line"> before=<span class="keyword">new</span> <span class="keyword">int</span>[n];</span><br><span class="line"> after=<span class="keyword">new</span> <span class="keyword">int</span>[n];</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<n;i++) {</span><br><span class="line"> before[i] = scn.nextInt();</span><br><span class="line"> after[i]=before[i];</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="function"><span class="keyword">void</span> <span class="title">startSort</span><span class="params">()</span></span>{</span><br><span class="line"> Mergesort(after,<span class="number">0</span>,after.length-<span class="number">1</span>);</span><br><span class="line"> }</span><br><span class="line"> <span class="function"><span class="keyword">void</span> <span class="title">Mergesort</span><span class="params">(<span class="keyword">int</span>[] a,<span class="keyword">int</span> l,<span class="keyword">int</span> r)</span></span>{</span><br><span class="line"> <span class="keyword">if</span>(l==r);</span><br><span class="line"> <span class="keyword">else</span>{</span><br><span class="line"> <span class="keyword">int</span> mid=(l+r)/<span class="number">2</span>;</span><br><span class="line"> Mergesort(a,l,mid);</span><br><span class="line"> Mergesort(a,mid+<span class="number">1</span>,r);</span><br><span class="line"> MergeList(a,l,mid,r);</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="function"><span class="keyword">void</span> <span class="title">MergeList</span><span class="params">(<span class="keyword">int</span>[] a,<span class="keyword">int</span> l,<span class="keyword">int</span> mid,<span class="keyword">int</span> r)</span></span>{</span><br><span class="line"> <span class="keyword">int</span>[] left=<span class="keyword">new</span> <span class="keyword">int</span>[mid-l+<span class="number">1</span>];</span><br><span class="line"> <span class="keyword">int</span>[] right=<span class="keyword">new</span> <span class="keyword">int</span>[r-mid];</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=l;i<=mid;i++)</span><br><span class="line"> left[i-l]=a[i];</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=mid+<span class="number">1</span>;i<=r;i++)</span><br><span class="line"> right[i-mid-<span class="number">1</span>]=a[i];</span><br><span class="line"> <span class="comment">//合并到a</span></span><br><span class="line"> <span class="keyword">int</span> i=<span class="number">0</span>,j=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">for</span>(;i<left.length&&j<right.length;){</span><br><span class="line"> <span class="keyword">if</span>(left[i]<=right[j]){</span><br><span class="line"> a[l++]=left[i++];</span><br><span class="line"> }<span class="keyword">else</span>{</span><br><span class="line"> a[l++]=right[j++];</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(i<left.length){</span><br><span class="line"> a[l++]=left[i++];</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(j<right.length){</span><br><span class="line"> a[l++]=right[j++];</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="function"><span class="keyword">static</span> <span class="keyword">void</span> <span class="title">show</span><span class="params">(<span class="keyword">int</span>[] a)</span></span>{</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i:a){</span><br><span class="line"> System.out.println(i);</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span></span>{</span><br><span class="line"> <span class="keyword">int</span> n;</span><br><span class="line"> Scanner scn=<span class="keyword">new</span> Scanner(System.in);</span><br><span class="line"> n=scn.nextInt();</span><br><span class="line"> Main m=<span class="keyword">new</span> Main(n,scn);</span><br><span class="line"> m.startSort();</span><br><span class="line"> System.out.println(<span class="string">"before:"</span>);</span><br><span class="line"> show(m.before);</span><br><span class="line"> System.out.println(<span class="string">"after:"</span>);</span><br><span class="line"> show(m.after);</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h4 id="非递归实现"><a href="#非递归实现" class="headerlink" title="非递归实现"></a>非递归实现</h4><h5 id="C-代码-1"><a href="#C-代码-1" class="headerlink" title="C++代码"></a>C++代码</h5><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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><cmath></span></span></span><br><span class="line"><span class="comment">//循环实现 </span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">merge</span><span class="params">(<span class="keyword">int</span> * a, <span class="keyword">int</span> left, <span class="keyword">int</span> mid, <span class="keyword">int</span> right)</span> </span>{</span><br><span class="line"> <span class="keyword">int</span> lenl = mid - left + <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">int</span> lenr = right - mid;</span><br><span class="line"> <span class="keyword">int</span> * l = <span class="keyword">new</span> <span class="keyword">int</span>[lenl];</span><br><span class="line"> <span class="keyword">int</span> * r = <span class="keyword">new</span> <span class="keyword">int</span>[lenr];</span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i < lenl; i++) {</span><br><span class="line"> l[i] = a[left + i];</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i < lenr; i++) {</span><br><span class="line"> r[i] = a[mid + <span class="number">1</span> + i];</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">int</span> i = <span class="number">0</span>,</span><br><span class="line"> j = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span> (i < lenl && j < lenr) {</span><br><span class="line"> <span class="keyword">if</span> (l[i] <= r[j]) {</span><br><span class="line"> a[left++] = l[i++];</span><br><span class="line"> } <span class="keyword">else</span> {</span><br><span class="line"> a[left++] = r[j++];</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span> (i < lenl) {</span><br><span class="line"> a[left++] = l[i++];</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span> (j < lenr) {</span><br><span class="line"> a[left++] = r[j++];</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">delete</span>[] l;</span><br><span class="line"> <span class="keyword">delete</span>[] r;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>{</span><br><span class="line"> <span class="keyword">int</span> n;</span><br><span class="line"> <span class="built_in">cin</span> >> n;</span><br><span class="line"> <span class="keyword">int</span> * a = <span class="keyword">new</span> <span class="keyword">int</span>[n];</span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i < n; i++) {</span><br><span class="line"> <span class="built_in">cin</span> >> a[i];</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">int</span> i = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">int</span> len;</span><br><span class="line"> <span class="keyword">for</span> (len = <span class="number">1</span>; len <= (<span class="keyword">int</span>)<span class="built_in">ceil</span>(n/<span class="number">2.0</span>); len *= <span class="number">2</span>) {</span><br><span class="line"> i = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">if</span> (i + <span class="number">2</span> * len - <span class="number">1</span> >= n) <span class="keyword">break</span>; <span class="comment">//此时已经全部分组合并成了一组</span></span><br><span class="line"> <span class="keyword">while</span> (i + <span class="number">2</span> * len - <span class="number">1</span> < n) { <span class="comment">//组内配对 </span></span><br><span class="line"> merge(a, i, (i + <span class="number">2</span> * len - <span class="number">1</span> + i) / <span class="number">2</span>, i + <span class="number">2</span> * len - <span class="number">1</span>);</span><br><span class="line"> i += <span class="number">2</span> * len; <span class="comment">//组外偏移</span></span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span> (i < n) {</span><br><span class="line"> merge(a, i - <span class="number">2</span> * len, i - <span class="number">1</span>, n - <span class="number">1</span>);</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i < n; i++) {</span><br><span class="line"> <span class="built_in">cout</span> << a[i] << <span class="string">' '</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">delete</span>[] a;</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">
<p>在之前的数据结构算法实现中,有一个合并两个有序线性表(顺序表或单链表)的算法,此算法实现了将两个升序的线性表合并成一个线性表并保持合并结果仍为升序,而对于归并排序,它的<strong>核心操作</strong>就是<strong>两个<font color="red">有序
</summary>
<category term="数据结构" scheme="https://yys123456.github.io/categories/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
<category term="2-路归并排序" scheme="https://yys123456.github.io/tags/2-%E8%B7%AF%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F/"/>
</entry>
<entry>
<title>操作系统笔记1</title>
<link href="https://yys123456.github.io/2019/09/03/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E7%AC%94%E8%AE%B01/"/>
<id>https://yys123456.github.io/2019/09/03/操作系统笔记1/</id>
<published>2019-09-03T14:10:46.000Z</published>
<updated>2019-09-05T12:36:17.904Z</updated>
<content type="html"><![CDATA[<p>以下对操作系统第一章的知识进行总结。</p><h3 id="操作系统的目标"><a href="#操作系统的目标" class="headerlink" title="操作系统的目标"></a>操作系统的目标</h3><pre class="mermaid">graph LRA[操作系统的目标]-->B[方便性]A-->C[有效性 提高系统资源利用率 提高吞吐量]A-->D[可扩充性 采用层次化结构]A-->E[开放性 遵循OSI标准]</pre><p>注:其中方便性和有效性是最重要的两个目标。</p><h3 id="操作系统的作用"><a href="#操作系统的作用" class="headerlink" title="操作系统的作用"></a>操作系统的作用</h3><h4 id="用户角度"><a href="#用户角度" class="headerlink" title="用户角度"></a>用户角度</h4><p><strong>操作系统是用户和计算机硬件系统间的接口。</strong></p><p>用户通过三种方式使用计算机:命令、<strong>系统调用</strong>、图标——窗口方式。</p><h4 id="计算机资源管理角度"><a href="#计算机资源管理角度" class="headerlink" title="计算机资源管理角度"></a>计算机资源管理角度</h4><p><strong>操作系统是计算机系统的管理者。</strong></p><p>计算机系统中的资源一共分为四类:<strong>处理机、存储器、I/O设备、文件(数据和程序)</strong>。</p><h4 id="计算机资源抽象角度"><a href="#计算机资源抽象角度" class="headerlink" title="计算机资源抽象角度"></a>计算机资源抽象角度</h4><p><strong>操作系统实现了对计算机资源的抽象。</strong></p><p>如覆盖在计算机上的I/O设备管理软件,隐去了I/O设备的具体细节,使用命令即可使用I/O设备。</p><p>为了简化抽象硬件设备而将相应的管理<strong>软件覆盖</strong>在硬件设备上,做了这样的操作的<strong>裸机</strong>是扩充机器(虚机器),即<strong>虚机器(扩充机器)是覆盖了软件的裸机</strong>。</p><h3 id="操作系统的发展过程"><a href="#操作系统的发展过程" class="headerlink" title="操作系统的发展过程"></a>操作系统的发展过程</h3><table style="text-align:center"> <tr> <td rowspan="2">无操作系统</td> <td>人工操作</td> </tr> <tr> <td>脱机I/O</td> </tr> <tr> <td rowspan="2">批处理操作系统</td> <td>单道批处理</td> </tr> <tr> <td>多道批处理</td> </tr> <tr> <td rowspan="2" colspan="2">分时系统</td> </tr> <tr> </tr> <tr> <td rowspan="2" colspan="2">实时系统</td> </tr> <tr> </tr></table><p>人工操作方式下</p><ol><li>用户独占全机;</li><li>CPU等需要人工操作;</li><li>数据的输入,程序的执行,结果的输出均需要联机(在主机的直接控制下)进行。</li></ol><p>脱机输入/输出方式</p><ol><li>减少CPU的空闲时间;</li><li>提高了I/O速度;</li><li>为了解决CPU和I/O速度不匹配导致的CPU和I/O矛盾;</li><li>为了解决人机矛盾(人工操作降低了计算机资源的利用率)。</li></ol><p>单道<strong>批</strong>处理</p><ol><li>为了解决人机矛盾和CPU与I/O的矛盾;</li><li>由于I/O设备的低速性,导致资源的利用率低;</li><li>由于始终保持内存中仅有一道作业,所以造成内存浪费;</li></ol><p>多道批处理</p><ol><li>资源利用率高(提高内存和I/O的利用率);</li><li>系统吞吐量大;</li><li>提高CPU的利用率(注意对于同一批作业并不是CPU的工作时间变长了,而是完成这批作业的总时间变短了(因为利用了作业I/O时的空闲时间));</li><li><strong>平均</strong>周转时间长;</li><li><strong>无法进行交互</strong>(而分时和实时是可以交互的)。</li></ol><p><strong>注:</strong></p><p>周转时间:作业进入系统,直到完成并退出系统经历的时间。</p><p>单道批处理系统的三个特点:自动性(后备队列的作业会自动地被调入内存),顺序性,<strong>单道性(体现了单道和多道的区别)</strong>。</p><p>单道批处理系统是最早出现地OS。</p><p>多道批处理出现是为了进一步提高资源利用率和吞吐量。</p><p>多道批处理系统需要解决的几个问题</p><ol><li>存储保护与程序浮动;</li><li>处理器的管理和分配;</li><li>系统资源的管理和调度。</li></ol><p>其中</p><p>存储保护:硬件必须提供必要的手段,使得在内存储器中的各道程序只能访问它自己的区域,以避免相互干扰。 特别是当一道程序发生错误时,不致影响其他的程序,更不能影响系统程序,即CPU要有能力去区分哪一个进程属于哪一个作业。</p><p>程序浮动:都要求一个程序或程序 某一部分能随机地从某个内存储器区域移动到另一个区域,而不影响其执行,这就是程序浮动,或称地址重定位。</p><p>分时系统的特点</p><p>分时系统采用<strong>作业直接进内存(去掉了速度最慢的硬盘阶段)和时间片轮转运行方式</strong>。</p><p>多路性,独立性,及时性,<strong>交互性</strong>。</p><p>实时系统特点</p><p>多路性,独立性,及时性,<strong>交互性</strong>,可靠性。</p><p>在批处理系统(单道批处理或多道批处理)的背景下,完成一批作业的CPU和其他设备的利用率的分析和计算,以及画CPU和I/O设备的利用时间图(作图需要注意纵轴内容(I/O+计算)和横轴(时间t))。</p><h3 id="操作系统的定义"><a href="#操作系统的定义" class="headerlink" title="操作系统的定义"></a>操作系统的定义</h3><p>操作系统是一组能有效组织和管理计算机硬件和软件资源,合理对各类作业进行调度,以及方便用户使用的<strong>程序的集合。</strong></p>]]></content>
<summary type="html">
<p>以下对操作系统第一章的知识进行总结。</p>
<h3 id="操作系统的目标"><a href="#操作系统的目标" class="headerlink" title="操作系统的目标"></a>操作系统的目标</h3><pre class="mermaid">graph
</summary>
<category term="操作系统" scheme="https://yys123456.github.io/categories/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/"/>
<category term="1" scheme="https://yys123456.github.io/tags/1/"/>
</entry>
<entry>
<title>python3笔记1</title>
<link href="https://yys123456.github.io/2019/09/02/python%E7%AC%94%E8%AE%B01/"/>
<id>https://yys123456.github.io/2019/09/02/python笔记1/</id>
<published>2019-09-02T10:47:01.000Z</published>
<updated>2019-09-02T13:50:06.839Z</updated>
<content type="html"><![CDATA[<h3 id="common-sense"><a href="#common-sense" class="headerlink" title="common sense"></a>common sense</h3><p>python通过缩进来区分代码块,而不是大括号</p><h3 id="变量"><a href="#变量" class="headerlink" title="变量"></a>变量</h3><h4 id="python变量(变量就是变量)没有类型,而真正具有类型的是内存中的对象"><a href="#python变量(变量就是变量)没有类型,而真正具有类型的是内存中的对象" class="headerlink" title="python变量(变量就是变量)没有类型,而真正具有类型的是内存中的对象"></a>python<font color="red">变量(变量就是变量)</font>没有类型,而真正具有类型的是内存中的对象</h4><h3 id="标准数据类型"><a href="#标准数据类型" class="headerlink" title="标准数据类型"></a>标准数据类型</h3><p>六大数据类型</p><ul><li>Number(数字)</li><li>String(字符串)</li><li>List(列表)</li><li>Tuple(元组)</li><li>Set(集合)</li><li>Dictionary(字典)</li></ul><p>其中</p><ul><li><strong>不可变数据(3 个)</strong>:<strong>Number(数字)</strong>、String(字符串)、Tuple(元组);</li><li><strong>可变数据(3 个)</strong>:List(列表)、Dictionary(字典)、Set(集合)。 </li></ul><p>其中</p><p>数字类型中有int,float,bool(取值为True/False),complex(取值为8j,3.14j)类型。</p><h3 id="输入和输出"><a href="#输入和输出" class="headerlink" title="输入和输出"></a>输入和输出</h3><h4 id="输入:函数input-String"><a href="#输入:函数input-String" class="headerlink" title="输入:函数input([String])"></a>输入:函数input(<font color="red">[String]</font>)</h4><h4 id="输出:函数print-value-…-sep-’-’-end-’-n’-(sep规定输出value之间的分隔符-默认为空格)"><a href="#输出:函数print-value-…-sep-’-’-end-’-n’-(sep规定输出value之间的分隔符-默认为空格)" class="headerlink" title="输出:函数print(value,…[,sep=’,’,end=’\n’])(sep规定输出value之间的分隔符,默认为空格)"></a>输出:函数print(<font color="red">value,…[,sep=’,’,end=’\n’]</font>)(sep规定输出value之间的分隔符,默认为空格)</h4><h3 id="运算符"><a href="#运算符" class="headerlink" title="运算符"></a>运算符</h3><table style="text-align:center"> <tr> <td> operator </td> <td> introduction </td> </tr> <tr> <td>**</td> <td>乘方运算</td> </tr> <tr> <td> // </td> <td>整除运算</td> </tr><tr> <td> / </td> <td>除法运算</td></tr> <tr> <td> ~ </td> <td>按位取反</td></tr><tr> <td> and </td> <td>与(可以对非bool变量使用,有短路效果,a and b)</td></tr><tr> <td> or </td> <td>或(可以对非bool变量使用,有短路效果,a or b)</td></tr> <tr> <td> not </td> <td>与(只可以对bool变量使用,not(a=True))</td></tr> <tr> <td> in </td> <td>a in b如果a在b中,True</td></tr> <tr> <td> not in </td> <td>a not in b如果a在b中,False</td></tr> <tr> <td> is[not] </td> <td>a is b比较a和b的地址(id),返回bool值,注意a和b指向<b>可变还是不可变类型时的区别</b></td></tr></table><p><strong><font color="purple">a、假如比较的两个变量,指向的都是不可变的类型(str, tuple等),那么is,is not 和 ==,!= 是完全等价的。</font></strong></p><p><strong><font color="purple">b、假如对比的两个变量,指向的是不可变得类型(list,dict等),则两者是有区别的。</font></strong></p><p>注:非0为True,0为False,空字符串为False,非空为True。</p><p>使用id()函数显示Number变量复制过程中的地址变化</p><figure class="highlight python"><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></pre></td><td class="code"><pre><span class="line"><span class="meta">>>> </span>x=<span class="number">1</span></span><br><span class="line"><span class="meta">>>> </span>y=x<span class="comment">#此处仅仅是引用的赋值</span></span><br><span class="line"><span class="meta">>>> </span>id(x)</span><br><span class="line"><span class="number">140732488180368</span></span><br><span class="line"><span class="meta">>>> </span>id(y)</span><br><span class="line"><span class="number">140732488180368</span></span><br><span class="line"><span class="meta">>>> </span>y=<span class="number">100</span></span><br><span class="line"><span class="meta">>>> </span>id(y)</span><br><span class="line"><span class="number">140732488183536</span></span><br><span class="line">>>></span><br></pre></td></tr></table></figure><p>可见,在为y重新赋值100后,重新建立了一个不同对象并赋值给y。</p><figure class="highlight python"><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></pre></td><td class="code"><pre><span class="line"><span class="meta">>>> </span>x=<span class="number">1</span></span><br><span class="line"><span class="meta">>>> </span>y=<span class="number">1</span></span><br><span class="line"><span class="meta">>>> </span>id(x)</span><br><span class="line"><span class="number">140732490277520</span></span><br><span class="line"><span class="meta">>>> </span>id(y)</span><br><span class="line"><span class="number">140732490277520</span></span><br><span class="line">>>><span class="comment">#发现x和y地址相同</span></span><br></pre></td></tr></table></figure><p><strong>以上可以看出:不可变类型的赋值特点。可变类型和不可变类型在赋值上的区别:可变类型给引用,而不可变类型直接拷贝一份(注意类似Java中Integer常量池)</strong></p><font color="red" style="font-weight:bold">参照一下java的常量池概念 比如 在 -128 127之间的数字 则所有引用都指向常量地址,所以这个范围内的 integer对象 都可以是相等的,但是超过了常量池范围 即使是相同的值也算是不同的地址, 我想python 也算如此,下面代码证明</font><figure class="highlight python"><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></pre></td><td class="code"><pre><span class="line"><span class="meta">>>> </span>a = <span class="number">222222</span>; </span><br><span class="line"><span class="meta">>>> </span>b = <span class="number">222222</span>; </span><br><span class="line"><span class="meta">>>> </span>id(a); </span><br><span class="line"><span class="number">140257959922784</span> </span><br><span class="line"><span class="meta">>>> </span>id(b) </span><br><span class="line"><span class="number">140257959922832</span> </span><br><span class="line"><span class="meta">>>> </span>a <span class="keyword">is</span> b <span class="literal">False</span> </span><br><span class="line">>>></span><br></pre></td></tr></table></figure><p>注意:</p><p>对于<strong>不可变</strong>数据类型,在函数调用并传参的时候,一样是将引用传送过去,在对参数进行赋值的时候会进行检查(赋给它的值是否和实参的值相等,若相等,那么就不重新创建对象,否则在内存中新建一个不可变的对象,并重新令形参去指向这个对象,所以并不会对不可变实参进行更改),而对于<strong>可变</strong>数据类型,也是传送引用,但是由于它可变,所以在为其重新赋值的时候,会对实参的值造成影响。</p>]]></content>
<summary type="html">
<h3 id="common-sense"><a href="#common-sense" class="headerlink" title="common sense"></a>common sense</h3><p>python通过缩进来区分代码块,而不是大括号</p>
<h
</summary>
<category term="python3" scheme="https://yys123456.github.io/categories/python3/"/>
<category term="1" scheme="https://yys123456.github.io/tags/1/"/>
</entry>
<entry>
<title>求幂集</title>
<link href="https://yys123456.github.io/2019/09/02/%E6%B1%82%E5%B9%82%E9%9B%86/"/>
<id>https://yys123456.github.io/2019/09/02/求幂集/</id>
<published>2019-09-02T08:40:00.000Z</published>
<updated>2019-09-06T11:50:14.395Z</updated>
<content type="html"><![CDATA[<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="meta-keyword">include</span> <span class="meta-string"><iostream> </span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><string.h> </span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="keyword">int</span> * t;</span><br><span class="line"><span class="keyword">int</span> f[<span class="number">100</span>];</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">dfs</span><span class="params">(<span class="keyword">int</span> * a, <span class="keyword">int</span> n, <span class="keyword">int</span> k, <span class="keyword">int</span> s, <span class="keyword">int</span> flag)</span> </span>{</span><br><span class="line"> <span class="keyword">if</span> (k == <span class="number">0</span>) {</span><br><span class="line"> <span class="built_in">cout</span> << <span class="string">"空集"</span> << <span class="built_in">endl</span>;</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> (s == k) {</span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i < s; i++) <span class="built_in">cout</span> << t[i] << <span class="string">' '</span>;</span><br><span class="line"> <span class="built_in">cout</span> << <span class="built_in">endl</span>;</span><br><span class="line"> <span class="comment">//</span></span><br><span class="line"> } <span class="keyword">else</span> {</span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">int</span> i = flag; i < n; i++) {</span><br><span class="line"> <span class="keyword">if</span> (!f[a[i]]) {</span><br><span class="line"> t[s] = a[i];</span><br><span class="line"> f[a[i]] = <span class="number">1</span>;</span><br><span class="line"> dfs(a, n, k, s + <span class="number">1</span>, <span class="number">0</span>);</span><br><span class="line"> f[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><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>{</span><br><span class="line"> <span class="keyword">int</span> n;</span><br><span class="line"> <span class="built_in">cin</span> >> n;</span><br><span class="line"> <span class="keyword">int</span> * a = <span class="keyword">new</span> <span class="keyword">int</span>[n];</span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i < n; i++) {</span><br><span class="line"> <span class="built_in">cin</span> >> 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="keyword">int</span> i = <span class="number">0</span>; i <= n; i++) {</span><br><span class="line"> <span class="built_in">memset</span>(f, <span class="number">0</span>, <span class="number">100</span>);</span><br><span class="line"> <span class="keyword">if</span> (!i) t = <span class="keyword">new</span> <span class="keyword">int</span>[i];</span><br><span class="line"> dfs(a, n, i, <span class="number">0</span>, <span class="number">0</span>);</span><br><span class="line"> <span class="keyword">if</span> (!i) <span class="keyword">delete</span>[] t;</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="
</summary>
<category term="算法" scheme="https://yys123456.github.io/categories/%E7%AE%97%E6%B3%95/"/>
<category term="求幂集" scheme="https://yys123456.github.io/tags/%E6%B1%82%E5%B9%82%E9%9B%86/"/>
</entry>
<entry>
<title>leetcode 两数相加</title>
<link href="https://yys123456.github.io/2019/09/01/leetcode%20%E4%B8%A4%E6%95%B0%E7%9B%B8%E5%8A%A0/"/>
<id>https://yys123456.github.io/2019/09/01/leetcode 两数相加/</id>
<published>2019-09-01T03:10:23.000Z</published>
<updated>2019-09-01T13:18:18.525Z</updated>
<content type="html"><![CDATA[<h3 id="两数相加"><a href="#两数相加" class="headerlink" title="两数相加"></a>两数相加</h3><blockquote><p>给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。</p><p>如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。</p><p>您可以假设除了数字 0 之外,这两个数都不会以 0 开头。</p><p>示例:</p><p>输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)<br>输出:7 -> 0 -> 8<br>原因:342 + 465 = 807</p></blockquote><h3 id="读题"><a href="#读题" class="headerlink" title="读题"></a>读题</h3><p>本题的要求是接收两个链表,分别存放两个数字的每一位(从低到高),然后按照竖式相加的运算法则,将两数相加并将结果返回一个新的链表(也按照从低到高存储)。</p><h3 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h3><p>本题类似于大整数的相加,只不过将存储的数据结构从整型数组改成了链表,所以不能按照数组存储那样让加法循环上限依照与长度长的那个整数,而是依照于两者之间短的那一个,并且出来后的进位若不为零,则需要继续创建结点并赋值,直到进位为0。</p><h3 id="算法"><a href="#算法" class="headerlink" title="算法"></a>算法</h3><ol><li>读入两个无头结点的单链表$L1,L2$(保存两个整数);</li><li>创建进位变量x=0,中间结果变量t;</li><li>创建指向计算结果链表的头结点$L3$;</li><li>判断$L1,L2$是否都不为空,若满足转到5,否则转到7;</li><li>将$L1,L2$所指向的结点的值和x相加并赋值给t,再创建一个值为t%10的LIstNode结点,接到$L3$的后面;</li><li>x=t/10(更新进位)$L1,L2$向后移,转到4;</li><li>判断$L1,L2$中哪一个不为空,携带进位x,计算后续位数的值(期间仍然需要创建ListNode),直到$L1或L2$为空。</li><li>最后需要判断x(进位)是否为0,若不为零,则使用x继续计算后续位数(期间仍然需要创建ListNode),直到x为0。</li></ol><h3 id="java实现"><a href="#java实现" class="headerlink" title="java实现"></a>java实现</h3><h4 id="建立无头结点链表-加法实现-输出显示链表"><a href="#建立无头结点链表-加法实现-输出显示链表" class="headerlink" title="建立无头结点链表+加法实现+输出显示链表"></a>建立无头结点链表+加法实现+输出显示链表</h4><figure class="highlight java"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> java.util.*;</span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Main</span></span>{</span><br><span class="line"> <span class="function"><span class="keyword">static</span> ListNode <span class="title">generate</span><span class="params">(<span class="keyword">int</span> n,Scanner scn)</span></span>{</span><br><span class="line"> ListNode p,r,l=<span class="keyword">null</span>;</span><br><span class="line"> p=<span class="keyword">null</span>;</span><br><span class="line"> <span class="keyword">if</span>(n>=<span class="number">1</span>){</span><br><span class="line"> l=<span class="keyword">new</span> ListNode(scn.nextInt());</span><br><span class="line"> p=l;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<n;i++){</span><br><span class="line"> r=<span class="keyword">new</span> ListNode(scn.nextInt());</span><br><span class="line"> p.next=r;</span><br><span class="line"> p=r;</span><br><span class="line"> }</span><br><span class="line"> p.next=<span class="keyword">null</span>;</span><br><span class="line"> <span class="keyword">return</span> l;</span><br><span class="line"> }</span><br><span class="line"> <span class="function"><span class="keyword">static</span> ListNode <span class="title">add</span><span class="params">(ListNode l1,ListNode l2)</span></span>{</span><br><span class="line"> ListNode p,q;</span><br><span class="line"> ListNode l3=<span class="keyword">new</span> ListNode(<span class="number">0</span>);<span class="comment">//头结点</span></span><br><span class="line"> p=l3;</span><br><span class="line"> <span class="keyword">int</span> x=<span class="number">0</span>;<span class="comment">//进位</span></span><br><span class="line"> <span class="keyword">int</span> t;</span><br><span class="line"> <span class="keyword">while</span>(l1!=<span class="keyword">null</span>&&l2!=<span class="keyword">null</span>){</span><br><span class="line"> t=l1.val+l2.val+x;</span><br><span class="line"> q=<span class="keyword">new</span> ListNode(t%<span class="number">10</span>);</span><br><span class="line"> p.next=q;</span><br><span class="line"> p=q;</span><br><span class="line"> x=t/<span class="number">10</span>;</span><br><span class="line"> l1=l1.next;</span><br><span class="line"> l2=l2.next;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(l1!=<span class="keyword">null</span>){</span><br><span class="line"> t=l1.val+x;</span><br><span class="line"> q=<span class="keyword">new</span> ListNode(t%<span class="number">10</span>);</span><br><span class="line"> p.next=q;</span><br><span class="line"> p=q;</span><br><span class="line"> x=t/<span class="number">10</span>;</span><br><span class="line"> l1=l1.next;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(l2!=<span class="keyword">null</span>){</span><br><span class="line"> t=l2.val+x;</span><br><span class="line"> q=<span class="keyword">new</span> ListNode(t%<span class="number">10</span>);</span><br><span class="line"> p.next=q;</span><br><span class="line"> p=q;</span><br><span class="line"> x=t/<span class="number">10</span>;</span><br><span class="line"> l2=l2.next;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(x!=<span class="number">0</span>){</span><br><span class="line"> q=<span class="keyword">new</span> ListNode(x%<span class="number">10</span>);</span><br><span class="line"> p.next=q;</span><br><span class="line"> p=q;</span><br><span class="line"> x/=<span class="number">10</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> l3.next;</span><br><span class="line"> }</span><br><span class="line"> <span class="function"><span class="keyword">static</span> <span class="keyword">void</span> <span class="title">show</span><span class="params">(ListNode l)</span></span>{</span><br><span class="line"> <span class="keyword">while</span>(l!=<span class="keyword">null</span>){</span><br><span class="line"> System.out.println(l.val);</span><br><span class="line"> l=l.next;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span></span>{</span><br><span class="line"> ListNode l1=<span class="keyword">null</span>,l2=<span class="keyword">null</span>,l3=<span class="keyword">null</span>;</span><br><span class="line"> Scanner scn=<span class="keyword">new</span> Scanner(System.in);</span><br><span class="line"> l1=generate(scn.nextInt(),scn);</span><br><span class="line"> l2=generate(scn.nextInt(),scn);</span><br><span class="line"> l3=add(l1,l2);</span><br><span class="line"> show(l3);</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">ListNode</span></span>{</span><br><span class="line"> <span class="keyword">int</span> val;</span><br><span class="line"> ListNode next;</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="title">ListNode</span><span class="params">(<span class="keyword">int</span> x)</span></span>{val=x;}</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h4 id="solution类"><a href="#solution类" class="headerlink" title="solution类"></a>solution类</h4><figure class="highlight java"><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></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Solution</span> </span>{</span><br><span class="line"> <span class="function"><span class="keyword">public</span> ListNode <span class="title">addTwoNumbers</span><span class="params">(ListNode l1, ListNode l2)</span> </span>{</span><br><span class="line"> ListNode p,q;</span><br><span class="line"> ListNode l3=<span class="keyword">new</span> ListNode(<span class="number">0</span>);<span class="comment">//头结点</span></span><br><span class="line"> p=l3;</span><br><span class="line"> <span class="keyword">int</span> x=<span class="number">0</span>;<span class="comment">//进位</span></span><br><span class="line"> <span class="keyword">int</span> t;</span><br><span class="line"> <span class="keyword">while</span>(l1!=<span class="keyword">null</span>&&l2!=<span class="keyword">null</span>){</span><br><span class="line"> t=l1.val+l2.val+x;</span><br><span class="line"> q=<span class="keyword">new</span> ListNode(t%<span class="number">10</span>);</span><br><span class="line"> p.next=q;</span><br><span class="line"> p=q;</span><br><span class="line"> x=t/<span class="number">10</span>;</span><br><span class="line"> l1=l1.next;</span><br><span class="line"> l2=l2.next;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(l1!=<span class="keyword">null</span>){</span><br><span class="line"> t=l1.val+x;</span><br><span class="line"> q=<span class="keyword">new</span> ListNode(t%<span class="number">10</span>);</span><br><span class="line"> p.next=q;</span><br><span class="line"> p=q;</span><br><span class="line"> x=t/<span class="number">10</span>;</span><br><span class="line"> l1=l1.next;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(l2!=<span class="keyword">null</span>){</span><br><span class="line"> t=l2.val+x;</span><br><span class="line"> q=<span class="keyword">new</span> ListNode(t%<span class="number">10</span>);</span><br><span class="line"> p.next=q;</span><br><span class="line"> p=q;</span><br><span class="line"> x=t/<span class="number">10</span>;</span><br><span class="line"> l2=l2.next;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">while</span>(x!=<span class="number">0</span>){</span><br><span class="line"> q=<span class="keyword">new</span> ListNode(x%<span class="number">10</span>);</span><br><span class="line"> p.next=q;</span><br><span class="line"> p=q;</span><br><span class="line"> x/=<span class="number">10</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> l3.next;</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<h3 id="两数相加"><a href="#两数相加" class="headerlink" title="两数相加"></a>两数相加</h3><blockquote>
<p>给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且
</summary>
<category term="leetcode" scheme="https://yys123456.github.io/categories/leetcode/"/>
<category term="leetcode 两数相加" scheme="https://yys123456.github.io/tags/leetcode-%E4%B8%A4%E6%95%B0%E7%9B%B8%E5%8A%A0/"/>
</entry>
<entry>
<title>1079 延迟的回文数</title>
<link href="https://yys123456.github.io/2019/08/25/1079%20%E5%BB%B6%E8%BF%9F%E7%9A%84%E5%9B%9E%E6%96%87%E6%95%B0/"/>
<id>https://yys123456.github.io/2019/08/25/1079 延迟的回文数/</id>
<published>2019-08-25T13:22:14.000Z</published>
<updated>2019-09-01T07:55:50.194Z</updated>
<content type="html"><![CDATA[<h3 id="1079-延迟的回文数-20-分"><a href="#1079-延迟的回文数-20-分" class="headerlink" title="1079 延迟的回文数 (20 分)"></a>1079 延迟的回文数 (20 分)</h3><p>给定一个 $k$ 位的正整数 N,写成$a_i-a_k$的形式,其中对所有 i 有 $0\leq{a_i}\lt{10}$且 $a_k\gt{0}$。N被称为一个<b>回文数</b>,当且仅当对所有 i 有 $a_i = a_{k-i}$。零也被定义为一个回文数。</p><p>非回文数也可以通过一系列操作变出回文数。首先将该数字逆转,再将逆转数与该数相加,如果和还不是一个回文数,就重复这个逆转再相加的操作,直到一个回文数出现。如果一个非回文数可以变出回文数,就称这个数为<strong>延迟的回文数</strong>。(定义翻译自 <a href="https://en.wikipedia.org/wiki/Palindromic_number" target="_blank" rel="noopener">https://en.wikipedia.org/wiki/Palindromic_number</a> )</p><p>给定任意一个正整数,本题要求你找到其变出的那个回文数。</p><h3 id="输入格式:"><a href="#输入格式:" class="headerlink" title="输入格式:"></a>输入格式:</h3><p>输入在一行中给出一个不超过1000位的正整数。</p><h3 id="输出格式:"><a href="#输出格式:" class="headerlink" title="输出格式:"></a>输出格式:</h3><p>对给定的整数,一行一行输出其变出回文数的过程。每行格式如下</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">A + B = C</span><br></pre></td></tr></table></figure><p>其中 <code>A</code> 是原始的数字,<code>B</code> 是 <code>A</code> 的逆转数,<code>C</code> 是它们的和。<code>A</code> 从输入的整数开始。重复操作直到 <code>C</code> 在 10 步以内变成回文数,这时在一行中输出 <code>C is a palindromic number.</code>;或者如果 10 步都没能得到回文数,最后就在一行中输出 <code>Not found in 10 iterations.</code>。</p><h3 id="输入样例-1:"><a href="#输入样例-1:" class="headerlink" title="输入样例 1:"></a>输入样例 1:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">97152</span><br></pre></td></tr></table></figure><h3 id="输出样例-1:"><a href="#输出样例-1:" class="headerlink" title="输出样例 1:"></a>输出样例 1:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">97152 + 25179 = 122331</span><br><span class="line">122331 + 133221 = 255552</span><br><span class="line">255552 is a palindromic number.</span><br></pre></td></tr></table></figure><h3 id="输入样例-2:"><a href="#输入样例-2:" class="headerlink" title="输入样例 2:"></a>输入样例 2:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">196</span><br></pre></td></tr></table></figure><h3 id="输出样例-2:"><a href="#输出样例-2:" class="headerlink" title="输出样例 2:"></a>输出样例 2:</h3><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">196 + 691 = 887</span><br><span class="line">887 + 788 = 1675</span><br><span class="line">1675 + 5761 = 7436</span><br><span class="line">7436 + 6347 = 13783</span><br><span class="line">13783 + 38731 = 52514</span><br><span class="line">52514 + 41525 = 94039</span><br><span class="line">94039 + 93049 = 187088</span><br><span class="line">187088 + 880781 = 1067869</span><br><span class="line">1067869 + 9687601 = 10755470</span><br><span class="line">10755470 + 07455701 = 18211171</span><br><span class="line">Not found in 10 iterations.</span><br></pre></td></tr></table></figure><h3 id="读题"><a href="#读题" class="headerlink" title="读题"></a>读题</h3><p>本题要求输入一个数字,并通过<strong>规定的计算方法</strong>来输出它能够<strong>变出(10步以内)</strong>的那个回文数。</p><p>对于一个数,它可能一开始就是回文数,也有可能是延迟的回文数,也可能不是延迟的回文数,在本题中,要求对于给定的一个正整数,要求输出它通过给定的算法的计算而计算出的那一个回文数,并要求计算次数不超过10次,若在10次以内得到了一个回文数,那么就输出规定的内容,否则输出10次以内没有找到。</p><h3 id="算法"><a href="#算法" class="headerlink" title="算法"></a>算法</h3><ol><li>判断输入的数字S是否是回文数?输出S是一个回文数:转到2;</li><li>设置计数器k=1,判断S是否<strong>不是</strong>回文数(第一次进入循环时一定不是回文数)并且满足k≤10,若满足转到3否则转到4;</li><li>将逆置的S赋值给P,计算S和P两个大整数的加和并输出相应的加法表达式语句,然后将和赋值给S,再令k自增1,转到2;</li><li>判断k是否大于10,若k>10则表示按照算法计算了10次,都没有找到结果,那么输出没有找到,否则输出最终的S是一个回文数。</li></ol><h3 id="C-代码"><a href="#C-代码" class="headerlink" title="C++代码"></a>C++代码</h3><h4 id="初稿"><a href="#初稿" class="headerlink" title="初稿"></a>初稿</h4><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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><bits/stdc++.h></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="built_in">string</span> <span class="title">jia</span><span class="params">(<span class="built_in">string</span>&a,<span class="built_in">string</span>&b)</span></span>{</span><br><span class="line"><span class="keyword">int</span> a1[<span class="number">2000</span>]={<span class="number">0</span>};</span><br><span class="line"><span class="keyword">int</span> b1[<span class="number">2000</span>]={<span class="number">0</span>};</span><br><span class="line"><span class="keyword">int</span> c1[<span class="number">2000</span>]={<span class="number">0</span>};</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=a.length()<span class="number">-1</span>;i>=<span class="number">0</span>;i--){</span><br><span class="line">a1[a.length()-i<span class="number">-1</span>]=a[i]-<span class="string">'0'</span>;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=b.length()<span class="number">-1</span>;i>=<span class="number">0</span>;i--){</span><br><span class="line">b1[b.length()-i<span class="number">-1</span>]=b[i]-<span class="string">'0'</span>;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">int</span> x=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<a.length()||i<b.length();i++){</span><br><span class="line"><span class="keyword">int</span> t=(a1[i]+b1[i]+x);</span><br><span class="line">c1[i]=t%<span class="number">10</span>;</span><br><span class="line">x=t/<span class="number">10</span>;</span><br><span class="line">} </span><br><span class="line"><span class="keyword">int</span> len=(a.length()>b.length()?a.length():b.length());</span><br><span class="line"><span class="keyword">while</span>(x){</span><br><span class="line">c1[len++]=x%<span class="number">10</span>;</span><br><span class="line">x/=<span class="number">10</span>;</span><br><span class="line">}</span><br><span class="line">len--;</span><br><span class="line"><span class="keyword">while</span>(c1[len]==<span class="number">0</span>&&len><span class="number">0</span>)len--;</span><br><span class="line"><span class="built_in">string</span> x1=<span class="string">""</span>;</span><br><span class="line"><span class="keyword">for</span>(;len>=<span class="number">0</span>;len--){</span><br><span class="line">x1+=c1[len]+<span class="string">'0'</span>;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">return</span> x1;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">bool</span> <span class="title">check</span><span class="params">(<span class="built_in">string</span>&s)</span></span>{</span><br><span class="line"><span class="keyword">int</span> r=s.length()<span class="number">-1</span>;</span><br><span class="line"><span class="keyword">int</span> l=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">while</span>(l<r){</span><br><span class="line"><span class="keyword">if</span>(s[l]==s[r]){</span><br><span class="line">l++;</span><br><span class="line">r--;</span><br><span class="line">}<span class="keyword">else</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="keyword">return</span> <span class="number">1</span>;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="built_in">string</span> <span class="title">reverse</span><span class="params">(<span class="built_in">string</span> s)</span></span>{</span><br><span class="line">reverse(s.begin(),s.end());</span><br><span class="line"><span class="keyword">return</span> s;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"><span class="built_in">string</span> a;</span><br><span class="line"><span class="built_in">cin</span>>>a;</span><br><span class="line"><span class="keyword">if</span>(check(a)){</span><br><span class="line"><span class="built_in">cout</span><<a<<<span class="string">" is a palindromic number."</span><<<span class="built_in">endl</span>;</span><br><span class="line">}<span class="keyword">else</span>{</span><br><span class="line"><span class="keyword">int</span> k=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">do</span>{</span><br><span class="line">k++;</span><br><span class="line"><span class="built_in">string</span> t=reverse(a);</span><br><span class="line"><span class="built_in">string</span> p=jia(a,t);</span><br><span class="line"><span class="built_in">cout</span><<a<<<span class="string">" + "</span><<t<<<span class="string">" = "</span><<p<<<span class="built_in">endl</span>;</span><br><span class="line">a=p;</span><br><span class="line">}<span class="keyword">while</span>(!check(a)&&k<<span class="number">10</span>);</span><br><span class="line"><span class="keyword">if</span>(k==<span class="number">10</span>){</span><br><span class="line"><span class="built_in">cout</span><<<span class="string">"Not found in 10 iterations."</span><<<span class="built_in">endl</span>;</span><br><span class="line">}<span class="keyword">else</span>{</span><br><span class="line"><span class="built_in">cout</span><<a<<<span class="string">" is a palindromic number."</span><<<span class="built_in">endl</span>;</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><h4 id="最终版"><a href="#最终版" class="headerlink" title="最终版"></a>最终版</h4><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="meta-keyword">include</span><span class="meta-string"><bits/stdc++.h></span></span></span><br><span class="line"><span class="comment">//重写延迟回文数 </span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="built_in">string</span> <span class="title">jia</span><span class="params">(<span class="built_in">string</span>&a,<span class="built_in">string</span>&b)</span></span>{</span><br><span class="line"><span class="keyword">int</span> a1[<span class="number">2000</span>]={<span class="number">0</span>};</span><br><span class="line"><span class="keyword">int</span> b1[<span class="number">2000</span>]={<span class="number">0</span>};</span><br><span class="line"><span class="keyword">int</span> c1[<span class="number">2000</span>]={<span class="number">0</span>};</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=a.length()<span class="number">-1</span>;i>=<span class="number">0</span>;i--){</span><br><span class="line">a1[a.length()-i<span class="number">-1</span>]=a[i]-<span class="string">'0'</span>;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=b.length()<span class="number">-1</span>;i>=<span class="number">0</span>;i--){</span><br><span class="line">b1[b.length()-i<span class="number">-1</span>]=b[i]-<span class="string">'0'</span>;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">int</span> x=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<a.length()||i<b.length();i++){</span><br><span class="line"><span class="keyword">int</span> t=(a1[i]+b1[i]+x);</span><br><span class="line">c1[i]=t%<span class="number">10</span>;</span><br><span class="line">x=t/<span class="number">10</span>;</span><br><span class="line">} </span><br><span class="line"><span class="keyword">int</span> len=(a.length()>b.length()?a.length():b.length());</span><br><span class="line"><span class="keyword">while</span>(x){</span><br><span class="line">c1[len++]=x%<span class="number">10</span>;</span><br><span class="line">x/=<span class="number">10</span>;</span><br><span class="line">}</span><br><span class="line">len--;</span><br><span class="line"><span class="keyword">while</span>(c1[len]==<span class="number">0</span>&&len><span class="number">0</span>)len--;</span><br><span class="line"><span class="built_in">string</span> x1=<span class="string">""</span>;</span><br><span class="line"><span class="keyword">for</span>(;len>=<span class="number">0</span>;len--){</span><br><span class="line">x1+=c1[len]+<span class="string">'0'</span>;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">return</span> x1;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">bool</span> <span class="title">check</span><span class="params">(<span class="built_in">string</span>&s)</span></span>{</span><br><span class="line"><span class="keyword">int</span> r=s.length()<span class="number">-1</span>;</span><br><span class="line"><span class="keyword">int</span> l=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">while</span>(l<r){</span><br><span class="line"><span class="keyword">if</span>(s[l]==s[r]){</span><br><span class="line">l++;</span><br><span class="line">r--;</span><br><span class="line">}<span class="keyword">else</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="keyword">return</span> <span class="number">1</span>;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="built_in">string</span> <span class="title">reverse</span><span class="params">(<span class="built_in">string</span> s)</span></span>{</span><br><span class="line">reverse(s.begin(),s.end());</span><br><span class="line"><span class="keyword">return</span> s;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"><span class="built_in">string</span> s;</span><br><span class="line"><span class="built_in">cin</span>>>s;</span><br><span class="line"><span class="keyword">if</span>(check(s)){<span class="comment">//是回文数 </span></span><br><span class="line"><span class="built_in">cout</span><<s<<<span class="string">" is a palindromic number."</span><<<span class="built_in">endl</span>;</span><br><span class="line">}<span class="keyword">else</span>{</span><br><span class="line"><span class="keyword">int</span> k=<span class="number">1</span>;</span><br><span class="line"><span class="keyword">while</span>(!check(s)&&k<=<span class="number">10</span>){</span><br><span class="line"><span class="built_in">string</span> p=reverse(s);</span><br><span class="line"><span class="built_in">string</span> q=jia(s,p); </span><br><span class="line"><span class="built_in">cout</span><<s<<<span class="string">" + "</span><<p<<<span class="string">" = "</span><<q<<<span class="built_in">endl</span>;</span><br><span class="line">s=q;</span><br><span class="line">k++;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">if</span>(k><span class="number">10</span>){</span><br><span class="line"><span class="built_in">cout</span><<<span class="string">"Not found in 10 iterations."</span><<<span class="built_in">endl</span>;</span><br><span class="line">}<span class="keyword">else</span>{</span><br><span class="line"><span class="built_in">cout</span><<s<<<span class="string">" is a palindromic number."</span><<<span class="built_in">endl</span>;</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><h3 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h3><p>本题的知识点</p><ul style="color:red;font-size:20px"><li>大整数加法;</li><li>回文字符串检测;</li><li>字符串的逆转;</li><li>循环的控制条件的设计。</li></ul>]]></content>
<summary type="html">
<h3 id="1079-延迟的回文数-20-分"><a href="#1079-延迟的回文数-20-分" class="headerlink" title="1079 延迟的回文数 (20 分)"></a>1079 延迟的回文数 (20 分)</h3><p>给定一个 $k$ 位
</summary>
<category term="pat" scheme="https://yys123456.github.io/categories/pat/"/>
<category term="1079 延迟的回文数" scheme="https://yys123456.github.io/tags/1079-%E5%BB%B6%E8%BF%9F%E7%9A%84%E5%9B%9E%E6%96%87%E6%95%B0/"/>
</entry>
<entry>
<title>1057 数零壹</title>
<link href="https://yys123456.github.io/2019/08/24/1057%20%E6%95%B0%E9%9B%B6%E5%A3%B9/"/>
<id>https://yys123456.github.io/2019/08/24/1057 数零壹/</id>
<published>2019-08-24T13:31:44.000Z</published>
<updated>2019-08-24T13:32:51.670Z</updated>
<content type="html"><![CDATA[<h3 id="1057-数零壹-20-分"><a href="#1057-数零壹-20-分" class="headerlink" title="1057 数零壹 (20 分)"></a>1057 数零壹 (20 分)</h3><p>给定一串长度不超过 105 的字符串,本题要求你将其中所有英文字母的序号(字母 a-z 对应序号 1-26,不分大小写)相加,得到整数 N,然后再分析一下 N 的二进制表示中有多少 0、多少 1。例如给定字符串 <code>PAT (Basic)</code>,其字母序号之和为:16+1+20+2+1+19+9+3=71,而 71 的二进制是 1000111,即有 3 个 0、4 个 1。</p><h3 id="输入格式:"><a href="#输入格式:" class="headerlink" title="输入格式:"></a>输入格式:</h3><p>输入在一行中给出长度不超过 105、以回车结束的字符串。</p><h3 id="输出格式:"><a href="#输出格式:" class="headerlink" title="输出格式:"></a>输出格式:</h3><p>在一行中先后输出 0 的个数和 1 的个数,其间以空格分隔。</p><h3 id="输入样例:"><a href="#输入样例:" class="headerlink" title="输入样例:"></a>输入样例:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">PAT (Basic)</span><br></pre></td></tr></table></figure><h3 id="输出样例:"><a href="#输出样例:" class="headerlink" title="输出样例:"></a>输出样例:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">3 4</span><br></pre></td></tr></table></figure><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="meta-keyword">include</span><span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">getNum</span><span class="params">(<span class="keyword">char</span> a)</span></span>{</span><br><span class="line"><span class="keyword">if</span>(a><span class="string">'z'</span>)<span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line"><span class="keyword">if</span>(a<<span class="string">'A'</span>)<span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line"><span class="comment">//比A大,比z小 </span></span><br><span class="line"><span class="keyword">if</span>(a><span class="string">'Z'</span>&&a<<span class="string">'a'</span>)<span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line"><span class="keyword">return</span> (a>=<span class="string">'a'</span>?a-<span class="string">'a'</span>:a-<span class="string">'A'</span>)+<span class="number">1</span>;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"><span class="keyword">char</span> c;</span><br><span class="line"><span class="keyword">int</span> sum=<span class="number">0</span>; </span><br><span class="line"><span class="keyword">int</span> k0=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">int</span> k1=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">while</span>((c=getchar())!=<span class="string">'\n'</span>){</span><br><span class="line">sum+=getNum(c);</span><br><span class="line">}</span><br><span class="line"><span class="keyword">while</span>(sum){</span><br><span class="line"><span class="keyword">if</span>(sum%<span class="number">2</span>){</span><br><span class="line">k1++;</span><br><span class="line">}<span class="keyword">else</span>{</span><br><span class="line">k0++;</span><br><span class="line">}</span><br><span class="line">sum/=<span class="number">2</span>;</span><br><span class="line">}</span><br><span class="line"><span class="built_in">cout</span><<k0<<<span class="string">' '</span><<k1<<<span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<h3 id="1057-数零壹-20-分"><a href="#1057-数零壹-20-分" class="headerlink" title="1057 数零壹 (20 分)"></a>1057 数零壹 (20 分)</h3><p>给定一串长度不超过 105 的字符串,本题要
</summary>
<category term="pat" scheme="https://yys123456.github.io/categories/pat/"/>
<category term="1057 数零壹" scheme="https://yys123456.github.io/tags/1057-%E6%95%B0%E9%9B%B6%E5%A3%B9/"/>
</entry>
<entry>
<title>pat 选择题</title>
<link href="https://yys123456.github.io/2019/08/24/1058%20%E9%80%89%E6%8B%A9%E9%A2%98/"/>
<id>https://yys123456.github.io/2019/08/24/1058 选择题/</id>
<published>2019-08-24T13:29:48.000Z</published>
<updated>2019-08-25T06:23:06.131Z</updated>
<content type="html"><![CDATA[<h3 id="1058-选择题-20-分"><a href="#1058-选择题-20-分" class="headerlink" title="1058 选择题 (20 分)"></a>1058 选择题 (20 分)</h3><p>批改多选题是比较麻烦的事情,本题就请你写个程序帮助老师批改多选题,并且指出哪道题错的人最多。</p><h3 id="输入格式:"><a href="#输入格式:" class="headerlink" title="输入格式:"></a>输入格式:</h3><p>输入在第一行给出两个正整数 N(≤ 1000)和 M(≤ 100),分别是学生人数和多选题的个数。随后 M 行,每行顺次给出一道题的满分值(不超过 5 的正整数)、选项个数(不少于 2 且不超过 5 的正整数)、正确选项个数(不超过选项个数的正整数)、所有正确选项。注意每题的选项从小写英文字母 a 开始顺次排列。各项间以 1 个空格分隔。最后 N 行,每行给出一个学生的答题情况,其每题答案格式为 <code>(选中的选项个数 选项1 ……)</code>,按题目顺序给出。注意:题目保证学生的答题情况是合法的,即不存在选中的选项数超过实际选项数的情况。</p><h3 id="输出格式:"><a href="#输出格式:" class="headerlink" title="输出格式:"></a>输出格式:</h3><p>按照输入的顺序给出每个学生的得分,每个分数占一行。注意判题时只有选择全部正确才能得到该题的分数。最后一行输出错得最多的题目的错误次数和编号(题目按照输入的顺序从 1 开始编号)。如果有并列,则按编号递增顺序输出。数字间用空格分隔,行首尾不得有多余空格。如果所有题目都没有人错,则在最后一行输出 <code>Too simple</code>。</p><h3 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h3><p>需要完成通过比较学生所做对应题目的答案与对应题目的标准答案,来得到某一个学生的得分情况,和某一题的错误情况,需要以下材料</p><ol><li>1~n题的标准答案$A_1-A_n$;</li><li>k个学生的做题情况$B_1-B_k$(每一个B中有n项);</li><li>学生成绩表$C_1-C_k$;</li><li>题目错误情况表$D_1-D_n$;</li></ol><p>其中A和B可以通过输入的数据获得,然后通过学生$i$的每一题($1到n$)的做题情况,来得到这个学生的总得分$C_i$,若某一题k有错,则此学生第k题不加分,然后对应的题目的错误人数$D_k$增加一个。</p><font color="red">注:判断某一个学生某一题是否做对的方法</font><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">if 此学生选择的项目数!=此题正确答案个数</span><br><span class="line">做错</span><br><span class="line">else if 这个学生的答案是否和标准答案一样</span><br><span class="line">做对</span><br><span class="line"> else</span><br><span class="line"> 做错</span><br></pre></td></tr></table></figure><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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="keyword">typedef</span> <span class="class"><span class="keyword">struct</span>{</span></span><br><span class="line"><span class="keyword">int</span> p,sws,cs;</span><br><span class="line">}quiz;</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"><span class="keyword">int</span> ss,qs;</span><br><span class="line"><span class="built_in">cin</span>>>ss>>qs;</span><br><span class="line">quiz *kotae=<span class="keyword">new</span> quiz[qs];<span class="comment">//每一个问题的总分,项目数,正确答案数</span></span><br><span class="line"><span class="keyword">bool</span> **key=<span class="keyword">new</span> <span class="keyword">bool</span>*[qs];<span class="comment">//每一个问题的答案表 key[3][0]=true则表示第4题有a这个答案</span></span><br><span class="line"><span class="keyword">int</span> *gs=<span class="keyword">new</span> <span class="keyword">int</span>[qs]();<span class="comment">//每一个问题的做错人数情况</span></span><br><span class="line"><span class="keyword">int</span> *gd=<span class="keyword">new</span> <span class="keyword">int</span>[ss]();<span class="comment">//每一个学生的得分情况</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<qs;i++){</span><br><span class="line">key[i]=<span class="keyword">new</span> <span class="keyword">bool</span>[<span class="number">26</span>]();</span><br><span class="line">}</span><br><span class="line"> <span class="comment">//制作答案表key,和题目情况表kotae</span></span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<qs;i++){</span><br><span class="line"><span class="built_in">cin</span>>>kotae[i].p>>kotae[i].sws>>kotae[i].cs;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> j=<span class="number">0</span>;j<kotae[i].cs;j++){</span><br><span class="line"><span class="keyword">char</span> c;</span><br><span class="line"><span class="built_in">cin</span>>>c;</span><br><span class="line">key[i][c-<span class="string">'a'</span>]=<span class="number">1</span>;</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line">getchar();</span><br><span class="line"><span class="keyword">int</span> max=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">bool</span> ff=<span class="literal">false</span>;</span><br><span class="line"> <span class="comment">//制作学生成绩表gd和错误情况表gs</span></span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<ss;i++){</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> j=<span class="number">0</span>;j<qs;j++){</span><br><span class="line">getchar();</span><br><span class="line"><span class="keyword">int</span> gs1;</span><br><span class="line"><span class="keyword">char</span> c;</span><br><span class="line"><span class="built_in">cin</span>>>gs1;</span><br><span class="line"><span class="keyword">bool</span> flag=<span class="literal">true</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> k=<span class="number">0</span>;k<gs1;k++){</span><br><span class="line"><span class="built_in">cin</span>>>c;</span><br><span class="line">flag=flag&&(key[j][c-<span class="string">'a'</span>]);</span><br><span class="line">}</span><br><span class="line">getchar();</span><br><span class="line">getchar();</span><br><span class="line"><span class="keyword">if</span>(flag&&kotae[j].cs==gs1){<span class="comment">//注意此处的技巧</span></span><br><span class="line">gd[i]+=kotae[j].p;</span><br><span class="line">}<span class="keyword">else</span>{</span><br><span class="line">ff=<span class="number">1</span>;<span class="comment">//标记是否有题目被做错</span></span><br><span class="line">gs[j]++;</span><br><span class="line"><span class="keyword">if</span>(max<gs[j])max=gs[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">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<ss;i++){</span><br><span class="line"><span class="built_in">cout</span><<gd[i]<<<span class="built_in">endl</span>;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">int</span> *a=<span class="keyword">new</span> <span class="keyword">int</span>[qs];</span><br><span class="line"><span class="keyword">int</span> k=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">if</span>(ff){</span><br><span class="line"><span class="built_in">cout</span><<max<<<span class="string">' '</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<qs;i++){</span><br><span class="line"><span class="keyword">if</span>(max==gs[i]){</span><br><span class="line">a[k++]=i+<span class="number">1</span>;</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<k;i++){</span><br><span class="line"><span class="built_in">cout</span><<a[i]<<(i==k<span class="number">-1</span>?<span class="string">""</span>:<span class="string">" "</span>);</span><br><span class="line">}</span><br><span class="line">}<span class="keyword">else</span>{</span><br><span class="line"><span class="built_in">cout</span><<<span class="string">"Too simple"</span><<<span class="built_in">endl</span>;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<qs;i++){</span><br><span class="line"><span class="keyword">delete</span>[] key[i];</span><br><span class="line">}</span><br><span class="line"><span class="keyword">delete</span>[] key;</span><br><span class="line"><span class="keyword">delete</span>[] kotae;</span><br><span class="line"><span class="keyword">delete</span>[] gs;</span><br><span class="line"><span class="keyword">delete</span>[] gd;</span><br><span class="line"><span class="keyword">delete</span>[] a;</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">
<h3 id="1058-选择题-20-分"><a href="#1058-选择题-20-分" class="headerlink" title="1058 选择题 (20 分)"></a>1058 选择题 (20 分)</h3><p>批改多选题是比较麻烦的事情,本题就请你写个程
</summary>
<category term="pat" scheme="https://yys123456.github.io/categories/pat/"/>
<category term="pat 选择题" scheme="https://yys123456.github.io/tags/pat-%E9%80%89%E6%8B%A9%E9%A2%98/"/>
</entry>
<entry>
<title>1055 集体照</title>
<link href="https://yys123456.github.io/2019/08/22/1055%20%E9%9B%86%E4%BD%93%E7%85%A7%20/"/>
<id>https://yys123456.github.io/2019/08/22/1055 集体照 /</id>
<published>2019-08-22T13:55:27.000Z</published>
<updated>2019-08-23T11:46:54.704Z</updated>
<content type="html"><![CDATA[<h3 id="1055-集体照-25-分"><a href="#1055-集体照-25-分" class="headerlink" title="1055 集体照 (25 分)"></a>1055 集体照 (25 分)</h3><p>拍集体照时队形很重要,这里对给定的 <em>N</em> 个人 <em>K</em> 排的队形设计排队规则如下:</p><ul><li>每排人数为 <em>N</em>/<em>K</em>(向下取整),多出来的人全部站在最后一排;</li><li>后排所有人的个子都不比前排任何人矮;</li><li>每排中最高者站中间(中间位置为 <em>m</em>/2+1,其中 <em>m</em> 为该排人数,除法向下取整);</li><li>每排其他人以中间人为轴,按身高非增序,先右后左交替入队站在中间人的两侧(例如5人身高为190、188、186、175、170,则队形为175、188、190、186、170。这里假设你面对拍照者,所以你的左边是中间人的右边);</li><li>若多人身高相同,则按名字的字典序升序(<font color="red">此处应该是题目表述错误,应该为降序</font>)排列。这里保证无重名。</li></ul><p>现给定一组拍照人,请编写程序输出他们的队形。</p><h3 id="输入格式:"><a href="#输入格式:" class="headerlink" title="输入格式:"></a>输入格式:</h3><p>每个输入包含 1 个测试用例。每个测试用例第 1 行给出两个正整数 <em>N</em>(≤104,总人数)和 <em>K</em>(≤10,总排数)。随后 <em>N</em> 行,每行给出一个人的名字(不包含空格、长度不超过 8 个英文字母)和身高([30, 300] 区间内的整数)。</p><h3 id="输出格式:"><a href="#输出格式:" class="headerlink" title="输出格式:"></a>输出格式:</h3><p>输出拍照的队形。即K排人名,其间以空格分隔,行末不得有多余空格。注意:假设你面对拍照者,后排的人输出在上方,前排输出在下方。</p><h3 id="输入样例:"><a href="#输入样例:" class="headerlink" title="输入样例:"></a>输入样例:</h3><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">10 3</span><br><span class="line">Tom 188</span><br><span class="line">Mike 170</span><br><span class="line">Eva 168</span><br><span class="line">Tim 160</span><br><span class="line">Joe 190</span><br><span class="line">Ann 168</span><br><span class="line">Bob 175</span><br><span class="line">Nick 186</span><br><span class="line">Amy 160</span><br><span class="line">John 159</span><br></pre></td></tr></table></figure><h3 id="输出样例:"><a href="#输出样例:" class="headerlink" title="输出样例:"></a>输出样例:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Bob Tom Joe Nick</span><br><span class="line">Ann Mike Eva</span><br><span class="line">Tim Amy John</span><br></pre></td></tr></table></figure><h3 id="读题"><a href="#读题" class="headerlink" title="读题"></a>读题</h3><p>给出N个人,K排,需要让这N个人排队,一共排成K排,每一排排$\lfloor{\frac{N}{K}}\rfloor$个人,<font color="purple">注意排成K排是固定死的,所以当排到K-1排的时候,发现最后不论还剩下多少个人,都要排在最后一排。</font>由此可以提前知道每一排排了多少人(即可以知道第1~k排排了多少人)。</p><p>题目要求后排的所有人的身高都不低于前面人的身高,所以可以知道,需要将原本的人员队伍进行一些处理,从而便于进行每一排人员的放置。</p><p>注意点:题目中的视角是摄像机的视角,而对于每一排的人员排列需要注意视角的转换,观察输出中的队伍排列,Joe的身高为190最高,Tom的身高为188次高,而Tom却放在了Joe的左边,这是因为输出的排队结果是摄像机的视角下的情况,<font color="red"><strong>所以对于每一行的排列需要将题目中的顺序进行反转</strong></font>,再按行输出。</p><h3 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h3><p>将这个问题分成多个问题来看</p><ol><li>得到每一排的人数(或人员序号标记flag);</li><li><strong>处理初始的人员序列;</strong></li><li>按每一排的人数将原序列进行<strong>分割</strong>,分割成序列$a_1,a_2,a_3,…a_k$(序列的分割情况仅仅取决于原序列的长度);</li><li>从$a_k$开始处理和输出,直到$a_1$(因为本题的输出结果是从最后一排向前从上向下逐行输出的);</li><li>结束。</li></ol><p>由于每一排的人员排列要求后排的所有人都不会低于前面,所以可以将原序列按身高进行升序排列(在身高相等的情况下,按照姓名的字典序降序排列),然后再按照序列分割情况,不断地进行</p><pre class="mermaid">graph LRA(按照k...1分割并按照一定的规则取出人员序列vk-v1) -->B(分别对Vk-v1序列进行格式化输出)</pre><p>关于每一个分割的人员取出和排列规则如下(设此分割为$(left,right]$)</p><p>先将right位置的人员(即身高最高的那一个放在所准备的长度为$right-left=m$的序列v中的$\lfloor{\frac{m}{2}\rfloor+1}$位置)</p><p>然后再按照先左后右、左右交替的方法,将人员放入v中。此处需要注意预备序列长度的奇和偶。</p><p><strong>若为奇,直接左右交替放置即可,若为偶,那么由于是先左后右,所以按照奇情况的判断方式,必然会出现右侧提前出界导致左侧的第一个位置未赋值的情况,所以需要对此种情况单独处理,即将$left+1$位置处的人员放置再序列的第一个位置。</strong></p><p>通过以上的操作,得到某一排的人员排列情况,然后对其进行输出。</p><p>最终输出K排人员的排列情况。</p><h3 id="算法实现"><a href="#算法实现" class="headerlink" title="算法实现"></a>算法实现</h3><h4 id="C-代码"><a href="#C-代码" class="headerlink" title="C++代码"></a>C++代码</h4><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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><bits/stdc++.h></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">man</span>{</span></span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"><span class="built_in">string</span> name;</span><br><span class="line"><span class="keyword">int</span> height;</span><br><span class="line">man(<span class="built_in">string</span> a,<span class="keyword">int</span> b){</span><br><span class="line">name=a;</span><br><span class="line">height=b;</span><br><span class="line">}</span><br><span class="line">};</span><br><span class="line"><span class="function"><span class="keyword">bool</span> <span class="title">cmp</span><span class="params">(<span class="keyword">const</span> man&a,<span class="keyword">const</span> man&b)</span></span>{</span><br><span class="line"><span class="keyword">if</span>(a.height<b.height){</span><br><span class="line"><span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line">}<span class="keyword">else</span> <span class="keyword">if</span>(a.height>b.height){</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><br><span class="line"><span class="keyword">if</span>(a.name<b.name){</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><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><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"><span class="keyword">int</span> flags[<span class="number">21</span>]={<span class="number">0</span>};</span><br><span class="line"><span class="keyword">int</span> n;<span class="comment">//人数</span></span><br><span class="line"><span class="keyword">int</span> k;<span class="comment">//排数</span></span><br><span class="line"><span class="built_in">vector</span><man>v;</span><br><span class="line"><span class="built_in">cin</span>>>n>>k;</span><br><span class="line">flags[k]=n<span class="number">-1</span>;<span class="comment">//表示第k个标签在n-1位置</span></span><br><span class="line">flags[<span class="number">0</span>]=<span class="number">-1</span>;<span class="comment">//为了得到第一段的长度</span></span><br><span class="line"><span class="keyword">int</span> b=<span class="number">1</span>;<span class="comment">//只用来为flag赋值 </span></span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<n;i++){</span><br><span class="line"><span class="keyword">if</span>((i+<span class="number">1</span>)%(n/k)==<span class="number">0</span>&&b<k){</span><br><span class="line">flags[b++]=i; </span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="keyword">while</span>(n--){</span><br><span class="line"><span class="built_in">string</span> s;</span><br><span class="line"><span class="keyword">int</span> h;</span><br><span class="line"><span class="built_in">cin</span>>>s>>h;</span><br><span class="line"><span class="function">man <span class="title">m</span><span class="params">(s,h)</span></span>;</span><br><span class="line">v.push_back(m);</span><br><span class="line">} </span><br><span class="line">sort(v.begin(),v.end(),cmp);</span><br><span class="line"><span class="comment">//从后向前输出排队</span></span><br><span class="line"><span class="keyword">int</span> i=k<span class="number">-1</span>;</span><br><span class="line"><span class="keyword">while</span>(i>=<span class="number">0</span>){</span><br><span class="line"><span class="keyword">int</span> p=<span class="number">1</span>;</span><br><span class="line"><span class="keyword">int</span> left=flags[i];</span><br><span class="line"><span class="keyword">int</span> right=flags[i+<span class="number">1</span>];</span><br><span class="line"><span class="built_in">vector</span><<span class="built_in">string</span>>names(right-left);<span class="comment">//存放这一排的排队信息</span></span><br><span class="line"><span class="keyword">int</span> mid=names.size()/<span class="number">2</span>;</span><br><span class="line">names[mid]=v[right].name;<span class="comment">//将最高的放在中间位置 </span></span><br><span class="line">right--; </span><br><span class="line"><span class="keyword">if</span>(names.size()%<span class="number">2</span>==<span class="number">0</span>){</span><br><span class="line"><span class="keyword">while</span>(right>left){</span><br><span class="line"><span class="keyword">if</span>(mid+p>=names.size())<span class="keyword">break</span>;</span><br><span class="line">names[mid-p]=v[right--].name;</span><br><span class="line">names[mid+p]=v[right--].name;</span><br><span class="line">p++;</span><br><span class="line">}</span><br><span class="line">names[<span class="number">0</span>]=v[left+<span class="number">1</span>].name; </span><br><span class="line">}<span class="keyword">else</span>{</span><br><span class="line"><span class="keyword">while</span>(right>left){</span><br><span class="line"><span class="keyword">if</span>(mid+p>=names.size())<span class="keyword">break</span>;</span><br><span class="line">names[mid-p]=v[right--].name;</span><br><span class="line">names[mid+p]=v[right--].name;</span><br><span class="line">p++;</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<names.size();i++){</span><br><span class="line"><span class="built_in">cout</span><<names[i]<<(i==names.size()<span class="number">-1</span>?<span class="string">""</span>:<span class="string">" "</span>);</span><br><span class="line">}</span><br><span class="line"><span class="built_in">cout</span><<<span class="built_in">endl</span>;</span><br><span class="line">i--;</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><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<h3 id="1055-集体照-25-分"><a href="#1055-集体照-25-分" class="headerlink" title="1055 集体照 (25 分)"></a>1055 集体照 (25 分)</h3><p>拍集体照时队形很重要,这里对给定的 <em>
</summary>
<category term="pat" scheme="https://yys123456.github.io/categories/pat/"/>
<category term="1055 集体照" scheme="https://yys123456.github.io/tags/1055-%E9%9B%86%E4%BD%93%E7%85%A7/"/>
</entry>
<entry>
<title>1034 有理数四则运算</title>
<link href="https://yys123456.github.io/2019/08/22/1034%20%E6%9C%89%E7%90%86%E6%95%B0%E5%9B%9B%E5%88%99%E8%BF%90%E7%AE%97/"/>
<id>https://yys123456.github.io/2019/08/22/1034 有理数四则运算/</id>
<published>2019-08-22T04:16:27.000Z</published>
<updated>2019-08-22T11:28:18.784Z</updated>
<content type="html"><![CDATA[<h3 id="1034-有理数四则运算-20-分"><a href="#1034-有理数四则运算-20-分" class="headerlink" title="1034 有理数四则运算 (20 分)"></a>1034 有理数四则运算 (20 分)</h3><p>本题要求编写程序,计算 2 个有理数的和、差、积、商。</p><h3 id="输入格式:"><a href="#输入格式:" class="headerlink" title="输入格式:"></a>输入格式:</h3><p>输入在一行中按照 <code>a1/b1 a2/b2</code> 的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为 0。</p><h3 id="输出格式:"><a href="#输出格式:" class="headerlink" title="输出格式:"></a>输出格式:</h3><p>分别在 4 行中按照 <code>有理数1 运算符 有理数2 = 结果</code> 的格式顺序输出 2 个有理数的和、差、积、商。注意输出的每个有理数必须是该有理数的最简形式 <code>k a/b</code>,其中 <code>k</code> 是整数部分,<code>a/b</code> 是最简分数部分;若为负数,则须加括号;若除法分母为 0,则输出 <code>Inf</code>。题目保证正确的输出中没有超过整型范围的整数。</p><h3 id="输入样例-1:"><a href="#输入样例-1:" class="headerlink" title="输入样例 1:"></a>输入样例 1:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">2/3 -4/2</span><br></pre></td></tr></table></figure><h3 id="输出样例-1:"><a href="#输出样例-1:" class="headerlink" title="输出样例 1:"></a>输出样例 1:</h3><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">2/3 + (-2) = (-1 1/3)</span><br><span class="line">2/3 - (-2) = 2 2/3</span><br><span class="line">2/3 * (-2) = (-1 1/3)</span><br><span class="line">2/3 / (-2) = (-1/3)</span><br></pre></td></tr></table></figure><h3 id="输入样例-2:"><a href="#输入样例-2:" class="headerlink" title="输入样例 2:"></a>输入样例 2:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">5/3 0/6</span><br></pre></td></tr></table></figure><h3 id="输出样例-2:"><a href="#输出样例-2:" class="headerlink" title="输出样例 2:"></a>输出样例 2:</h3><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">1 2/3 + 0 = 1 2/3</span><br><span class="line">1 2/3 - 0 = 1 2/3</span><br><span class="line">1 2/3 * 0 = 0</span><br><span class="line">1 2/3 / 0 = Inf</span><br></pre></td></tr></table></figure><h3 id="读题"><a href="#读题" class="headerlink" title="读题"></a>读题</h3><p>本题的要求是</p><ol><li>按照分数的格式输入两个有理数a/b和c/d;</li><li><p>其中这两个分数形式的有理数保证有具有<strong>以下格式</strong></p><ol><li>a,b,c,d均是整数;</li><li><font color="red">这两个有理数可正可负,但是如果某一个有理数为负数,那么它的符号一定包含在**分子(这里存在坑点)**上;</font></li><li>对于0的输入使用$0/x$的形式;</li><li>输入的时候保证b和d不为0。</li></ol></li><li>要求输出的东西是这两个有理数的<strong>加减乘除</strong>的结果以及过程算式并要求除了$+-\times\div$这几个符号的输出之外,对于分数的输出有以下步骤</li><li><strong>对于输入的有理分数a而言</strong><ol><li>得到输入的有理数分数a;<ol><li>将a放入<strong>处理过程</strong>;</li><li>结束。</li></ol></li></ol></li><li><strong>对于输出一端的分数b而言</strong>(<font color="purple">不一定合法</font>)<ol><li>得到输出的分数b;<ol><li>首先对b进行合法检查和调整,观察b的分子b1和分母b2,若b2==0那么跳转3,若b2<0,转到4;</li><li>直接输出Inf,转到6;</li><li>b1*=-1,b2*=-1;</li><li>此时b已经满足标准的正确分数要求,将b放入<strong>处理过程</strong>。</li><li>结束。</li></ol></li></ol></li><li><p><strong>处理过程的处理</strong></p><ol><li>得到传入的某一个分数a(这个分数一定是满足合法正确性);</li><li>得到a的分子a1和分母a2;</li><li>分析a1和a2,a1可能为正负或0,a2一定是正,所以对a1进行讨论,a1==0?转到4:(a1>0?转到5:转到6);</li><li>直接输出0,转到7;</li><li>此时表示a是一个正分数,需要以标准格式输出,将a放入<strong>子处理过程</strong>,转到7;</li><li>此时表示a是一个负分数,也需要以标准格式输出,将a放入<strong>子处理过程</strong>,转到7;</li><li>结束。</li></ol></li><li><p><strong>子处理过程处理(预备变量stat,函数gcd)</strong></p><ol><li><p>接收到一个分数a,a是正分数或负分数,a为正分数?转到2:转到5;</p></li><li><p>计算stat=a1/a2;(stat是在将a由分数转为带分数过程中保存整数部分的变量);</p></li><li><p>a1-=a2*stat;</p></li><li><p>对于此时的stat、a1和a2进行判断:stat==0?直接输出”gcd(a1/a2)”:(a1==0?”stat”:”stat gcd(a1/a2)”),转到;</p></li><li><p>令a1=-a1;</p></li><li><p>此时a1和a2的状态和正分数的情况一样,先输出左括号<code>(</code>负号 <code>-</code>再进行2、3、4过程(这个时候已经正确输出了除了负号以外的本体分数)再输出<code>)</code>。</p></li></ol></li></ol><h3 id="算法实现"><a href="#算法实现" class="headerlink" title="算法实现"></a>算法实现</h3><h4 id="C-代码"><a href="#C-代码" class="headerlink" title="C++代码"></a>C++代码</h4><h5 id="初稿"><a href="#初稿" class="headerlink" title="初稿"></a>初稿</h5><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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><bits/stdc++.h></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="keyword">typedef</span> <span class="keyword">long</span> L; </span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">show</span><span class="params">(L a,L b)</span></span>{</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">gcd</span><span class="params">(L&,L&)</span></span>;</span><br><span class="line"><span class="keyword">if</span>(b<<span class="number">0</span>){<span class="comment">//处理计算结果分母为负数的情况 </span></span><br><span class="line">b=-b;</span><br><span class="line">a*=<span class="number">-1</span>;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">if</span>(b==<span class="number">0</span>){<span class="comment">//分母为0 </span></span><br><span class="line"><span class="built_in">cout</span><<<span class="string">"Inf"</span>;</span><br><span class="line">}<span class="keyword">else</span>{</span><br><span class="line"><span class="comment">//a带正负号</span></span><br><span class="line"><span class="keyword">if</span>(a==<span class="number">0</span>){</span><br><span class="line"><span class="built_in">cout</span><<<span class="number">0</span>;</span><br><span class="line">}<span class="keyword">else</span>{</span><br><span class="line"><span class="keyword">int</span> stat=<span class="number">0</span>;<span class="comment">//整数部分</span></span><br><span class="line"><span class="keyword">if</span>(a><span class="number">0</span>){</span><br><span class="line">stat=a/b;</span><br><span class="line">a-=b*stat;</span><br><span class="line">gcd(a,b);</span><br><span class="line"><span class="keyword">if</span>(stat!=<span class="number">0</span>){</span><br><span class="line"><span class="built_in">cout</span><<stat;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">if</span>(a!=<span class="number">0</span>){</span><br><span class="line"><span class="built_in">cout</span><<(stat==<span class="number">0</span>?<span class="string">""</span>:<span class="string">" "</span>)<<a<<<span class="string">'/'</span><<b;</span><br><span class="line">}</span><br><span class="line">}<span class="keyword">else</span>{</span><br><span class="line">stat=a/b;</span><br><span class="line">a-=stat*b;</span><br><span class="line"><span class="built_in">cout</span><<<span class="string">'('</span>;</span><br><span class="line"><span class="keyword">if</span>(stat!=<span class="number">0</span>){</span><br><span class="line"><span class="built_in">cout</span><<stat;</span><br><span class="line">a=-a;</span><br><span class="line">}</span><br><span class="line">gcd(a,b);</span><br><span class="line"><span class="keyword">if</span>(a!=<span class="number">0</span>){</span><br><span class="line"><span class="built_in">cout</span><<(stat==<span class="number">0</span>?<span class="string">""</span>:<span class="string">" "</span>)<<a<<<span class="string">'/'</span><<b;</span><br><span class="line">}</span><br><span class="line"><span class="built_in">cout</span><<<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"><span class="function"><span class="keyword">void</span> <span class="title">gcd</span><span class="params">(L&a,L&b)</span></span>{</span><br><span class="line"><span class="keyword">if</span>(a==<span class="number">0</span>||b==<span class="number">0</span>)<span class="keyword">return</span>;</span><br><span class="line">L p=<span class="built_in">abs</span>(a);</span><br><span class="line">L q=<span class="built_in">abs</span>(b);</span><br><span class="line"><span class="keyword">if</span>(p<q){</span><br><span class="line">swap(p,q);</span><br><span class="line">}</span><br><span class="line"><span class="keyword">int</span> r=p%q;</span><br><span class="line"><span class="keyword">while</span>(r){</span><br><span class="line">p=q;</span><br><span class="line">q=r;</span><br><span class="line">r=p%q;</span><br><span class="line">}</span><br><span class="line">a/=q;</span><br><span class="line">b/=q; </span><br><span class="line">} </span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">process</span><span class="params">(L a,L b,L c,L d,<span class="keyword">char</span> t)</span></span>{</span><br><span class="line">show(a,b);<span class="built_in">cout</span><<<span class="string">" "</span><<t<<<span class="string">" "</span>;show(c,d);</span><br><span class="line"><span class="built_in">cout</span><<<span class="string">" = "</span>;</span><br><span class="line"><span class="keyword">switch</span>(t){</span><br><span class="line"><span class="keyword">case</span> <span class="string">'+'</span>:show(a*d+b*c,b*d);<span class="keyword">break</span>;</span><br><span class="line"><span class="keyword">case</span> <span class="string">'-'</span>:show(a*d-c*b,b*d);<span class="keyword">break</span>;</span><br><span class="line"><span class="keyword">case</span> <span class="string">'*'</span>:show(a*c,b*d);<span class="keyword">break</span>;</span><br><span class="line"><span class="keyword">case</span> <span class="string">'/'</span>:show(a*d,b*c);<span class="keyword">break</span>;</span><br><span class="line">}</span><br><span class="line"><span class="built_in">cout</span><<<span class="built_in">endl</span>;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line">L a,b;</span><br><span class="line">L c,d;</span><br><span class="line"><span class="built_in">scanf</span>(<span class="string">"%ld/%ld"</span>,&a,&b);</span><br><span class="line"><span class="built_in">scanf</span>(<span class="string">"%ld/%ld"</span>,&c,&d);</span><br><span class="line">process(a,b,c,d,<span class="string">'+'</span>);</span><br><span class="line">process(a,b,c,d,<span class="string">'-'</span>);</span><br><span class="line">process(a,b,c,d,<span class="string">'*'</span>);</span><br><span class="line">process(a,b,c,d,<span class="string">'/'</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></pre></td></tr></table></figure><h5 id="最终版(分层筛选的思想)"><a href="#最终版(分层筛选的思想)" class="headerlink" title="最终版(分层筛选的思想)"></a>最终版(分层筛选的思想)</h5><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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><bits/stdc++.h></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="keyword">typedef</span> <span class="keyword">long</span> L;</span><br><span class="line"><span class="keyword">typedef</span> <span class="class"><span class="keyword">struct</span> <span class="title">frac</span>{</span></span><br><span class="line">L a,b;</span><br><span class="line">frac(L i=<span class="number">0</span>,L j=<span class="number">0</span>):a(i),b(j){</span><br><span class="line">}</span><br><span class="line">}frac;</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">gcd</span><span class="params">(L&a,L&b)</span></span>{<span class="comment">//求出a和b的最大公约数并进行除运算</span></span><br><span class="line">L p=a;</span><br><span class="line">L q=b;</span><br><span class="line"><span class="keyword">if</span>(p<q)swap(p,q);</span><br><span class="line"><span class="keyword">int</span> r=p%q;</span><br><span class="line"><span class="keyword">while</span>(r){</span><br><span class="line">p=q;</span><br><span class="line">q=r;</span><br><span class="line">r=p%q;</span><br><span class="line">} </span><br><span class="line">a/=q;</span><br><span class="line">b/=q;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">show</span><span class="params">(frac a)</span></span>{<span class="comment">//子处理过程 核心</span></span><br><span class="line"><span class="keyword">int</span> stat=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">if</span>(a.a><span class="number">0</span>){</span><br><span class="line">stat=a.a/a.b;</span><br><span class="line">a.a-=stat*a.b;</span><br><span class="line"><span class="keyword">if</span>(stat!=<span class="number">0</span>){</span><br><span class="line"><span class="built_in">cout</span><<stat;</span><br><span class="line"><span class="keyword">if</span>(a.a!=<span class="number">0</span>){</span><br><span class="line">gcd(a.a,a.b);</span><br><span class="line"><span class="built_in">cout</span><<<span class="string">' '</span><<a.a<<<span class="string">'/'</span><<a.b;</span><br><span class="line">}</span><br><span class="line">}<span class="keyword">else</span>{</span><br><span class="line">gcd(a.a,a.b);</span><br><span class="line"><span class="built_in">cout</span><<a.a<<<span class="string">'/'</span><<a.b;</span><br><span class="line">}</span><br><span class="line">}<span class="keyword">else</span>{</span><br><span class="line">a.a*=<span class="number">-1</span>;</span><br><span class="line"><span class="built_in">cout</span><<<span class="string">'('</span><<<span class="string">'-'</span>;</span><br><span class="line">show(a);</span><br><span class="line"><span class="built_in">cout</span><<<span class="string">')'</span>;</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">Show</span><span class="params">(frac a)</span></span>{<span class="comment">//处理过程 </span></span><br><span class="line"><span class="keyword">if</span>(a.a==<span class="number">0</span>){</span><br><span class="line"><span class="built_in">cout</span><<<span class="string">"0"</span>;</span><br><span class="line">}<span class="keyword">else</span>{</span><br><span class="line">show(a);</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">display</span><span class="params">(frac a)</span></span>{</span><br><span class="line"><span class="keyword">if</span>(a.b==<span class="number">0</span>){</span><br><span class="line"><span class="built_in">cout</span><<<span class="string">"Inf"</span>;</span><br><span class="line">}<span class="keyword">else</span>{</span><br><span class="line"><span class="keyword">if</span>(a.b<<span class="number">0</span>){</span><br><span class="line">a.a*=<span class="number">-1</span>;</span><br><span class="line">a.b*=<span class="number">-1</span>;</span><br><span class="line">}</span><br><span class="line">Show(a);</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">process</span><span class="params">(frac a,frac b,<span class="keyword">char</span> t)</span></span>{</span><br><span class="line">display(a);</span><br><span class="line"><span class="built_in">cout</span><<<span class="string">' '</span><<t<<<span class="string">' '</span>;</span><br><span class="line">display(b);</span><br><span class="line"><span class="built_in">cout</span><<<span class="string">" = "</span>;</span><br><span class="line"><span class="keyword">switch</span>(t){</span><br><span class="line"><span class="keyword">case</span> <span class="string">'+'</span>:display(frac(a.a*b.b+a.b*b.a,a.b*b.b));<span class="keyword">break</span>;</span><br><span class="line"><span class="keyword">case</span> <span class="string">'-'</span>:display(frac(a.a*b.b-a.b*b.a,a.b*b.b));<span class="keyword">break</span>;</span><br><span class="line"><span class="keyword">case</span> <span class="string">'*'</span>:display(frac(a.a*b.a,a.b*b.b));<span class="keyword">break</span>;</span><br><span class="line"><span class="keyword">case</span> <span class="string">'/'</span>:display(frac(a.a*b.b,a.b*b.a));<span class="keyword">break</span>;</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line">frac a,b;</span><br><span class="line"><span class="built_in">scanf</span>(<span class="string">"%ld/%ld%ld/%ld"</span>,&a.a,&a.b,&b.a,&b.b);</span><br><span class="line"><span class="keyword">char</span> t[]={<span class="string">'+'</span>,<span class="string">'-'</span>,<span class="string">'*'</span>,<span class="string">'/'</span>};</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<<span class="number">4</span>;i++){</span><br><span class="line">process(a,b,t[i]);</span><br><span class="line"><span class="built_in">cout</span><<<span class="built_in">endl</span>;</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="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h3><p>本题的基本操作就是对分数的输出,但是对于分数的输出<strong>不可以一概而论</strong>。分数(不管是否合法总共有以下几种)</p><table> <tr> <td>1</td> <td>+/+</td> </tr> <tr> <td>2</td> <td>+/-</td> </tr> <tr> <td>3</td> <td>-/+</td> </tr> <tr> <td>4</td> <td>-/-</td> </tr> <tr> <td>5</td> <td>0/+</td> </tr> <tr> <td>6</td> <td>0/-</td> </tr> <tr> <td>7</td> <td>+/0</td> </tr> <tr> <td>8</td> <td>-/0</td> </tr></table><p>而符合标准的分数类型是1、3两种,所以需要利用<strong>筛选和转换</strong>,将其他所有的种类</p><ol><li>排除在外;</li><li>转换成标准形式。</li></ol><p>对于5、6、7、8这几种需要筛掉(意思就是先对其进行处理,不让其进入下一层处理),而剩下的2、4是对它们进行处理转化成1、3两种形式,然后再进入下一层处理。</p><p><strong>三层处理方式</strong></p><pre class="mermaid">graph LRA[第一层display 过滤了分母为0并处理分母为负] -->B[第二层Show 过滤分子为0] B -->C[第三层show 处理并输出标准格式的分数]</pre>]]></content>
<summary type="html">
<h3 id="1034-有理数四则运算-20-分"><a href="#1034-有理数四则运算-20-分" class="headerlink" title="1034 有理数四则运算 (20 分)"></a>1034 有理数四则运算 (20 分)</h3><p>本题要求编写
</summary>
<category term="pat" scheme="https://yys123456.github.io/categories/pat/"/>
<category term="1034 有理数四则运算" scheme="https://yys123456.github.io/tags/1034-%E6%9C%89%E7%90%86%E6%95%B0%E5%9B%9B%E5%88%99%E8%BF%90%E7%AE%97/"/>
</entry>
<entry>
<title>html学习笔记2</title>
<link href="https://yys123456.github.io/2019/08/21/html%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B02/"/>
<id>https://yys123456.github.io/2019/08/21/html学习笔记2/</id>
<published>2019-08-21T06:01:17.000Z</published>
<updated>2019-08-21T09:13:31.168Z</updated>
<content type="html"><![CDATA[<h3 id="选择器"><a href="#选择器" class="headerlink" title="选择器"></a>选择器</h3><p>以下实现均使用在<code><head></head></code>标签中使用<strong>嵌入式</strong>写法<code><style></style></code>来实现页面样式文件的引入。</p><h4 id="标签选择器"><a href="#标签选择器" class="headerlink" title="标签选择器"></a>标签选择器</h4><p>直接为标签设置样式,设置完后,所有设置过样式的标签都会有对应的样式。</p><p>HTML</p><figure class="highlight html"><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></pre></td><td class="code"><pre><span class="line"><span class="meta"><!DOCTYPE html></span></span><br><span class="line"><span class="tag"><<span class="name">html</span> <span class="attr">lang</span>=<span class="string">"en"</span>></span></span><br><span class="line"><span class="tag"><<span class="name">head</span>></span></span><br><span class="line"><span class="tag"><<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">"UTF-8"</span>></span></span><br><span class="line"><span class="tag"><<span class="name">title</span>></span>标签选择器<span class="tag"></<span class="name">title</span>></span></span><br><span class="line"><span class="tag"><<span class="name">style</span>></span></span><br><span class="line">p{</span><br><span class="line">font-size: 30px;</span><br><span class="line">color: aqua;</span><br><span class="line">}</span><br><span class="line">h1{</span><br><span class="line">color:#ff0000;/*24位深真彩色RGB*/</span><br><span class="line">}</span><br><span class="line"><span class="tag"></<span class="name">style</span>></span></span><br><span class="line"><span class="tag"></<span class="name">head</span>></span></span><br><span class="line"><span class="tag"><<span class="name">body</span>></span></span><br><span class="line"><span class="tag"><<span class="name">h1</span>></span>标题1<span class="tag"></<span class="name">h1</span>></span></span><br><span class="line"><span class="tag"><<span class="name">p</span>></span>段落1<span class="tag"></<span class="name">p</span>></span></span><br><span class="line"><span class="tag"><<span class="name">p</span>></span>段落2<span class="tag"></<span class="name">p</span>></span></span><br><span class="line"><span class="tag"></<span class="name">body</span>></span></span><br><span class="line"><span class="tag"></<span class="name">html</span>></span></span><br></pre></td></tr></table></figure><h4 id="类选择器"><a href="#类选择器" class="headerlink" title="类选择器"></a>类选择器</h4><p>设定几个样式类,然后在相应的想使用样式的地方设定class属性为对应的类名。</p><p><strong>注意:</strong>在<code><style></style></code>中写入的类名之前加’.’。</p><figure class="highlight html"><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></pre></td><td class="code"><pre><span class="line"><span class="meta"><!DOCTYPE html></span></span><br><span class="line"><span class="tag"><<span class="name">html</span> <span class="attr">lang</span>=<span class="string">"en"</span>></span></span><br><span class="line"><span class="tag"><<span class="name">head</span>></span></span><br><span class="line"><span class="tag"><<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">"UTF-8"</span>></span></span><br><span class="line"><span class="tag"><<span class="name">title</span>></span>类选择器<span class="tag"></<span class="name">title</span>></span></span><br><span class="line"><span class="tag"><<span class="name">style</span>></span></span><br><span class="line">.myStyle{/*注意不能忘记'.'*/</span><br><span class="line">color:#0000ff;</span><br><span class="line">}</span><br><span class="line">.fontStyle{</span><br><span class="line">font-size: 100px;</span><br><span class="line">}</span><br><span class="line"><span class="tag"></<span class="name">style</span>></span></span><br><span class="line"><span class="tag"></<span class="name">head</span>></span></span><br><span class="line"><span class="tag"><<span class="name">body</span>></span></span><br><span class="line"><span class="tag"><<span class="name">h1</span>></span>h<span class="tag"></<span class="name">h1</span>></span></span><br><span class="line"><span class="tag"><<span class="name">p</span> <span class="attr">class</span>=<span class="string">"myStyle fontStyle"</span>></span>p1<span class="tag"></<span class="name">p</span>></span><span class="comment"><!--样式可以叠加--></span></span><br><span class="line"><span class="tag"><<span class="name">p</span> <span class="attr">class</span>=<span class="string">"myStyle"</span>></span>p2<span class="tag"></<span class="name">p</span>></span></span><br><span class="line"><span class="tag"></<span class="name">body</span>></span></span><br><span class="line"><span class="tag"></<span class="name">html</span>></span></span><br></pre></td></tr></table></figure><h4 id="属性选择器"><a href="#属性选择器" class="headerlink" title="属性选择器"></a>属性选择器</h4><figure class="highlight html"><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></pre></td><td class="code"><pre><span class="line"><span class="meta"><!DOCTYPE html></span></span><br><span class="line"><span class="tag"><<span class="name">html</span> <span class="attr">lang</span>=<span class="string">"en"</span>></span></span><br><span class="line"><span class="tag"><<span class="name">head</span>></span></span><br><span class="line"><span class="tag"><<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">"UTF-8"</span>></span></span><br><span class="line"><span class="tag"><<span class="name">title</span>></span>属性选择器<span class="tag"></<span class="name">title</span>></span></span><br><span class="line"><span class="tag"><<span class="name">style</span>></span></span><br><span class="line">input[type='text']{/*使用[]得到标签的属性 并规定只有type值为text的input标签的格式才会被设置*/</span><br><span class="line">background-color: #ff0000;</span><br><span class="line">}</span><br><span class="line">/*input[type]{这个是只要input这个标签有type属性就会得到这个属性并设置格式</span><br><span class="line">background-color: #ff0000;</span><br><span class="line">}*/</span><br><span class="line">/*直接拿到title属性并为其设置格式*/</span><br><span class="line">/*[title]{</span><br><span class="line">color:#0000ff;</span><br><span class="line">}*/</span><br><span class="line">a[title][href]{</span><br><span class="line">color:red;</span><br><span class="line">}</span><br><span class="line"><span class="tag"></<span class="name">style</span>></span></span><br><span class="line"><span class="tag"></<span class="name">head</span>></span></span><br><span class="line"><span class="tag"><<span class="name">body</span>></span></span><br><span class="line">用户名:<span class="tag"><<span class="name">input</span> <span class="attr">type</span>=<span class="string">"text"</span> <span class="attr">id</span>=<span class="string">""</span> <span class="attr">value</span>=<span class="string">""</span> /></span><span class="tag"><<span class="name">br</span> /></span></span><br><span class="line">密码:<span class="tag"><<span class="name">input</span> <span class="attr">type</span>=<span class="string">"password"</span>></span><span class="tag"><<span class="name">br</span> /></span></span><br><span class="line"><span class="tag"><<span class="name">input</span> <span class="attr">type</span>=<span class="string">"submit"</span>></span></span><br><span class="line"><span class="tag"><<span class="name">hr</span>></span></span><br><span class="line"><span class="tag"><<span class="name">h1</span> <span class="attr">title</span>=<span class="string">"hello"</span>></span>hello<span class="tag"></<span class="name">h1</span>></span></span><br><span class="line"><span class="tag"><<span class="name">a</span> <span class="attr">title</span>=<span class="string">"baidu"</span> <span class="attr">href</span>=<span class="string">"#"</span>></span>百度<span class="tag"></<span class="name">a</span>></span></span><br><span class="line"><span class="tag"><<span class="name">h1</span>></span>hello<span class="tag"></<span class="name">h1</span>></span></span><br><span class="line"><span class="tag"><<span class="name">a</span> <span class="attr">href</span>=<span class="string">"#"</span>></span>百度<span class="tag"></<span class="name">a</span>></span></span><br><span class="line"><span class="tag"></<span class="name">body</span>></span></span><br><span class="line"><span class="tag"></<span class="name">html</span>></span></span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<h3 id="选择器"><a href="#选择器" class="headerlink" title="选择器"></a>选择器</h3><p>以下实现均使用在<code>&lt;head&gt;&lt;/head&gt;</code>标签中使用<strong>嵌入式</st
</summary>
<category term="html" scheme="https://yys123456.github.io/categories/html/"/>
<category term="html学习笔记2" scheme="https://yys123456.github.io/tags/html%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B02/"/>
</entry>
<entry>
<title>html学习笔记1</title>
<link href="https://yys123456.github.io/2019/08/20/html%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B01/"/>
<id>https://yys123456.github.io/2019/08/20/html学习笔记1/</id>
<published>2019-08-20T09:40:27.000Z</published>
<updated>2019-08-21T06:07:09.706Z</updated>
<content type="html"><![CDATA[<h3 id="HTML"><a href="#HTML" class="headerlink" title="HTML"></a>HTML</h3><h4 id="基本框架"><a href="#基本框架" class="headerlink" title="基本框架"></a>基本框架</h4><figure class="highlight html"><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></pre></td><td class="code"><pre><span class="line"><span class="meta"><!DOCTYPE html></span></span><br><span class="line"><span class="tag"><<span class="name">html</span> <span class="attr">lang</span>=<span class="string">"en"</span>></span><span class="comment"><!--标记网页的类型是英文,但是中文一样可以显示,只不过会让浏览器弹出是否需要翻译的选项--></span></span><br><span class="line"><span class="tag"><<span class="name">head</span>></span></span><br><span class="line"><span class="tag"><<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">"UTF-8"</span>></span><span class="comment"><!--这个是设置的编码为UTF-8的--></span></span><br><span class="line"><span class="tag"><<span class="name">title</span>></span>Document<span class="tag"></<span class="name">title</span>></span></span><br><span class="line"><span class="tag"></<span class="name">head</span>></span></span><br><span class="line"><span class="tag"><<span class="name">body</span>></span></span><br><span class="line"><span class="tag"></<span class="name">body</span>></span></span><br><span class="line"><span class="tag"></<span class="name">html</span>></span></span><br></pre></td></tr></table></figure><h4 id="标签"><a href="#标签" class="headerlink" title="标签"></a>标签</h4><h5 id="标题标签"><a href="#标题标签" class="headerlink" title="标题标签"></a>标题标签</h5><p><code><h1></h1></code></p><h5 id="水平线标签"><a href="#水平线标签" class="headerlink" title="水平线标签"></a>水平线标签</h5><p><code><hr align="center" size="2" width="100%" color=""#33ffff""></code>//注意结束符是没有的</p><p>width为%或px</p><p>size(厚度)为px</p><h5 id="段落标签"><a href="#段落标签" class="headerlink" title="段落标签"></a>段落标签</h5><p><code><p></p></code></p><h5 id="文字格式标签"><a href="#文字格式标签" class="headerlink" title="文字格式标签"></a>文字格式标签</h5><p>使用样式</p><p>HTML</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag"><<span class="name">p</span> <span class="attr">style</span>=<span class="string">"font-family:verdana;font-size:80%;color:green"</span>></span></span><br><span class="line">This is a paragraph with some text in it. This is a paragraph with some text in it. This is a paragraph with some text in it. This is a paragraph with some text in it.</span><br><span class="line"><span class="tag"></<span class="name">p</span>></span></span><br></pre></td></tr></table></figure><p>效果</p><p style="font-family:verdana;font-size:80%;color:green">This is a paragraph with some text in it. This is a paragraph with some text in it. This is a paragraph with some text in it. This is a paragraph with some text in it.</p><p>使用font</p><p><code><font size="5" color="red"></font></code></p><p><code><b></b></code></p><p><code><i></i></code></p><h5 id="列表标签"><a href="#列表标签" class="headerlink" title="列表标签"></a>列表标签</h5><h6 id="有序列表"><a href="#有序列表" class="headerlink" title="有序列表"></a>有序列表</h6><figure class="highlight html"><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></pre></td><td class="code"><pre><span class="line"><span class="tag"><<span class="name">ol</span> <span class="attr">type</span>=<span class="string">"1"</span> <span class="attr">reversed</span> <span class="attr">start</span>=<span class="string">"2"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">li</span>></span>a<span class="tag"></<span class="name">li</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">li</span>></span>b<span class="tag"></<span class="name">li</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">li</span>></span>c<span class="tag"></<span class="name">li</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">li</span>></span>d<span class="tag"></<span class="name">li</span>></span></span><br><span class="line"><span class="tag"></<span class="name">ol</span>></span></span><br></pre></td></tr></table></figure><p>效果</p><ol type="1" reversed start="2"> <li>a</li> <li>b</li> <li>c</li> <li>d</li></ol><h6 id="无序列表"><a href="#无序列表" class="headerlink" title="无序列表"></a>无序列表</h6><figure class="highlight html"><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></pre></td><td class="code"><pre><span class="line"><span class="tag"><<span class="name">ul</span> <span class="attr">type</span>=<span class="string">"square"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">li</span>></span>a<span class="tag"></<span class="name">li</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">li</span>></span>b<span class="tag"></<span class="name">li</span>></span></span><br><span class="line"><span class="tag"></<span class="name">ul</span>></span></span><br></pre></td></tr></table></figure><p>效果</p><ul type="square"> <li>a</li> <li>b</li></ul><h5 id="超链接"><a href="#超链接" class="headerlink" title="超链接"></a>超链接</h5><p>当前页面打开</p><p><code><a href="www.baidu.com" target="_self">百度</a></code></p><p>打开新窗口</p><p><code><a href="www.baidu.com" target="_blank">百度</a></code></p><h5 id="图片"><a href="#图片" class="headerlink" title="图片"></a>图片</h5><p><code><img src="C:\Users\yys\Desktop\课设图\1.bmp" heignt="100px" width="100px"></code>//注意结束符是没有的</p><h5 id="表格"><a href="#表格" class="headerlink" title="表格"></a>表格</h5><figure class="highlight html"><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="comment"><!--一个2X3的表格--></span></span><br><span class="line"><span class="tag"><<span class="name">table</span> <span class="attr">border</span>=<span class="string">"1"</span> <span class="attr">width</span>=<span class="string">"300px"</span> <span class="attr">height</span>=<span class="string">"300px"</span> <span class="attr">cellpadding</span>=<span class="string">"0"</span> <span class="attr">cellspacing</span>=<span class="string">"0"</span> <span class="attr">bgcolor</span>=<span class="string">"red"</span> <span class="attr">align</span>=<span class="string">"center"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">tr</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">td</span>></span>1<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">td</span>></span>2<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">td</span>></span>3<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">tr</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">tr</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">td</span>></span>4<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">td</span>></span>5<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">td</span>></span>6<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">tr</span>></span></span><br><span class="line"><span class="tag"></<span class="name">table</span>></span></span><br></pre></td></tr></table></figure><p><code><tr></tr></code>表示一行,有height,width属性,均可以使用px或%</p><p><code><td></td></code>表示一列,有height,width属性,均可以使用px或%</p><p><code><th></th></code>为表格每一列的标题,有height,width属性,均可以使用px或%</p><p>其中一行中的每一列是当前表格的一个格子。</p><p>对<strong>cellspacing和cellpadding的解释:</strong></p><p>cellspacing:设置表格单元格之间的空间;</p><p>cellpadding:规定单元边沿与其内容之间的空白。</p><p>两者都是表格的属性,并且只能使用px做单位。</p><p><strong>关于表格的操作</strong></p><h6 id="表格单元格的合并"><a href="#表格单元格的合并" class="headerlink" title="表格单元格的合并"></a>表格单元格的合并</h6><p>一定要注意在表格中,单元格的合并时上面的格子合并下面的格子,左面的格子合并右面的格子。</p><p><strong>注意:单元格的合并会导致总格子个数的减小,所以需要进行认为的格子数量的调整。</strong> <strong>并且不论是合并行还是列,均是对<code><td><\td></code>的rowspan或colspan进行修改和操作。</strong></p><p>3X4表格</p><p>HTML</p><figure class="highlight html"><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></pre></td><td class="code"><pre><span class="line"><span class="tag"><<span class="name">table</span>></span></span><br><span class="line"><span class="tag"><<span class="name">tr</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>11<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>12<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>13<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>14<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"></<span class="name">tr</span>></span></span><br><span class="line"><span class="tag"><<span class="name">tr</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>21<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>22<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>23<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>24<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"></<span class="name">tr</span>></span></span><br><span class="line"><span class="tag"><<span class="name">tr</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>31<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>32<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>33<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>34<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"></<span class="name">tr</span>></span></span><br><span class="line"><span class="tag"></<span class="name">table</span>></span></span><br></pre></td></tr></table></figure><p>效果</p><table> <tr> <td>11</td> <td>12</td> <td>13</td> <td>14</td> </tr> <tr> <td>21</td> <td>22</td> <td>23</td> <td>24</td> </tr> <tr> <td>31</td> <td>32</td> <td>33</td> <td>34</td> </tr></table><p>合并11,12单元格,23,24,33,34单元格</p><figure class="highlight html"><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="tag"><<span class="name">table</span>></span></span><br><span class="line"><span class="tag"><<span class="name">tr</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span> <span class="attr">colspan</span>=<span class="string">"2"</span>></span>11<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>13<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>14<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"></<span class="name">tr</span>></span></span><br><span class="line"><span class="tag"><<span class="name">tr</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>21<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>22<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span> <span class="attr">colspan</span>=<span class="string">"2"</span> <span class="attr">rowspan</span>=<span class="string">"2"</span>></span>23<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"></<span class="name">tr</span>></span></span><br><span class="line"><span class="tag"><<span class="name">tr</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>31<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>32<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"></<span class="name">tr</span>></span></span><br><span class="line"><span class="tag"></<span class="name">table</span>></span></span><br></pre></td></tr></table></figure><p>效果</p><table> <tr> <td colspan="2">11</td> <td>13</td> <td>14</td> </tr> <tr> <td>21</td> <td>22</td> <td colspan="2" rowspan="2">23</td> </tr> <tr> <td>31</td> <td>32</td> </tr></table><p>4X4表格 合并了11,21,31,41和12,22,32,42和24,34,44。</p><p>HTML</p><figure class="highlight html"><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"><span class="tag"><<span class="name">table</span>></span></span><br><span class="line"><span class="tag"><<span class="name">tr</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span> <span class="attr">rowspan</span>=<span class="string">"4"</span>></span>11<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span> <span class="attr">colspan</span>=<span class="string">"2"</span> <span class="attr">rowspan</span>=<span class="string">"4"</span>></span>12<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>14<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"></<span class="name">tr</span>></span></span><br><span class="line"><span class="tag"><<span class="name">tr</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span> <span class="attr">rowspan</span>=<span class="string">"3"</span>></span>24<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"></<span class="name">tr</span>></span></span><br><span class="line"><span class="tag"><<span class="name">tr</span>></span></span><br><span class="line"><span class="tag"></<span class="name">tr</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">tr</span>></span></span><br><span class="line"><span class="tag"></<span class="name">tr</span>></span></span><br><span class="line"><span class="tag"></<span class="name">table</span>></span></span><br></pre></td></tr></table></figure><p>效果</p><table> <tr> <td rowspan="4">11</td> <td colspan="2" rowspan="4">12</td> <td>14</td> </tr> <tr> <td rowspan="3">24</td> </tr> <tr> </tr> <tr> </tr></table><h6 id="表格的嵌套"><a href="#表格的嵌套" class="headerlink" title="表格的嵌套"></a>表格的嵌套</h6><p>首先准备一个4X4表格</p><p>然后合并22 23 32 33单元格成为一个大的单元格,再在大单元格里面放入一个1X3的表格</p><p>HTML</p><figure class="highlight html"><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></pre></td><td class="code"><pre><span class="line"><span class="tag"><<span class="name">table</span>></span></span><br><span class="line"><span class="tag"><<span class="name">tr</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>11<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>12<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>13<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>14<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"></<span class="name">tr</span>></span></span><br><span class="line"><span class="tag"><<span class="name">tr</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>21<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span> <span class="attr">colspan</span>=<span class="string">"2"</span> <span class="attr">rowspan</span>=<span class="string">"2"</span>></span>22</span><br><span class="line"> <span class="tag"><<span class="name">table</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">tr</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">td</span>></span>1<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">td</span>></span>2<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">td</span>></span>3<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">tr</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">table</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>24<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"></<span class="name">tr</span>></span></span><br><span class="line"><span class="tag"><<span class="name">tr</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>31<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>34<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"></<span class="name">tr</span>></span></span><br><span class="line"><span class="tag"><<span class="name">tr</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>41<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>42<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>43<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"><<span class="name">td</span>></span>44<span class="tag"></<span class="name">td</span>></span></span><br><span class="line"><span class="tag"></<span class="name">tr</span>></span></span><br><span class="line"><span class="tag"></<span class="name">table</span>></span></span><br></pre></td></tr></table></figure><p>效果</p><table> <tr> <td>11</td> <td>12</td> <td>13</td> <td>14</td> </tr> <tr> <td>21</td> <td colspan="2" rowspan="2">22 <table> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> </table> </td> <td>24</td> </tr> <tr> <td>31</td> <td>34</td> </tr> <tr> <td>41</td> <td>42</td> <td>43</td> <td>44</td> </tr></table><h5 id="frameset标签"><a href="#frameset标签" class="headerlink" title="frameset标签"></a>frameset标签</h5><p>此标签用来划分网页的框架,可以按行,按列或者两者叠加划分</p><p>可选属性<strong>cols、rows</strong>用来分列和分行可以使用px和%</p><figure class="highlight html"><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></pre></td><td class="code"><pre><span class="line"><span class="tag"><<span class="name">frameset</span> <span class="attr">cols</span>=<span class="string">"10%,10%,80%"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">frame</span> <span class="attr">src</span>=<span class="string">"a.html"</span>></span><span class="tag"></<span class="name">frame</span>></span></span><br><span class="line"><span class="tag"><<span class="name">frame</span> <span class="attr">src</span>=<span class="string">"b.html"</span>></span><span class="tag"></<span class="name">frame</span>></span></span><br><span class="line"><span class="tag"><<span class="name">frame</span> <span class="attr">src</span>=<span class="string">"c.html"</span>></span><span class="tag"></<span class="name">frame</span>></span></span><br><span class="line"><span class="tag"></<span class="name">frameset</span>></span></span><br></pre></td></tr></table></figure><figure class="highlight html"><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></pre></td><td class="code"><pre><span class="line"><span class="tag"><<span class="name">frameset</span> <span class="attr">cols</span>=<span class="string">"10%,*"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">frame</span> <span class="attr">src</span>=<span class="string">"a.html"</span>></span><span class="tag"></<span class="name">frame</span>></span></span><br><span class="line"><span class="tag"><<span class="name">frame</span> <span class="attr">src</span>=<span class="string">"b.html"</span>></span><span class="tag"></<span class="name">frame</span>></span></span><br><span class="line"><span class="tag"></<span class="name">frameset</span>></span></span><br></pre></td></tr></table></figure><p>综合使用例子:</p><p>file.html</p><figure class="highlight html"><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></pre></td><td class="code"><pre><span class="line"><span class="tag"><<span class="name">frameset</span> <span class="attr">rows</span>=<span class="string">"30%,*"</span>></span></span><br><span class="line"><span class="tag"><<span class="name">frame</span> <span class="attr">src</span>=<span class="string">"top.html"</span> <span class="attr">noresize</span>></span></span><br><span class="line"><span class="tag"><<span class="name">frameset</span> <span class="attr">cols</span>=<span class="string">"30%,*"</span>></span></span><br><span class="line"><span class="tag"><<span class="name">frame</span> <span class="attr">src</span>=<span class="string">"left.html"</span> <span class="attr">noresize</span>></span></span><br><span class="line"><span class="tag"><<span class="name">frame</span> <span class="attr">src</span>=<span class="string">"right.html"</span> <span class="attr">name</span>=<span class="string">"right"</span>></span></span><br><span class="line"><span class="tag"></<span class="name">frameset</span>></span></span><br><span class="line"><span class="tag"></<span class="name">frameset</span>></span></span><br></pre></td></tr></table></figure><p>top.html</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">top</span><br></pre></td></tr></table></figure><p>left.html</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag"><<span class="name">ul</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">li</span>></span><span class="tag"><<span class="name">a</span> <span class="attr">href</span>=<span class="string">"baidu.html"</span> <span class="attr">target</span>=<span class="string">"right"</span>></span>toright<span class="tag"></<span class="name">a</span>></span><span class="tag"></<span class="name">li</span>></span></span><br><span class="line"><span class="tag"></<span class="name">ul</span>></span></span><br></pre></td></tr></table></figure><p>right.html</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">right</span><br></pre></td></tr></table></figure><p>baidu.html</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">baidu</span><br></pre></td></tr></table></figure><p>最终在file.html上点击toright超链接会在right那一侧的分栏中显示baidu。</p><h5 id="div和span标签"><a href="#div和span标签" class="headerlink" title="div和span标签"></a><code>div和span标签</code></h5><p><strong>div标签是块级标签(另起一行)</strong></p><p>可定义文档中的分区或节(division/section)。</p><p>标签可以把文档分割为独立的、不同的部分。它可以用作严格的组织工具,并且不使用任何格式与其关联。</p><p><strong>span标签非块级标签</strong></p><p>span标签被用来组合文档中的行内元素,从而对行内元素应用样式。</p><p><strong>注释:</strong>span 没有固定的格式表现。当对它应用样式时,它才会产生视觉上的变化。</p><h5 id="补充一些实用的sublime快捷键"><a href="#补充一些实用的sublime快捷键" class="headerlink" title="补充一些实用的sublime快捷键"></a>补充一些实用的sublime快捷键</h5><p>ctrl+/:快速注释</p>]]></content>
<summary type="html">
<h3 id="HTML"><a href="#HTML" class="headerlink" title="HTML"></a>HTML</h3><h4 id="基本框架"><a href="#基本框架" class="headerlink" title="基本框架"></a
</summary>
<category term="html" scheme="https://yys123456.github.io/categories/html/"/>
<category term="html学习笔记1" scheme="https://yys123456.github.io/tags/html%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B01/"/>
</entry>
<entry>
<title>1064 朋友数</title>
<link href="https://yys123456.github.io/2019/08/19/1064%20%E6%9C%8B%E5%8F%8B%E6%95%B0/"/>
<id>https://yys123456.github.io/2019/08/19/1064 朋友数/</id>
<published>2019-08-19T11:57:52.000Z</published>
<updated>2019-08-19T12:08:24.746Z</updated>
<content type="html"><![CDATA[<h3 id="1064-朋友数-20-分"><a href="#1064-朋友数-20-分" class="headerlink" title="1064 朋友数 (20 分)"></a>1064 朋友数 (20 分)</h3><p>如果两个整数各位数字的和是一样的,则被称为是“朋友数”,而那个公共的和就是它们的“朋友证号”。例如 123 和 51 就是朋友数,因为 1+2+3 = 5+1 = 6,而 6 就是它们的朋友证号。给定一些整数,要求你统计一下它们中有多少个不同的朋友证号。</p><h3 id="输入格式:"><a href="#输入格式:" class="headerlink" title="输入格式:"></a>输入格式:</h3><p>输入第一行给出正整数 N。随后一行给出 N 个正整数,数字间以空格分隔。题目保证所有数字小于 $10^4$。</p><h3 id="输出格式:"><a href="#输出格式:" class="headerlink" title="输出格式:"></a>输出格式:</h3><p>首先第一行输出给定数字中不同的朋友证号的个数;随后一行按递增顺序输出这些朋友证号,数字间隔一个空格,且行末不得有多余空格。</p><h3 id="输入样例:"><a href="#输入样例:" class="headerlink" title="输入样例:"></a>输入样例:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">8</span><br><span class="line">123 899 51 998 27 33 36 12</span><br></pre></td></tr></table></figure><h3 id="输出样例:"><a href="#输出样例:" class="headerlink" title="输出样例:"></a>输出样例:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">4</span><br><span class="line">3 6 9 26</span><br></pre></td></tr></table></figure><h3 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h3><p>本题使用C++中set去重和有序的特性,将输入的数据中每一个数字的所有位数之和依次放入集合中,最后输出集合的大小即可。</p><h3 id="C-代码"><a href="#C-代码" class="headerlink" title="C++代码"></a>C++代码</h3><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="meta-keyword">include</span><span class="meta-string"><bits/stdc++.h></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">get</span><span class="params">(<span class="keyword">int</span> s)</span></span>{</span><br><span class="line"><span class="keyword">int</span> sum=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">while</span>(s){</span><br><span class="line">sum+=s%<span class="number">10</span>;</span><br><span class="line">s/=<span class="number">10</span>;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">return</span> sum;</span><br><span class="line">}</span><br><span class="line"><span class="comment">//int flag[37];</span></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"><span class="built_in">set</span><<span class="keyword">int</span>,less<<span class="keyword">int</span>> >s;</span><br><span class="line"><span class="keyword">int</span> N;</span><br><span class="line"><span class="built_in">cin</span>>>N;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<N;i++){</span><br><span class="line"><span class="keyword">int</span> p;</span><br><span class="line"><span class="built_in">cin</span>>>p;</span><br><span class="line"><span class="comment">//flag[get(p)]++;</span></span><br><span class="line">s.insert(get(p));</span><br><span class="line">}</span><br><span class="line"><span class="built_in">set</span><<span class="keyword">int</span>>::iterator it=s.begin();</span><br><span class="line"><span class="built_in">cout</span><<s.size()<<<span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">int</span> i=<span class="number">0</span>; </span><br><span class="line"><span class="keyword">while</span>(it!=s.end()){</span><br><span class="line"><span class="comment">/*if(flag[*it]<2){</span></span><br><span class="line"><span class="comment">s.erase(it++);</span></span><br><span class="line"><span class="comment">}else{</span></span><br><span class="line"><span class="comment">it++;</span></span><br><span class="line"><span class="comment">}*/</span></span><br><span class="line"><span class="keyword">if</span>(i==s.size()<span class="number">-1</span>)</span><br><span class="line"><span class="built_in">cout</span><<*it++;</span><br><span class="line"><span class="keyword">else</span>{</span><br><span class="line"><span class="built_in">cout</span><<*it++<<<span class="string">' '</span>;</span><br><span class="line">}</span><br><span class="line">i++;</span><br><span class="line">}</span><br><span class="line"><span class="built_in">cout</span><<<span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h3 id="注意"><a href="#注意" class="headerlink" title="注意"></a>注意</h3><p>注释部分是我原本的想法,认为只有存在至少两个朋友数,才会有朋友证号,但实际上只要有一个数,那么它就存在一个朋友证号。</p>]]></content>
<summary type="html">
<h3 id="1064-朋友数-20-分"><a href="#1064-朋友数-20-分" class="headerlink" title="1064 朋友数 (20 分)"></a>1064 朋友数 (20 分)</h3><p>如果两个整数各位数字的和是一样的,则被称为是
</summary>
<category term="pat" scheme="https://yys123456.github.io/categories/pat/"/>
<category term="1064" scheme="https://yys123456.github.io/tags/1064/"/>
</entry>
<entry>
<title>1048 数字加密</title>
<link href="https://yys123456.github.io/2019/08/19/1048%20%E6%95%B0%E5%AD%97%E5%8A%A0%E5%AF%86/"/>
<id>https://yys123456.github.io/2019/08/19/1048 数字加密/</id>
<published>2019-08-19T04:38:11.000Z</published>
<updated>2019-08-19T04:40:09.777Z</updated>
<content type="html"><![CDATA[<h3 id="1048-数字加密-20-分"><a href="#1048-数字加密-20-分" class="headerlink" title="1048 数字加密 (20 分)"></a>1048 数字加密 (20 分)</h3><p>本题要求实现一种数字加密方法。首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12;对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10。这里令个位为第 1 位。</p><h3 id="输入格式:"><a href="#输入格式:" class="headerlink" title="输入格式:"></a>输入格式:</h3><p>输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔。</p><h3 id="输出格式:"><a href="#输出格式:" class="headerlink" title="输出格式:"></a>输出格式:</h3><p>在一行中输出加密后的结果。</p><h3 id="输入样例:"><a href="#输入样例:" class="headerlink" title="输入样例:"></a>输入样例:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">1234567 368782971</span><br></pre></td></tr></table></figure><h3 id="输出样例:"><a href="#输出样例:" class="headerlink" title="输出样例:"></a>输出样例:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">3695Q8118</span><br></pre></td></tr></table></figure><h3 id="C-代码"><a href="#C-代码" class="headerlink" title="C++代码"></a>C++代码</h3><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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><bits/stdc++.h></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"><span class="built_in">string</span> a,b;</span><br><span class="line"><span class="built_in">cin</span>>>a>>b;</span><br><span class="line"><span class="keyword">int</span> a1[<span class="number">100</span>]={<span class="number">0</span>},b1[<span class="number">100</span>]={<span class="number">0</span>},c1[<span class="number">100</span>]={<span class="number">0</span>};</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=a.length()<span class="number">-1</span>;i>=<span class="number">0</span>;i--){</span><br><span class="line">a1[a.length()-i<span class="number">-1</span>]=a[i]-<span class="string">'0'</span>;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=b.length()<span class="number">-1</span>;i>=<span class="number">0</span>;i--){</span><br><span class="line">b1[b.length()-i<span class="number">-1</span>]=b[i]-<span class="string">'0'</span>;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">int</span> i;</span><br><span class="line"><span class="keyword">for</span>(i=<span class="number">0</span>;i<a.length()||i<b.length();i++){</span><br><span class="line"><span class="keyword">if</span>((i+<span class="number">1</span>)%<span class="number">2</span>==<span class="number">0</span>){</span><br><span class="line"><span class="keyword">if</span>(b1[i]-a1[i]>=<span class="number">0</span>)</span><br><span class="line">c1[i]=(b1[i]-a1[i]);</span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">c1[i]=(b1[i]-a1[i])+<span class="number">10</span>;</span><br><span class="line">}<span class="keyword">else</span>{</span><br><span class="line">c1[i]=(b1[i]+a1[i])%<span class="number">13</span>;</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">while(i<a.length()){</span></span><br><span class="line"><span class="comment">c1[i]=a1[i];</span></span><br><span class="line"><span class="comment">i++;</span></span><br><span class="line"><span class="comment">}</span></span><br><span class="line"><span class="comment">while(i<b.length()){</span></span><br><span class="line"><span class="comment">c1[i]=b1[i];</span></span><br><span class="line"><span class="comment">i++;</span></span><br><span class="line"><span class="comment">}*/</span></span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> j=i<span class="number">-1</span>;j>=<span class="number">0</span>;j--){</span><br><span class="line"><span class="keyword">char</span> t;</span><br><span class="line"><span class="keyword">switch</span>(c1[j]){</span><br><span class="line"><span class="keyword">case</span> <span class="number">10</span> :t=<span class="string">'J'</span>;<span class="keyword">break</span>;</span><br><span class="line"><span class="keyword">case</span> <span class="number">11</span> :t=<span class="string">'Q'</span>;<span class="keyword">break</span>;</span><br><span class="line"><span class="keyword">case</span> <span class="number">12</span> :t=<span class="string">'K'</span>;<span class="keyword">break</span>;</span><br><span class="line"><span class="keyword">default</span>: t=c1[j]+<span class="string">'0'</span>; </span><br><span class="line">}</span><br><span class="line"><span class="built_in">cout</span><<t;</span><br><span class="line">}</span><br><span class="line"><span class="built_in">cout</span><<<span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<h3 id="1048-数字加密-20-分"><a href="#1048-数字加密-20-分" class="headerlink" title="1048 数字加密 (20 分)"></a>1048 数字加密 (20 分)</h3><p>本题要求实现一种数字加密方法。首先固
</summary>
<category term="pat" scheme="https://yys123456.github.io/categories/pat/"/>
<category term="1048" scheme="https://yys123456.github.io/tags/1048/"/>
</entry>
<entry>
<title>1047 编程团体赛</title>
<link href="https://yys123456.github.io/2019/08/18/1047%20%E7%BC%96%E7%A8%8B%E5%9B%A2%E4%BD%93%E8%B5%9B/"/>
<id>https://yys123456.github.io/2019/08/18/1047 编程团体赛/</id>
<published>2019-08-18T14:34:26.000Z</published>
<updated>2019-08-18T14:36:28.674Z</updated>
<content type="html"><![CDATA[<h3 id="1047-编程团体赛-20-分"><a href="#1047-编程团体赛-20-分" class="headerlink" title="1047 编程团体赛 (20 分)"></a>1047 编程团体赛 (20 分)</h3><p>编程团体赛的规则为:每个参赛队由若干队员组成;所有队员独立比赛;参赛队的成绩为所有队员的成绩和;成绩最高的队获胜。</p><p>现给定所有队员的比赛成绩,请你编写程序找出冠军队。</p><h3 id="输入格式:"><a href="#输入格式:" class="headerlink" title="输入格式:"></a>输入格式:</h3><p>输入第一行给出一个正整数 <em>N</em>(≤104),即所有参赛队员总数。随后 <em>N</em> 行,每行给出一位队员的成绩,格式为:<code>队伍编号-队员编号 成绩</code>,其中<code>队伍编号</code>为 1 到 1000 的正整数,<code>队员编号</code>为 1 到 10 的正整数,<code>成绩</code>为 0 到 100 的整数。</p><h3 id="输出格式:"><a href="#输出格式:" class="headerlink" title="输出格式:"></a>输出格式:</h3><p>在一行中输出冠军队的编号和总成绩,其间以一个空格分隔。注意:题目保证冠军队是唯一的。</p><h3 id="输入样例:"><a href="#输入样例:" class="headerlink" title="输入样例:"></a>输入样例:</h3><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">6</span><br><span class="line">3-10 99</span><br><span class="line">11-5 87</span><br><span class="line">102-1 0</span><br><span class="line">102-3 100</span><br><span class="line">11-9 89</span><br><span class="line">3-2 61</span><br></pre></td></tr></table></figure><h3 id="输出样例:"><a href="#输出样例:" class="headerlink" title="输出样例:"></a>输出样例:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">11 176</span><br></pre></td></tr></table></figure><h3 id="C-实现"><a href="#C-实现" class="headerlink" title="C++实现"></a>C++实现</h3><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="meta">#<span class="meta-keyword">include</span><span class="meta-string"><set></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><vector></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><stdio.h></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="keyword">int</span> team[<span class="number">1001</span>];</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"><span class="keyword">int</span> t,p,g;</span><br><span class="line"><span class="keyword">int</span> n;</span><br><span class="line"><span class="built_in">set</span><<span class="keyword">int</span>>s;</span><br><span class="line"><span class="built_in">vector</span><<span class="keyword">int</span>>v;</span><br><span class="line"><span class="built_in">cin</span>>>n;</span><br><span class="line"><span class="keyword">while</span>(n--){</span><br><span class="line"><span class="built_in">scanf</span>(<span class="string">"%d-%d%d"</span>,&t,&p,&g);</span><br><span class="line">team[t]+=g;</span><br><span class="line">s.insert(t);</span><br><span class="line">}</span><br><span class="line"><span class="built_in">set</span><<span class="keyword">int</span>>::iterator it=s.begin();</span><br><span class="line"><span class="keyword">int</span> max=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">while</span>(it!=s.end()){</span><br><span class="line">v.push_back(*it++);</span><br><span class="line">}</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<v.size();i++){</span><br><span class="line"><span class="keyword">if</span>(team[v[max]]<team[v[i]])max=i;</span><br><span class="line">}</span><br><span class="line"><span class="built_in">cout</span><<v[max]<<<span class="string">' '</span><<team[v[max]]<<<span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<h3 id="1047-编程团体赛-20-分"><a href="#1047-编程团体赛-20-分" class="headerlink" title="1047 编程团体赛 (20 分)"></a>1047 编程团体赛 (20 分)</h3><p>编程团体赛的规则为:每个参赛
</summary>
<category term="pat" scheme="https://yys123456.github.io/categories/pat/"/>
<category term="1047" scheme="https://yys123456.github.io/tags/1047/"/>
</entry>
<entry>
<title>1050 螺旋矩阵</title>
<link href="https://yys123456.github.io/2019/08/18/1050%20%E8%9E%BA%E6%97%8B%E7%9F%A9%E9%98%B5/"/>
<id>https://yys123456.github.io/2019/08/18/1050 螺旋矩阵/</id>
<published>2019-08-18T07:44:53.000Z</published>
<updated>2019-08-18T09:07:10.926Z</updated>
<content type="html"><![CDATA[<h3 id="1050-螺旋矩阵-25-分"><a href="#1050-螺旋矩阵-25-分" class="headerlink" title="1050 螺旋矩阵 (25 分)"></a>1050 螺旋矩阵 (25 分)</h3><p>本题要求将给定的 <em>N</em> 个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为 <em>m</em> 行 <em>n</em> 列,满足条件:<em>m</em>×<em>n</em> 等于 <em>N</em>;<em>m</em>≥<em>n</em>;且 <em>m</em>−<em>n</em> 取所有可能值中的最小值。</p><h3 id="输入格式:"><a href="#输入格式:" class="headerlink" title="输入格式:"></a>输入格式:</h3><p>输入在第 1 行中给出一个正整数 <em>N</em>,第 2 行给出 <em>N</em> 个待填充的正整数。所有数字不超过 104,相邻数字以空格分隔。</p><h3 id="输出格式:"><a href="#输出格式:" class="headerlink" title="输出格式:"></a>输出格式:</h3><p>输出螺旋矩阵。每行 <em>n</em> 个数字,共 <em>m</em> 行。相邻数字以 1 个空格分隔,行末不得有多余空格。</p><h3 id="输入样例:"><a href="#输入样例:" class="headerlink" title="输入样例:"></a>输入样例:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">12</span><br><span class="line">37 76 20 98 76 42 53 95 60 81 58 93</span><br></pre></td></tr></table></figure><h3 id="输出样例:"><a href="#输出样例:" class="headerlink" title="输出样例:"></a>输出样例:</h3><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">98 95 93</span><br><span class="line">42 37 81</span><br><span class="line">53 20 76</span><br><span class="line">58 60 76</span><br></pre></td></tr></table></figure><h3 id="读题"><a href="#读题" class="headerlink" title="读题"></a>读题</h3><p>题目要求将给定序列中的元素以<font color="green"><strong>非递增</strong>,<strong>顺时针</strong>的顺序</font>填充到一个矩阵(二维数组)中。</p><h3 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h3><p>最简单的想法,可以得到这样一个流程</p><ol><li>对给定序列进行排序;</li><li>从前向后遍历排过序的序列;</li><li>顺时针地将每一个元素填充到对应地位置。</li></ol><p>1、2两步都很简单,<font color="red">重点是第3步</font>。需要完成第3步需要思考以下问题</p><ol><li><font color="purple">一个什么样地映射,可以将序列中地位置映射到二维数组中地位置才能达到看起来是顺时针放置地效果。</font></li><li><font color="purple">顺时针放置完一圈之后需要进入内层继续相同的过程</font>。</li></ol><p>从以上两步可以看出顺时针赋值是一个迭代地过程,不断向内层迭代,直到序列中所有值都有属于它的位置。</p><p>下面展示<strong>最外层</strong>的坐标是如何对应的</p><script type="math/tex; mode=display">\\i\ \ \ \ \ \ \ \ index \\0->(0,0)\\1->(0,1)\\2->(0,2)\\...\\n-1->(0,n-1)\\以上n-1\geq{i}\\\ \\n->(1,n-1)\\n+1->(2,n-1)\\...\\n+m-2->(m-1,n-1)\\以上n+m-2\geq{i}\\\ \\n+m-1->(m-1,n-2)\\n+m->(m-1,n-3)\\n+m+1->(m-1,n-4)\\n+m+2->(m-1,n-5)\\...\\n+m+(n-3)->(m-1,n-(3+n-3))\\以上2n+m-3\geq{i}\\\ \\n+m+(n-2)->(m-2,0)\\n+m+(n-1)->(m-3,0)\\n+m+n->(m-4,0)\\...\\n+m+(n+(m-5))->((m-(m-1)),0)\\以上2n+2m-5\geq{i}\\\</script><p><strong>描述</strong></p><p>左侧的i代表放置的是第i元素,右侧的index指的是序列中的第i个元素应当放置在二维数组中的何处。<strong>注意对i的值的分段(分段函数)。</strong></p><p><strong>思想</strong></p><p>把顺时针赋值一圈看作是一个操作A,那么对一个大的二维数组进行顺时针赋值就是<strong>不断地进行A->进入下一层->进行A…的过程(而需要顺时针赋值的圈越来越小)</strong>。</p><p><strong>算法(使用分层的眼光看带一个二维数组,即将每一层都看作一个独立的二维数组,想办法屏蔽它们的不同)</strong></p><ol><li>准备一个分段映射T(一定要具有一般性,而不是仅仅适用于某一层);</li><li>准备一个从大到小排序好的序列S;</li><li>准备一个符合题意的二位数组$A_{m\times{n}}$(注意这个);</li><li>开始核心算法过程,令<strong>step=0</strong>(从0层开始放置,<strong>step的作用是什么?</strong>屏蔽层间差别)</li><li>从前向后遍历S,每次得到S中的一个元素X;</li><li>通过X在S中的序号和T得到X应当放置在$A_{m\times{n}}$的第$step$层二维数组$B_{(m-2step)\times(n-2step)}(step=0,1,2,3…)$中的哪一个位置(v,e),并将其放置于这个位置。</li><li>检查序列是否走到尽头?结束:step+1并转5。</li></ol><h3 id="C-实现"><a href="#C-实现" class="headerlink" title="C++实现"></a>C++实现</h3><p>标注为R的语句就是实现映射的部分。</p><h4 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h4><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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><bits/stdc++.h></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">bool</span> <span class="title">cmp</span><span class="params">(<span class="keyword">int</span> a,<span class="keyword">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 class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"><span class="keyword">int</span> m,n;</span><br><span class="line"><span class="keyword">int</span> N;</span><br><span class="line"><span class="built_in">vector</span><<span class="keyword">int</span>>v;</span><br><span class="line"><span class="built_in">cin</span>>>N;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<N;i++){</span><br><span class="line"><span class="keyword">int</span> t;</span><br><span class="line"><span class="built_in">cin</span>>>t;</span><br><span class="line">v.push_back(t);</span><br><span class="line">}</span><br><span class="line">sort(v.begin(),v.end(),cmp);</span><br><span class="line"><span class="keyword">int</span> temp=<span class="built_in">sqrt</span>(N);</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=temp;i><span class="number">0</span>;i--){</span><br><span class="line"><span class="keyword">if</span>(N%i==<span class="number">0</span>){</span><br><span class="line">n=i;</span><br><span class="line">m=N/n;</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">int</span>**p;</span><br><span class="line">p=<span class="keyword">new</span> <span class="keyword">int</span>*[m];</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<m;i++){</span><br><span class="line">p[i]=<span class="keyword">new</span> <span class="keyword">int</span>[n]();</span><br><span class="line">}</span><br><span class="line"><span class="keyword">int</span> step=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">int</span> m1=m,n1=n;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>,k=<span class="number">0</span>;i<N;k++,i++){</span><br><span class="line"><span class="keyword">if</span>(<span class="number">2</span>*m+<span class="number">2</span>*n<span class="number">-4</span>==<span class="number">0</span>){<span class="comment">//此处处理的是序列只有一个元素的情况,即二维数组为1X1,如果不进行处理 warning处会出现除数为0的错误情况</span></span><br><span class="line">p[<span class="number">0</span>][<span class="number">0</span>]=v[<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 class="comment">//warning!</span></span><br><span class="line"><span class="keyword">int</span> t=k%(<span class="number">2</span>*m+<span class="number">2</span>*n<span class="number">-4</span>);<span class="comment">//R</span></span><br><span class="line"><span class="keyword">if</span>(i!=<span class="number">0</span>&&t==<span class="number">0</span>){<span class="comment">//进入下一层</span></span><br><span class="line">k-=(<span class="number">2</span>*m+<span class="number">2</span>*n<span class="number">-4</span>);<span class="comment">//一定要注意k</span></span><br><span class="line">step++;</span><br><span class="line">m-=<span class="number">2</span>;</span><br><span class="line">n-=<span class="number">2</span>;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">if</span>(t<=n<span class="number">-1</span>){<span class="comment">//R</span></span><br><span class="line">p[step][t+step]=v[i];</span><br><span class="line">}</span><br><span class="line"><span class="keyword">if</span>(t>n<span class="number">-1</span>&&t<=n+m<span class="number">-2</span>){<span class="comment">//R</span></span><br><span class="line">p[t-n+<span class="number">1</span>+step][n<span class="number">-1</span>+step]=v[i];</span><br><span class="line">}</span><br><span class="line"><span class="keyword">if</span>(t>n+m<span class="number">-2</span>&&t<=<span class="number">2</span>*n+m<span class="number">-3</span>){<span class="comment">//R</span></span><br><span class="line">p[m<span class="number">-1</span>+step][n-(t-m-n+<span class="number">3</span>)+step]=v[i];</span><br><span class="line">}</span><br><span class="line"><span class="keyword">if</span>(t>(<span class="number">2</span>*n+m<span class="number">-3</span>)&&t<=(<span class="number">2</span>*m+<span class="number">2</span>*n<span class="number">-5</span>)){<span class="comment">//R</span></span><br><span class="line">p[m-(t-(<span class="number">2</span>*n+m)+<span class="number">4</span>)+step][step]=v[i];</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<m1;i++){</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> j=<span class="number">0</span>;j<n1;j++){</span><br><span class="line"><span class="built_in">cout</span><<p[i][j]<<(j==n1<span class="number">-1</span>?<span class="string">""</span>:<span class="string">" "</span>);</span><br><span class="line">}</span><br><span class="line"><span class="built_in">cout</span><<<span class="built_in">endl</span>;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<m1;i++)</span><br><span class="line"><span class="keyword">delete</span>[] p[i];</span><br><span class="line"><span class="keyword">delete</span>[] p;</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="坑点"><a href="#坑点" class="headerlink" title="坑点"></a>坑点</h4><p>最容易忽视的就是在进入下层出现的错误情况</p><p>从0层进入1层的时候</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></pre></td><td class="code"><pre><span class="line"><span class="keyword">int</span> t=i%(<span class="number">2</span>*m+<span class="number">2</span>*n<span class="number">-4</span>);<span class="comment">//原本的写法</span></span><br><span class="line"><span class="keyword">if</span>(i!=<span class="number">0</span>&&t==<span class="number">0</span>){<span class="comment">//进入下一层</span></span><br><span class="line"> step++;</span><br><span class="line"> m-=<span class="number">2</span>;</span><br><span class="line"> n-=<span class="number">2</span>;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">if</span>(t<=n<span class="number">-1</span>){<span class="comment">//R</span></span><br><span class="line"> p[step][t+step]=v[i];</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>举例如20个元素,得到的数5X4的二维数组</p><p>在进入第二层的时候i正巧等于2<em>m+2</em>n-4,t=0</p><p>然后我让层数加一,维度减一</p><p>将v[i]赋值给p[step][t+step]</p><p>然后i++,即i=2<em>m+2</em>n-3(注意此处的m,n是还没有减小的m和n)</p><p>然后让t=i%(2<em>m+2</em>n-4)(注意此处的m,n是还已经减小的m和n)</p><p>即(2<em>m+2</em>n-3)%(2<em>(m-2)+2</em>(n-2)-4)答案可能不是1,但是如果想要得到正确答案,那么就必须在进行差别的屏蔽</p><p>所以使用辅助变量k,并令t=k%(2<em>m+2</em>n-4),在每一次k=2<em>m+2</em>n-4的时候,说明此时已经开始进入下一层,就进行k-=(2<em>m+2</em>n-4)的操作(即对于一个新的二维数组的最外层的顺时针赋值进行计数)。</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></pre></td><td class="code"><pre><span class="line"><span class="keyword">int</span> t=k%(<span class="number">2</span>*m+<span class="number">2</span>*n<span class="number">-4</span>);<span class="comment">//R</span></span><br><span class="line"><span class="keyword">if</span>(i!=<span class="number">0</span>&&t==<span class="number">0</span>){<span class="comment">//进入下一层</span></span><br><span class="line"> k-=(<span class="number">2</span>*m+<span class="number">2</span>*n<span class="number">-4</span>);<span class="comment">//一定要注意k</span></span><br><span class="line"> step++;</span><br><span class="line"> m-=<span class="number">2</span>;</span><br><span class="line"> n-=<span class="number">2</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<h3 id="1050-螺旋矩阵-25-分"><a href="#1050-螺旋矩阵-25-分" class="headerlink" title="1050 螺旋矩阵 (25 分)"></a>1050 螺旋矩阵 (25 分)</h3><p>本题要求将给定的 <em>N</em
</summary>
<category term="pat" scheme="https://yys123456.github.io/categories/pat/"/>
<category term="1050" scheme="https://yys123456.github.io/tags/1050/"/>
</entry>
<entry>
<title>1052 卖个萌</title>
<link href="https://yys123456.github.io/2019/08/17/1052%20%E5%8D%96%E4%B8%AA%E8%90%8C/"/>
<id>https://yys123456.github.io/2019/08/17/1052 卖个萌/</id>
<published>2019-08-17T13:56:16.000Z</published>
<updated>2019-08-17T14:07:20.025Z</updated>
<content type="html"><![CDATA[<h3 id="1052-卖个萌-20-分"><a href="#1052-卖个萌-20-分" class="headerlink" title="1052 卖个萌 (20 分)"></a>1052 卖个萌 (20 分)</h3><p>萌萌哒表情符号通常由“手”、“眼”、“口”三个主要部分组成。简单起见,我们假设一个表情符号是按下列格式输出的:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[左手]([左眼][口][右眼])[右手]</span><br></pre></td></tr></table></figure><p>现给出可选用的符号集合,请你按用户的要求输出表情。</p><h3 id="输入格式:"><a href="#输入格式:" class="headerlink" title="输入格式:"></a>输入格式:</h3><p>输入首先在前三行顺序对应给出手、眼、口的可选符号集。每个符号括在一对方括号 <code>[]</code>内。题目保证每个集合都至少有一个符号,并不超过 10 个符号;每个符号包含 1 到 4 个非空字符。</p><p>之后一行给出一个正整数 K,为用户请求的个数。随后 K 行,每行给出一个用户的符号选择,顺序为左手、左眼、口、右眼、右手——这里只给出符号在相应集合中的序号(从 1 开始),数字间以空格分隔。</p><h3 id="输出格式:"><a href="#输出格式:" class="headerlink" title="输出格式:"></a>输出格式:</h3><p>对每个用户请求,在一行中输出生成的表情。若用户选择的序号不存在,则输出 <code>Are you kidding me? @\/@</code>。</p><h3 id="输入样例:"><a href="#输入样例:" class="headerlink" title="输入样例:"></a>输入样例:</h3><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">[╮][╭][o][~\][/~] [<][>]</span><br><span class="line"> [╯][╰][^][-][=][>][<][@][⊙]</span><br><span class="line">[Д][▽][_][ε][^] ...</span><br><span class="line">4</span><br><span class="line">1 1 2 2 2</span><br><span class="line">6 8 1 5 5</span><br><span class="line">3 3 4 3 3</span><br><span class="line">2 10 3 9 3</span><br></pre></td></tr></table></figure><h3 id="输出样例:"><a href="#输出样例:" class="headerlink" title="输出样例:"></a>输出样例:</h3><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">╮(╯▽╰)╭</span><br><span class="line"><(@Д=)/~</span><br><span class="line">o(^ε^)o</span><br><span class="line">Are you kidding me? @\/@</span><br></pre></td></tr></table></figure><h3 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h3><p>通过字符串substr方法进行求子串从而得到表情库,然后选择合适的表情进行拼接。</p><p><font color="red">注意点:</font>由于会出现不合法输入的情况,在输出表情的时候我一开始选择的方法是边看序号边输出,然后遇到不合法序号,就break出来,但是这样的方法,仅仅对不合法数据位于第一个位置有效,如果不合法数据位于后面,<strong>那么就会出现在检测到不合法序号时输出<code>Are you kidding me? @\/@</code>的时候,会在前面跟上一堆表情组件,这样输出是错误的</strong>。</p><h3 id="C-代码"><a href="#C-代码" class="headerlink" title="C++代码"></a>C++代码</h3><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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><vector></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><string></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"><span class="built_in">string</span> s[<span class="number">3</span>];</span><br><span class="line"><span class="built_in">vector</span><<span class="built_in">vector</span><<span class="built_in">string</span>> >v(<span class="number">3</span>);</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> j=<span class="number">0</span>;j<<span class="number">3</span>;j++){</span><br><span class="line">getline(<span class="built_in">cin</span>,s[j]);</span><br><span class="line"><span class="keyword">int</span> i=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">while</span>(i<s[j].length()){</span><br><span class="line"><span class="keyword">if</span>(s[j][i]==<span class="string">'['</span>){</span><br><span class="line"><span class="keyword">int</span> t=i+<span class="number">1</span>;</span><br><span class="line"><span class="keyword">while</span>(s[j][i]!=<span class="string">']'</span>){</span><br><span class="line">i++;</span><br><span class="line">}</span><br><span class="line">v[j].push_back(s[j].substr(t,i-t));</span><br><span class="line">}</span><br><span class="line">i++;</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="keyword">int</span> n;</span><br><span class="line"><span class="built_in">cin</span>>>n;</span><br><span class="line"><span class="keyword">while</span>(n--){</span><br><span class="line"><span class="keyword">int</span> a[]={<span class="number">0</span>,<span class="number">1</span>,<span class="number">2</span>,<span class="number">1</span>,<span class="number">0</span>};</span><br><span class="line"><span class="built_in">string</span> ss=<span class="string">""</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<<span class="number">5</span>;i++){</span><br><span class="line"><span class="keyword">int</span> t;</span><br><span class="line"><span class="built_in">cin</span>>>t;</span><br><span class="line"><span class="keyword">if</span>(t<span class="number">-1</span>>=v[a[i]].size()){</span><br><span class="line">ss=<span class="string">""</span>;</span><br><span class="line"><span class="built_in">cout</span><<<span class="string">"Are you kidding me? @\\/@"</span>;</span><br><span class="line"><span class="keyword">break</span>;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">if</span>(i==<span class="number">1</span>){</span><br><span class="line">ss+=<span class="string">'('</span>;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">if</span>(i==<span class="number">4</span>){</span><br><span class="line">ss+=<span class="string">')'</span>;</span><br><span class="line">}</span><br><span class="line">ss+=v[a[i]][t<span class="number">-1</span>];</span><br><span class="line">}</span><br><span class="line"><span class="built_in">cout</span><<ss<<<span class="built_in">endl</span>;</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">
<h3 id="1052-卖个萌-20-分"><a href="#1052-卖个萌-20-分" class="headerlink" title="1052 卖个萌 (20 分)"></a>1052 卖个萌 (20 分)</h3><p>萌萌哒表情符号通常由“手”、“眼”、“口”三
</summary>
<category term="pat" scheme="https://yys123456.github.io/categories/pat/"/>
<category term="1052" scheme="https://yys123456.github.io/tags/1052/"/>
</entry>
<entry>
<title>Longest Common Subsequence</title>
<link href="https://yys123456.github.io/2019/08/15/%E7%AE%97%E6%B3%95%E5%AF%BC%E8%AE%BALCS/"/>
<id>https://yys123456.github.io/2019/08/15/算法导论LCS/</id>
<published>2019-08-15T11:23:40.000Z</published>
<updated>2019-08-15T12:07:35.560Z</updated>
<content type="html"><![CDATA[<h3 id="问题描述"><a href="#问题描述" class="headerlink" title="问题描述"></a>问题描述</h3><h3 id="问题分析"><a href="#问题分析" class="headerlink" title="问题分析"></a>问题分析</h3><h3 id="算法实现"><a href="#算法实现" class="headerlink" title="算法实现"></a>算法实现</h3><h4 id="C-动规"><a href="#C-动规" class="headerlink" title="C++动规"></a>C++动规</h4><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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><vector></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><string></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="comment">//LCS问题 </span></span><br><span class="line"><span class="built_in">vector</span><<span class="keyword">int</span>*>flags;</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">show</span><span class="params">(<span class="built_in">string</span>&s,<span class="keyword">int</span> i,<span class="keyword">int</span> j)</span></span>{</span><br><span class="line"><span class="keyword">if</span>(i==<span class="number">-1</span>||j==<span class="number">-1</span>)</span><br><span class="line"><span class="keyword">return</span>;</span><br><span class="line"><span class="keyword">if</span>(flags[i][j]==<span class="number">0</span>){</span><br><span class="line">show(s,i<span class="number">-1</span>,j<span class="number">-1</span>);</span><br><span class="line"><span class="built_in">cout</span><<s[i];</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>(flags[i][j]==<span class="number">1</span>){</span><br><span class="line">show(s,i<span class="number">-1</span>,j);</span><br><span class="line">}<span class="keyword">else</span>{</span><br><span class="line">show(s,i,j<span class="number">-1</span>);</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"><span class="built_in">string</span> s1,s2;</span><br><span class="line"><span class="built_in">vector</span><<span class="keyword">int</span>*>v;<span class="comment">//动态二维数组 </span></span><br><span class="line"><span class="built_in">cin</span>>>s1>>s2;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<s1.length();i++){<span class="comment">//注意flags是为了输出序列而生的,并且注意和动规表的个数差异</span></span><br><span class="line">flags.push_back(<span class="keyword">new</span> <span class="keyword">int</span>[s2.length()]);</span><br><span class="line">}</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<=s1.length();i++){</span><br><span class="line">v.push_back(<span class="keyword">new</span> <span class="keyword">int</span>[s2.length()+<span class="number">1</span>]);</span><br><span class="line">}</span><br><span class="line"><span class="comment">//获得动态规划表</span></span><br><span class="line"><span class="comment">//v[i][j]的含义是:对于s1[i]和s2[j](此处指前缀字符串)的LCS 长度 </span></span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<=s1.length();i++){</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> j=<span class="number">0</span>;j<=s2.length();j++){</span><br><span class="line"><span class="keyword">if</span>(i==<span class="number">0</span>||j==<span class="number">0</span>){</span><br><span class="line">v[i][j]=<span class="number">0</span>;</span><br><span class="line">}<span class="keyword">else</span>{</span><br><span class="line"><span class="keyword">if</span>(s1[i<span class="number">-1</span>]==s2[j<span class="number">-1</span>]){</span><br><span class="line">v[i][j]=v[i<span class="number">-1</span>][j<span class="number">-1</span>]+<span class="number">1</span>;</span><br><span class="line">flags[i<span class="number">-1</span>][j<span class="number">-1</span>]=<span class="number">0</span>;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">if</span>(s1[i<span class="number">-1</span>]!=s2[j<span class="number">-1</span>]){</span><br><span class="line"><span class="keyword">if</span>(v[i<span class="number">-1</span>][j]>=v[i][j<span class="number">-1</span>]){</span><br><span class="line">v[i][j]=v[i<span class="number">-1</span>][j];</span><br><span class="line">flags[i<span class="number">-1</span>][j<span class="number">-1</span>]=<span class="number">1</span>;</span><br><span class="line">}<span class="keyword">else</span>{</span><br><span class="line">v[i][j]=v[i][j<span class="number">-1</span>];</span><br><span class="line">flags[i<span class="number">-1</span>][j<span class="number">-1</span>]=<span class="number">2</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><br><span class="line"><span class="built_in">cout</span><<v[s1.length()][s2.length()]<<<span class="built_in">endl</span>;<span class="comment">//长度</span></span><br><span class="line">show(s1,s1.length()<span class="number">-1</span>,s2.length()<span class="number">-1</span>);<span class="comment">//LCS串</span></span><br><span class="line"><span class="built_in">cout</span><<<span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<s1.length();i++){</span><br><span class="line"><span class="keyword">delete</span>[] v[i];</span><br><span class="line">} </span><br><span class="line">v.clear();</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<s1.length();i++){</span><br><span class="line"><span class="keyword">delete</span>[] flags[i];</span><br><span class="line">}</span><br><span class="line">flags.clear();</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="C-递归"><a href="#C-递归" class="headerlink" title="C++递归"></a>C++递归</h4><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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><vector></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><string></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="comment">//LCS问题 </span></span><br><span class="line"><span class="built_in">vector</span><<span class="keyword">int</span>*>flags;</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">getLen</span><span class="params">(<span class="built_in">string</span>&s1,<span class="built_in">string</span>&s2,<span class="keyword">int</span> i,<span class="keyword">int</span> j)</span></span>{</span><br><span class="line"><span class="keyword">if</span>(i==<span class="number">-1</span>||j==<span class="number">-1</span>)</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line"><span class="keyword">if</span>(s1[i]==s2[j]){</span><br><span class="line">flags[i][j]=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">return</span> getLen(s1,s2,i<span class="number">-1</span>,j<span class="number">-1</span>)+<span class="number">1</span>;</span><br><span class="line">}<span class="keyword">else</span>{</span><br><span class="line"><span class="keyword">if</span>(getLen(s1,s2,i<span class="number">-1</span>,j)>=getLen(s1,s2,i,j<span class="number">-1</span>)){</span><br><span class="line">flags[i][j]=<span class="number">1</span>;</span><br><span class="line"><span class="keyword">return</span> getLen(s1,s2,i<span class="number">-1</span>,j);</span><br><span class="line">}<span class="keyword">else</span>{</span><br><span class="line">flags[i][j]=<span class="number">2</span>;</span><br><span class="line"><span class="keyword">return</span> getLen(s1,s2,i,j<span class="number">-1</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="keyword">void</span> <span class="title">show</span><span class="params">(<span class="built_in">string</span>&s,<span class="keyword">int</span> i,<span class="keyword">int</span> j)</span></span>{</span><br><span class="line"><span class="keyword">if</span>(i==<span class="number">-1</span>||j==<span class="number">-1</span>)</span><br><span class="line"><span class="keyword">return</span>;</span><br><span class="line"><span class="keyword">if</span>(flags[i][j]==<span class="number">0</span>){</span><br><span class="line">show(s,i<span class="number">-1</span>,j<span class="number">-1</span>);</span><br><span class="line"><span class="built_in">cout</span><<s[i];</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>(flags[i][j]==<span class="number">1</span>){</span><br><span class="line">show(s,i<span class="number">-1</span>,j);</span><br><span class="line">}<span class="keyword">else</span>{</span><br><span class="line">show(s,i,j<span class="number">-1</span>);</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"><span class="built_in">string</span> s1,s2;</span><br><span class="line"><span class="built_in">cin</span>>>s1>>s2;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<s1.length();i++){</span><br><span class="line">flags.push_back(<span class="keyword">new</span> <span class="keyword">int</span>[s2.length()]);</span><br><span class="line">}</span><br><span class="line"><span class="built_in">cout</span><<getLen(s1,s2,s1.length()<span class="number">-1</span>,s2.length()<span class="number">-1</span>)<<<span class="built_in">endl</span>;</span><br><span class="line">show(s1,s1.length()<span class="number">-1</span>,s2.length()<span class="number">-1</span>);</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<s1.length();i++){</span><br><span class="line"><span class="keyword">delete</span>[] flags[i];</span><br><span class="line">}</span><br><span class="line">flags.clear();</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">
<h3 id="问题描述"><a href="#问题描述" class="headerlink" title="问题描述"></a>问题描述</h3><h3 id="问题分析"><a href="#问题分析" class="headerlink" title="问题分析"></a
</summary>
<category term="算法导论" scheme="https://yys123456.github.io/categories/%E7%AE%97%E6%B3%95%E5%AF%BC%E8%AE%BA/"/>
<category term="最长公共子序列" scheme="https://yys123456.github.io/tags/%E6%9C%80%E9%95%BF%E5%85%AC%E5%85%B1%E5%AD%90%E5%BA%8F%E5%88%97/"/>
</entry>
<entry>
<title>pat-1045快速排序</title>
<link href="https://yys123456.github.io/2019/08/15/pat-1045/"/>
<id>https://yys123456.github.io/2019/08/15/pat-1045/</id>
<published>2019-08-15T05:44:07.000Z</published>
<updated>2019-08-18T14:22:51.782Z</updated>
<content type="html"><![CDATA[<h3 id="1045-快速排序-25-分"><a href="#1045-快速排序-25-分" class="headerlink" title="1045 快速排序 (25 分)"></a>1045 快速排序 (25 分)</h3><p>著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边。 给定划分后的 <em>N</em> 个互不相同的正整数的排列,请问有多少个元素可能是划分前选取的主元?</p><p>例如给定 $N = 5$, 排列是1、3、2、4、5。则:</p><ul><li>1 的左边没有元素,右边的元素都比它大,所以它可能是主元;</li><li>尽管 3 的左边元素都比它小,但其右边的 2 比它小,所以它不能是主元;</li><li>尽管 2 的右边元素都比它大,但其左边的 3 比它大,所以它不能是主元;</li><li>类似原因,4 和 5 都可能是主元。</li></ul><p>因此,有 3 个元素可能是主元。</p><h3 id="输入格式:"><a href="#输入格式:" class="headerlink" title="输入格式:"></a>输入格式:</h3><p>输入在第 1 行中给出一个正整数 <em>N</em>(≤$10^5$); 第 2 行是空格分隔的 <em>N</em> 个不同的正整数,每个数不超过 $10^9$。</p><h3 id="输出格式:"><a href="#输出格式:" class="headerlink" title="输出格式:"></a>输出格式:</h3><p>在第 1 行中输出有可能是主元的元素个数;在第 2 行中按递增顺序输出这些元素,其间以 1 个空格分隔,行首尾不得有多余空格。</p><h3 id="输入样例:"><a href="#输入样例:" class="headerlink" title="输入样例:"></a>输入样例:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">5</span><br><span class="line">1 3 2 4 5</span><br></pre></td></tr></table></figure><h3 id="输出样例:"><a href="#输出样例:" class="headerlink" title="输出样例:"></a>输出样例:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">3</span><br><span class="line">1 4 5</span><br></pre></td></tr></table></figure><h3 id="读题"><a href="#读题" class="headerlink" title="读题"></a>读题</h3><p>本题的主元其实就是指的快速排序中的<strong>枢轴量(pivot)</strong>,<strong>枢轴量是根据每一轮的快速排序而得来的</strong>,而枢轴量的作用就是将当前序列分成两个部分,比它小的部分和比它大的部分,所以显然可以知道<strong><font color="green">主元满足比它前面所有的元素都大,比它后面的所有元素都小的条件。</font></strong></p><h3 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h3><p>本题要求找出所有满足主元条件的元素,所以必须对序列进行遍历</p><h4 id="方法1"><a href="#方法1" class="headerlink" title="方法1"></a>方法1</h4><p>遍历到每一个元素时都对此元素前面和后面进行遍历,对前面遍历找到最大值max,对后面遍历找到最小值min,然后再检查此元素和max,min的大小关系,若满足就放入结果集。</p><h4 id="方法2"><a href="#方法2" class="headerlink" title="方法2"></a>方法2</h4><p>维护一个序列B,这个序列是由<strong>原序列A从小到大排序</strong>而得来的,再从前向后遍历原序列,维护一个max(初值为0)值,max值代表$i$号元素之前的最大的元素值,下一步就是得到$i$号元素向后的最小值,步骤如下</p><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">while B没有走到头&&B中第一个元素在原序列中的下标小于等于i</span><br><span class="line">{</span><br><span class="line">删除B中的第一个元素</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>在循环跳出之时若B不为空,那么B[0]就是$i$号元素之后的最小元素min。</p><p>判断环节</p><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">if B不为空</span><br><span class="line">//此时说明没有到最后一个元素的判断</span><br><span class="line">if(max<=A[i]&&A[i]<=min){</span><br><span class="line">将A[i]放入结果集</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">else</span><br><span class="line">//此时到了最后一个元素的判断</span><br><span class="line">if(max<=A[i]){</span><br><span class="line">将A[i]放入结果集</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h4 id="方法3"><a href="#方法3" class="headerlink" title="方法3"></a>方法3</h4><font color="red">两次遍历法</font><p>此方法,对原序列中的每一个元素维护两个信息,此元素前面(<strong>包括此元素</strong>)的最大值,此元素后面(<strong>包括此元素</strong>)的最大值。所以判断$i$号元素是否满足枢轴的条件时,只需要判断这个元素所对应的从前向后最小(lmax[i])和从后向前最大(rmax[i])<strong>是否相等</strong>即可。</p><p>即</p><script type="math/tex; mode=display">rmin[i]=lmax[i]\Longrightarrow{A[i]\ is \ a \ pivot}</script><p>对于这个蕴含式需要证明它的正确只需要证明它的逆否命题的正确性</p><p>即</p><script type="math/tex; mode=display">A[i]\ is \ not \ a \ pivot\Longrightarrow{rmin[i]\not=lmax[i]}</script><p>A[i]如果不是一个枢轴,那么会得到lmax[i]>a[i]或者rmin[i]<a[i]</p><script type="math/tex; mode=display">如果lmax[i]>A[i]\\若rmin[i]\geq{A[i]}\Longrightarrow{A[i]=rmin[i]}\Longrightarrow{rmin[i]\not=lmax[i]}\ (因为rmin[i]是包括A[i]的最小值)\\若rmin[i]\leq{A[i]}\Longrightarrow{rmin[i]\not=lmax[i]}\\所以lmax[i]>A[i]\Longrightarrow{rmin[i]\not=lmax[i]}</script><p>对于rmin[i]<a[i]和此种情况对称。</p><h3 id="算法实现"><a href="#算法实现" class="headerlink" title="算法实现"></a>算法实现</h3><h4 id="方法一"><a href="#方法一" class="headerlink" title="方法一"></a>方法一</h4><p>思路简单复杂度为$O(n^2)$必定超时。</p><h4 id="方法二"><a href="#方法二" class="headerlink" title="方法二"></a>方法二</h4><p>思路较复杂,复杂度也为$O(n^2)$超时。</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><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><bits/stdc++.h></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">node</span>{</span></span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"><span class="keyword">int</span> data,index;</span><br><span class="line">node(<span class="keyword">int</span> i,<span class="keyword">int</span> j=<span class="number">0</span>){</span><br><span class="line">data=i;</span><br><span class="line">index=j;</span><br><span class="line">}</span><br><span class="line">};</span><br><span class="line"><span class="function"><span class="keyword">bool</span> <span class="title">cmp</span><span class="params">(<span class="keyword">const</span> node&a,<span class="keyword">const</span> node&b)</span></span>{</span><br><span class="line"><span class="keyword">return</span> a.data<b.data;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">bool</span> <span class="title">cmp1</span><span class="params">(<span class="keyword">int</span> a,<span class="keyword">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 class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"><span class="built_in">vector</span><node>v;</span><br><span class="line"><span class="built_in">set</span><<span class="keyword">int</span>,less<<span class="keyword">int</span>> >s;<span class="comment">//保证不重复性 </span></span><br><span class="line"><span class="built_in">set</span><<span class="keyword">int</span>>::iterator it;</span><br><span class="line"><span class="keyword">int</span> n;</span><br><span class="line"><span class="built_in">cin</span>>>n;</span><br><span class="line"><span class="keyword">int</span> *a;</span><br><span class="line">a=<span class="keyword">new</span> <span class="keyword">int</span>[n];</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<n;i++){</span><br><span class="line"><span class="keyword">int</span> data;</span><br><span class="line"><span class="built_in">cin</span>>>data;</span><br><span class="line">a[i]=data;</span><br><span class="line">v.push_back(node(data,i));</span><br><span class="line">}</span><br><span class="line">sort(v.begin(),v.end(),cmp);</span><br><span class="line"><span class="keyword">int</span> max=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<n;i++){</span><br><span class="line"><span class="keyword">if</span>(a[i]>=max){</span><br><span class="line">max=a[i];</span><br><span class="line"><span class="keyword">while</span>(v.size()&&v[<span class="number">0</span>].index<=i)</span><br><span class="line">v.erase(v.begin());</span><br><span class="line"><span class="keyword">if</span>(!v.size()){</span><br><span class="line">s.insert(a[i]);</span><br><span class="line"><span class="keyword">continue</span>;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">if</span>(v[<span class="number">0</span>].data>=a[i])</span><br><span class="line">s.insert(a[i]);</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="comment">//sort(s.begin(),s.end(),cmp1);此句错误</span></span><br><span class="line"><span class="built_in">cout</span><<s.size()<<<span class="built_in">endl</span>;</span><br><span class="line">it=s.begin();</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<s.size()<span class="number">-1</span>;i++){</span><br><span class="line"><span class="built_in">cout</span><<(*it++)<<<span class="string">' '</span>;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">if</span>(s.size()!=<span class="number">0</span>){</span><br><span class="line"><span class="built_in">cout</span><<*it;</span><br><span class="line">}</span><br><span class="line"><span class="built_in">cout</span><<<span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">delete</span>[] a;</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></pre></td></tr></table></figure><h4 id="方法三"><a href="#方法三" class="headerlink" title="方法三"></a>方法三</h4><p>复杂度为$O(n)$。</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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><bits/stdc++.h></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="keyword">typedef</span> <span class="keyword">long</span> <span class="keyword">long</span> LL;</span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> INF=<span class="number">1000000001</span>;</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{<span class="comment">//两次遍历法</span></span><br><span class="line"><span class="keyword">int</span> a[<span class="number">100000</span>];</span><br><span class="line"><span class="keyword">int</span> lmax[<span class="number">100000</span>];</span><br><span class="line"><span class="keyword">int</span> rmin[<span class="number">100000</span>];</span><br><span class="line"><span class="keyword">int</span> N;</span><br><span class="line"><span class="built_in">set</span><<span class="keyword">int</span>,less<<span class="keyword">int</span>> >s;</span><br><span class="line"><span class="built_in">cin</span>>>N;</span><br><span class="line"><span class="keyword">int</span> max=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<N;i++){</span><br><span class="line"><span class="built_in">cin</span>>>a[i];</span><br><span class="line"><span class="keyword">if</span>(max<a[i])max=a[i];</span><br><span class="line">lmax[i]=max;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">int</span> min=INF;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=N<span class="number">-1</span>;i>=<span class="number">0</span>;i--){</span><br><span class="line"><span class="keyword">if</span>(min>=a[i])min=a[i];</span><br><span class="line">rmin[i]=min;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<N;i++){</span><br><span class="line"><span class="keyword">if</span>(lmax[i]==rmin[i])s.insert(a[i]);</span><br><span class="line">}</span><br><span class="line"><span class="built_in">set</span><<span class="keyword">int</span>>::iterator it=s.begin();</span><br><span class="line"><span class="built_in">cout</span><<s.size()<<<span class="built_in">endl</span>;</span><br><span class="line"><span class="comment">//cout<<string(typeid(s.size()).name())<<endl;</span></span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<LL(s.size())<span class="number">-1</span>;i++){</span><br><span class="line"><span class="built_in">cout</span><<(*it++)<<<span class="string">' '</span>;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">if</span>(s.size()!=<span class="number">0</span>){</span><br><span class="line"><span class="built_in">cout</span><<*it;</span><br><span class="line">}</span><br><span class="line"><span class="built_in">cout</span><<<span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h4 id="附上坑点"><a href="#附上坑点" class="headerlink" title="附上坑点"></a>附上坑点</h4><h5 id="set排序问题"><a href="#set排序问题" class="headerlink" title="set排序问题"></a>set排序问题</h5><p>set本身就是有序容器,只可以在初始化的时候指定放入的规则,而不可以对其调用sort函数进行排序,set的iterator是指向const类型的。</p><h5 id="typeid操作符的name方法返回数据的实际类型的缩写问题"><a href="#typeid操作符的name方法返回数据的实际类型的缩写问题" class="headerlink" title="typeid操作符的name方法返回数据的实际类型的缩写问题"></a>typeid操作符的name方法返回数据的实际类型的缩写问题</h5><blockquote><p> bool: b<br> char: c<br> signed char: a<br> unsigned char: h<br> (signed) short (int): s<br> unsigned short (int): t<br> (signed) (int): i<br> unsigned (int): j<br> (signed) long (int): l<br> unsigned long (int): m<br> (signed) long long (int): x<br> unsigned long long (int): y<br> float: f<br> double: d<br> long double: e</p></blockquote><h5 id="set类型size-方法返回值问题(其他容器一样)"><a href="#set类型size-方法返回值问题(其他容器一样)" class="headerlink" title="set类型size()方法返回值问题(其他容器一样)"></a>set类型size()方法返回值问题(其他容器一样)</h5><p>返回类型为<strong>unsigned long long</strong>类型</p><p>如果出现如下循环,则无法停止,甚至出错</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//背景:set中为存储元素</span></span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<s.size()<span class="number">-1</span>;i++);<span class="comment">//因为0-1的出来的数最高位即符号位为1,而类型为unsigned所以会让 //系统认为这是一个特别大的正数。</span></span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<h3 id="1045-快速排序-25-分"><a href="#1045-快速排序-25-分" class="headerlink" title="1045 快速排序 (25 分)"></a>1045 快速排序 (25 分)</h3><p>著名的快速排序算法里有一个经典的划分
</summary>
<category term="pat" scheme="https://yys123456.github.io/categories/pat/"/>
<category term="1045" scheme="https://yys123456.github.io/tags/1045/"/>
</entry>
<entry>
<title>pat-1033旧键盘打字</title>
<link href="https://yys123456.github.io/2019/08/13/pat-1033/"/>
<id>https://yys123456.github.io/2019/08/13/pat-1033/</id>
<published>2019-08-13T10:28:18.000Z</published>
<updated>2019-08-13T10:46:00.475Z</updated>
<content type="html"><![CDATA[<h3 id="1033-旧键盘打字-20-分"><a href="#1033-旧键盘打字-20-分" class="headerlink" title="1033 旧键盘打字 (20 分)"></a>1033 旧键盘打字 (20 分)</h3><p>旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样?</p><h3 id="输入格式:"><a href="#输入格式:" class="headerlink" title="输入格式:"></a>输入格式:</h3><p>输入在 2 行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过 105 个字符的串。可用的字符包括字母 [<code>a</code>-<code>z</code>, <code>A</code>-<code>Z</code>]、数字 <code>0</code>-<code>9</code>、以及下划线 <code>_</code>(代表空格)、<code>,</code>、<code>.</code>、<code>-</code>、<code>+</code>(代表上档键)。题目保证第 2 行输入的文字串非空。</p><p>注意:如果上档键坏掉了,那么大写的英文字母无法被打出。</p><h3 id="输出格式:"><a href="#输出格式:" class="headerlink" title="输出格式:"></a>输出格式:</h3><p>在一行中输出能够被打出的结果文字。如果没有一个字符能被打出,则输出空行。</p><h3 id="输入样例:"><a href="#输入样例:" class="headerlink" title="输入样例:"></a>输入样例:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">7+IE.</span><br><span class="line">7_This_is_a_test.</span><br></pre></td></tr></table></figure><h3 id="输出样例:"><a href="#输出样例:" class="headerlink" title="输出样例:"></a>输出样例:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">_hs_s_a_tst</span><br></pre></td></tr></table></figure><h3 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h3><p>本题的方法是</p><ol><li><strong>制作一个坏按键的参考手册;</strong></li><li><strong>扫描输入的字符串,每扫描一个就参考一下手册,从而确认它是否真的能输入计算机;</strong></li><li><strong>通过2中对每一个字符的判断,得出实际输入计算机的数据。</strong></li></ol><p><strong><font color="#FF0000">实际上本题是一种模拟,模拟字符输入计算机的过程,通过我对错误按键手册的参考,来预测实际输入计算机的字符。</font> </strong></p><h3 id="算法实现"><a href="#算法实现" class="headerlink" title="算法实现"></a>算法实现</h3><h4 id="C-代码"><a href="#C-代码" class="headerlink" title="C++代码"></a>C++代码</h4><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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><bits/stdc++.h></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"><span class="keyword">bool</span>* alpha=<span class="keyword">new</span> <span class="keyword">bool</span>[<span class="number">26</span>]();<span class="comment">//A-Z </span></span><br><span class="line"><span class="keyword">bool</span>* suji=<span class="keyword">new</span> <span class="keyword">bool</span>[<span class="number">10</span>]();<span class="comment">//0~9</span></span><br><span class="line"><span class="keyword">bool</span>* hoka=<span class="keyword">new</span> <span class="keyword">bool</span>[<span class="number">5</span>]();<span class="comment">//_ , . - +</span></span><br><span class="line"><span class="built_in">string</span> bads;</span><br><span class="line">getline(<span class="built_in">cin</span>,bads);</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<bads.length();i++){</span><br><span class="line"><span class="keyword">switch</span>(bads[i]){</span><br><span class="line"><span class="keyword">case</span> <span class="string">'_'</span>:hoka[<span class="number">0</span>]=<span class="number">1</span>;<span class="keyword">break</span>;</span><br><span class="line"><span class="keyword">case</span> <span class="string">','</span>:hoka[<span class="number">1</span>]=<span class="number">1</span>;<span class="keyword">break</span>;</span><br><span class="line"><span class="keyword">case</span> <span class="string">'.'</span>:hoka[<span class="number">2</span>]=<span class="number">1</span>;<span class="keyword">break</span>;</span><br><span class="line"><span class="keyword">case</span> <span class="string">'-'</span>:hoka[<span class="number">3</span>]=<span class="number">1</span>;<span class="keyword">break</span>;</span><br><span class="line"><span class="keyword">case</span> <span class="string">'+'</span>:hoka[<span class="number">4</span>]=<span class="number">1</span>;<span class="keyword">break</span>;</span><br><span class="line"><span class="keyword">default</span>: </span><br><span class="line"><span class="keyword">if</span>(bads[i]>=<span class="string">'0'</span>&&bads[i]<=<span class="string">'9'</span>){</span><br><span class="line">suji[bads[i]-<span class="string">'0'</span>]=<span class="number">1</span>;</span><br><span class="line">}<span class="keyword">else</span>{</span><br><span class="line">alpha[bads[i]-<span class="string">'A'</span>]=<span class="number">1</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">string</span> s1;</span><br><span class="line"><span class="built_in">cin</span>>>s1;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<s1.length();i++){</span><br><span class="line"><span class="keyword">if</span>(s1[i]>=<span class="string">'0'</span>&&s1[i]<=<span class="string">'9'</span>){</span><br><span class="line"><span class="keyword">if</span>(suji[s1[i]-<span class="string">'0'</span>]){</span><br><span class="line">s1.erase(i,<span class="number">1</span>);</span><br><span class="line">i--;</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="keyword">else</span> <span class="keyword">if</span>(s1[i]>=<span class="string">'A'</span>&&s1[i]<=<span class="string">'Z'</span>){</span><br><span class="line"><span class="keyword">if</span>(hoka[<span class="number">4</span>]){</span><br><span class="line">s1.erase(i,<span class="number">1</span>);</span><br><span class="line">i--;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">else</span>{</span><br><span class="line"><span class="keyword">if</span>(alpha[s1[i]-<span class="string">'A'</span>]){</span><br><span class="line">s1.erase(i,<span class="number">1</span>);</span><br><span class="line">i--;</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="keyword">else</span> <span class="keyword">if</span>(s1[i]>=<span class="string">'a'</span>&&s1[i]<=<span class="string">'z'</span>){</span><br><span class="line"><span class="keyword">if</span>(alpha[s1[i]-<span class="string">'a'</span>]){</span><br><span class="line">s1.erase(i,<span class="number">1</span>);</span><br><span class="line">i--;</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 class="keyword">switch</span>(s1[i]){</span><br><span class="line"><span class="keyword">case</span> <span class="string">'_'</span>:hoka[<span class="number">0</span>]?s1.erase(i--,<span class="number">1</span>):(s1);<span class="keyword">break</span>;</span><br><span class="line"><span class="keyword">case</span> <span class="string">','</span>:hoka[<span class="number">1</span>]?s1.erase(i--,<span class="number">1</span>):(s1);<span class="keyword">break</span>;</span><br><span class="line"><span class="keyword">case</span> <span class="string">'.'</span>:hoka[<span class="number">2</span>]?s1.erase(i--,<span class="number">1</span>):(s1);<span class="keyword">break</span>;</span><br><span class="line"><span class="keyword">case</span> <span class="string">'-'</span>:hoka[<span class="number">3</span>]?s1.erase(i--,<span class="number">1</span>):(s1);<span class="keyword">break</span>;</span><br><span class="line"><span class="keyword">case</span> <span class="string">'+'</span>:hoka[<span class="number">4</span>]?s1.erase(i--,<span class="number">1</span>):(s1);<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><br><span class="line"><span class="built_in">cout</span><<s1<<<span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<h3 id="1033-旧键盘打字-20-分"><a href="#1033-旧键盘打字-20-分" class="headerlink" title="1033 旧键盘打字 (20 分)"></a>1033 旧键盘打字 (20 分)</h3><p>旧键盘上坏了几个键,于是在敲
</summary>
<category term="pat" scheme="https://yys123456.github.io/categories/pat/"/>
<category term="1033" scheme="https://yys123456.github.io/tags/1033/"/>
</entry>
<entry>
<title>pat-1043输出PATest</title>
<link href="https://yys123456.github.io/2019/08/13/pat-1043/"/>
<id>https://yys123456.github.io/2019/08/13/pat-1043/</id>
<published>2019-08-13T02:25:24.000Z</published>
<updated>2019-08-13T03:01:46.291Z</updated>
<content type="html"><![CDATA[<h3 id="1043-输出PATest-20-分"><a href="#1043-输出PATest-20-分" class="headerlink" title="1043 输出PATest (20 分)"></a>1043 输出PATest (20 分)</h3><p>给定一个长度不超过 $10^4$ 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 <code>PATestPATest....</code> 这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按 PATest 的顺序打印,直到所有字符都被输出。</p><h3 id="输入格式:"><a href="#输入格式:" class="headerlink" title="输入格式:"></a>输入格式:</h3><p>输入在一行中给出一个长度不超过 $10^4$ 的、仅由英文字母构成的非空字符串。</p><h3 id="输出格式:"><a href="#输出格式:" class="headerlink" title="输出格式:"></a>输出格式:</h3><p>在一行中按题目要求输出排序后的字符串。题目保证输出非空。</p><h3 id="输入样例:"><a href="#输入样例:" class="headerlink" title="输入样例:"></a>输入样例:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">redlesPayBestPATTopTeePHPereatitAPPT</span><br></pre></td></tr></table></figure><h3 id="输出样例:"><a href="#输出样例:" class="headerlink" title="输出样例:"></a>输出样例:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">PATestPATestPTetPTePePee</span><br></pre></td></tr></table></figure><h3 id="读题"><a href="#读题" class="headerlink" title="读题"></a>读题</h3><p>题目要求从前向后扫描字符串,然后经过适当的排序和删除,按照PATest的模式,输出处理后的字符串。</p><p>过程</p><ol><li>将所有不包含在PATest中的字符排除掉;</li><li>将包含在PATest中的字符适当地排序;</li><li>按照PATest模式输出字符串。</li></ol><p>所谓按照PATest模式输出,就是输出字符地顺序一定是按照PATest地顺序输出,不论中间是否缺少其他字符,比如缺少T,那么就要输出PAest。</p><h3 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h3><p>我的思路与读题中的字面上的思路完全不同,因为考虑到不断地对字符串选择和排序,会造成极高的时间复杂度。所以我考虑从字符的个数方面来考虑。</p><h4 id="分析"><a href="#分析" class="headerlink" title="分析"></a>分析</h4><ol><li><strong>输出字符串中只有$’P’,’A’,’T’,’e’,’s’,’t’$这五种字符,所以我可以直接忽略其他字符</strong></li><li><strong>发现最终输出的结果,输出$PATest$是从完整的$PATest$到不完整的$PATest$,所以我可以建立一个仓库,这个仓库存放这所有的可供分配的$’P’,’A’,’T’,’e’,’s’,’t’$字符,然后每次都尽可能完整的输出$PATest$子串。</strong></li><li>利用短板效应,能够输出$PATest$顺序的<strong>组合</strong>(<strong>不一定是完整的</strong>$PATest$)取决于储存数量最少的那一种字符,所以需要找到<strong>存储最少</strong>的那一种字符,就可以得出<strong>当前这种$PATest$模式的组合</strong>可以最多输出多少个。</li></ol><h3 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h3><h4 id="C-实现"><a href="#C-实现" class="headerlink" title="C++实现"></a>C++实现</h4><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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><bits/stdc++.h></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">node</span>{</span></span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"> <span class="keyword">int</span> t;</span><br><span class="line"> <span class="keyword">char</span> m;</span><br><span class="line">};</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"><span class="keyword">char</span> t[]={<span class="string">'P'</span>,<span class="string">'A'</span>,<span class="string">'T'</span>,<span class="string">'e'</span>,<span class="string">'s'</span>,<span class="string">'t'</span>};</span><br><span class="line">node a[<span class="number">6</span>];</span><br><span class="line"><span class="built_in">string</span> s;</span><br><span class="line"><span class="keyword">char</span> c;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<<span class="number">6</span>;i++){</span><br><span class="line">a[i].t=<span class="number">0</span>;</span><br><span class="line"> a[i].m=t[i];</span><br><span class="line"> }</span><br><span class="line"><span class="keyword">while</span>((c=getchar())!=<span class="string">'\n'</span>){</span><br><span class="line"><span class="keyword">switch</span>(c){</span><br><span class="line"><span class="keyword">case</span> <span class="string">'P'</span>:a[<span class="number">0</span>].t++;<span class="keyword">break</span>;</span><br><span class="line"><span class="keyword">case</span> <span class="string">'A'</span>:a[<span class="number">1</span>].t++;<span class="keyword">break</span>;</span><br><span class="line"><span class="keyword">case</span> <span class="string">'T'</span>:a[<span class="number">2</span>].t++;<span class="keyword">break</span>;</span><br><span class="line"><span class="keyword">case</span> <span class="string">'e'</span>:a[<span class="number">3</span>].t++;<span class="keyword">break</span>;</span><br><span class="line"><span class="keyword">case</span> <span class="string">'s'</span>:a[<span class="number">4</span>].t++;<span class="keyword">break</span>;</span><br><span class="line"><span class="keyword">case</span> <span class="string">'t'</span>:a[<span class="number">5</span>].t++;<span class="keyword">break</span>;</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"> <span class="keyword">int</span> len=<span class="number">6</span>;</span><br><span class="line"> <span class="keyword">int</span> min=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span>(<span class="literal">true</span>){</span><br><span class="line"> <span class="keyword">if</span>(len==<span class="number">0</span>)<span class="keyword">break</span>;</span><br><span class="line"> s=<span class="string">""</span>;</span><br><span class="line"> min=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<len;i++){</span><br><span class="line"> <span class="keyword">if</span>(a[i].t==<span class="number">0</span>){</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> j=i+<span class="number">1</span>;j<len;j++)a[j<span class="number">-1</span>]=a[j];</span><br><span class="line"> len--;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> </span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<len;i++){</span><br><span class="line"> <span class="keyword">if</span>(a[min].t>a[i].t)min=i;</span><br><span class="line"> }</span><br><span class="line"> </span><br><span class="line"> <span class="keyword">int</span> r=a[min].t;</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<len;i++){</span><br><span class="line"> a[i].t-=r;</span><br><span class="line"> s+=a[i].m;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<r;i++){</span><br><span class="line"> <span class="built_in">cout</span><<(s);</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="built_in">cout</span><<<span class="built_in">endl</span>;</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h4 id="Java代码(4号测试点内存超限)"><a href="#Java代码(4号测试点内存超限)" class="headerlink" title="Java代码(4号测试点内存超限)"></a>Java代码(4号测试点内存超限)</h4><figure class="highlight java"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> java.util.*;</span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">node</span></span>{</span><br><span class="line"> <span class="keyword">int</span> t;</span><br><span class="line"> <span class="keyword">char</span> m;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Main</span></span>{</span><br><span class="line"> node[] a;</span><br><span class="line"> Scanner scn;</span><br><span class="line"> <span class="keyword">static</span> <span class="keyword">char</span>[] t=<span class="keyword">new</span> <span class="keyword">char</span>[]{<span class="string">'P'</span>,<span class="string">'A'</span>,<span class="string">'T'</span>,<span class="string">'e'</span>,<span class="string">'s'</span>,<span class="string">'t'</span>};</span><br><span class="line"> Main(){</span><br><span class="line"> scn=<span class="keyword">new</span> Scanner(System.in);</span><br><span class="line"> a=<span class="keyword">new</span> node[<span class="number">6</span>];</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<<span class="number">6</span>;i++){</span><br><span class="line"> a[i]=<span class="keyword">new</span> node();</span><br><span class="line"> a[i].m=t[i];</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">char</span> c;</span><br><span class="line"> String s1=scn.next();</span><br><span class="line"> <span class="keyword">int</span> e=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span>(e<s1.length()){</span><br><span class="line"> <span class="keyword">switch</span>((s1.toCharArray())[e]){</span><br><span class="line"> <span class="keyword">case</span> <span class="string">'P'</span>:a[<span class="number">0</span>].t++;<span class="keyword">break</span>;</span><br><span class="line"> <span class="keyword">case</span> <span class="string">'A'</span>:a[<span class="number">1</span>].t++;<span class="keyword">break</span>;</span><br><span class="line"> <span class="keyword">case</span> <span class="string">'T'</span>:a[<span class="number">2</span>].t++;<span class="keyword">break</span>;</span><br><span class="line"> <span class="keyword">case</span> <span class="string">'e'</span>:a[<span class="number">3</span>].t++;<span class="keyword">break</span>;</span><br><span class="line"> <span class="keyword">case</span> <span class="string">'s'</span>:a[<span class="number">4</span>].t++;<span class="keyword">break</span>;</span><br><span class="line"> <span class="keyword">case</span> <span class="string">'t'</span>:a[<span class="number">5</span>].t++;<span class="keyword">break</span>;</span><br><span class="line"> }</span><br><span class="line"> e++;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">boolean</span> flag=<span class="keyword">false</span>;</span><br><span class="line"> <span class="keyword">int</span> len=<span class="number">6</span>;</span><br><span class="line"> <span class="keyword">while</span>(<span class="keyword">true</span>){</span><br><span class="line"> <span class="comment">//System.out.println(len);</span></span><br><span class="line"> <span class="keyword">if</span>(len==<span class="number">0</span>)<span class="keyword">break</span>;</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<len;i++){</span><br><span class="line"> <span class="keyword">if</span>(a[i].t==<span class="number">0</span>){</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> j=i+<span class="number">1</span>;j<len;j++)a[j-<span class="number">1</span>]=a[j];</span><br><span class="line"> len--;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">int</span> min=<span class="number">0</span>;</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<len;i++){</span><br><span class="line"> <span class="keyword">if</span>(a[min].t>a[i].t)min=i;</span><br><span class="line"> }</span><br><span class="line"> String s=<span class="string">""</span>;</span><br><span class="line"> <span class="keyword">int</span> r=a[min].t;</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<len;i++){</span><br><span class="line"> a[i].t-=r;</span><br><span class="line"> s+=a[i].m;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<r;i++){</span><br><span class="line"> System.out.print(s);</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="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span></span>{</span><br><span class="line"> Main m=<span class="keyword">new</span> Main();</span><br><span class="line"> System.out.println();</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<h3 id="1043-输出PATest-20-分"><a href="#1043-输出PATest-20-分" class="headerlink" title="1043 输出PATest (20 分)"></a>1043 输出PATest (20 分)</h3><p>给定
</summary>
<category term="pat" scheme="https://yys123456.github.io/categories/pat/"/>
<category term="1043" scheme="https://yys123456.github.io/tags/1043/"/>
</entry>
<entry>
<title>n元买n鸡问题</title>
<link href="https://yys123456.github.io/2019/08/13/n%E5%85%83%E4%B9%B0n%E9%B8%A1%E9%97%AE%E9%A2%98/"/>
<id>https://yys123456.github.io/2019/08/13/n元买n鸡问题/</id>
<published>2019-08-13T01:14:36.000Z</published>
<updated>2019-08-13T01:17:35.874Z</updated>
<content type="html"><![CDATA[<h3 id="静态链表的应用"><a href="#静态链表的应用" class="headerlink" title="静态链表的应用"></a>静态链表的应用</h3><figure class="highlight java"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> java.util.*;</span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Method</span></span>{</span><br><span class="line"> <span class="keyword">int</span> g,m,x;</span><br><span class="line"> <span class="keyword">int</span> next;</span><br><span class="line"> <span class="function"><span class="keyword">void</span> <span class="title">show</span><span class="params">()</span></span>{</span><br><span class="line"> System.out.println(g+<span class="string">" "</span>+m+<span class="string">" "</span>+x);</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Main</span></span>{</span><br><span class="line"> <span class="keyword">int</span> n;</span><br><span class="line"> Scanner scn;</span><br><span class="line"> <span class="keyword">static</span> Method[] a=<span class="keyword">new</span> Method[<span class="number">100</span>];<span class="comment">//资源</span></span><br><span class="line"> <span class="keyword">int</span> head;</span><br><span class="line"> <span class="keyword">static</span> <span class="keyword">int</span> ks=<span class="number">0</span>; </span><br><span class="line"> Main(){</span><br><span class="line"> <span class="comment">//初始化仓库</span></span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<a.length-<span class="number">1</span>;i++){</span><br><span class="line"> a[i]=<span class="keyword">new</span> Method();</span><br><span class="line"> a[i].next=i+<span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"> a[a.length-<span class="number">1</span>]=<span class="keyword">new</span> Method();</span><br><span class="line"> a[a.length-<span class="number">1</span>].next=-<span class="number">1</span>;</span><br><span class="line"> head=malloc();</span><br><span class="line"> a[head].next=-<span class="number">1</span>;</span><br><span class="line"> scn=<span class="keyword">new</span> Scanner(System.in);</span><br><span class="line"> n=scn.nextInt();</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<n/<span class="number">5</span>;i++){</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> j=<span class="number">0</span>;j<n/<span class="number">3</span>;j++){</span><br><span class="line"> <span class="keyword">if</span>((n-i-j>=<span class="number">0</span>)&&(n-i-j)%<span class="number">3</span>==<span class="number">0</span>&&(i*<span class="number">5</span>+j*<span class="number">3</span>+(n-i-j)/<span class="number">3</span>)==n){</span><br><span class="line"> ks++;</span><br><span class="line"> <span class="keyword">int</span> p=malloc();</span><br><span class="line"> <span class="keyword">if</span>(p!=-<span class="number">1</span>){</span><br><span class="line"> a[p].g=i;</span><br><span class="line"> a[p].m=j;</span><br><span class="line"> a[p].x=n-i-j;</span><br><span class="line"> a[p].next=a[head].next;</span><br><span class="line"> a[head].next=p;</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="keyword">int</span> <span class="title">malloc</span><span class="params">()</span></span>{</span><br><span class="line"> <span class="keyword">if</span>(a[<span class="number">0</span>].next==-<span class="number">1</span>)<span class="keyword">return</span> -<span class="number">1</span>;</span><br><span class="line"> <span class="keyword">else</span>{</span><br><span class="line"> <span class="keyword">int</span> i=a[<span class="number">0</span>].next;</span><br><span class="line"> a[<span class="number">0</span>].next=a[i].next;</span><br><span class="line"> <span class="keyword">return</span> i;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="function"><span class="keyword">void</span> <span class="title">show</span><span class="params">()</span></span>{</span><br><span class="line"> <span class="keyword">if</span>(ks==<span class="number">0</span>){</span><br><span class="line"> System.out.println(<span class="string">"No Answer!"</span>);</span><br><span class="line"> <span class="keyword">return</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">int</span> q=a[head].next;</span><br><span class="line"> <span class="keyword">while</span>(q!=-<span class="number">1</span>){</span><br><span class="line"> a[q].show();</span><br><span class="line"> q=a[q].next;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span></span>{</span><br><span class="line"> Main m=<span class="keyword">new</span> Main();</span><br><span class="line"> m.show();</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<h3 id="静态链表的应用"><a href="#静态链表的应用" class="headerlink" title="静态链表的应用"></a>静态链表的应用</h3><figure class="highlight java"><table><tr><td class="
</summary>
<category term="算法" scheme="https://yys123456.github.io/categories/%E7%AE%97%E6%B3%95/"/>
<category term="n元买n鸡问题" scheme="https://yys123456.github.io/tags/n%E5%85%83%E4%B9%B0n%E9%B8%A1%E9%97%AE%E9%A2%98/"/>
</entry>
<entry>
<title>pat-1015 德才论</title>
<link href="https://yys123456.github.io/2019/08/12/pat-1015/"/>
<id>https://yys123456.github.io/2019/08/12/pat-1015/</id>
<published>2019-08-12T14:22:18.000Z</published>
<updated>2019-08-12T14:32:03.861Z</updated>
<content type="html"><![CDATA[<h3 id="1015-德才论-25-分"><a href="#1015-德才论-25-分" class="headerlink" title="1015 德才论 (25 分)"></a>1015 德才论 (25 分)</h3><p>宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人。凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人。”</p><p>现给出一批考生的德才分数,请根据司马光的理论给出录取排名。</p><h3 id="输入格式:"><a href="#输入格式:" class="headerlink" title="输入格式:"></a>输入格式:</h3><p>输入第一行给出 3 个正整数,分别为:<em>N</em>(≤105),即考生总数;<em>L</em>(≥60),为录取最低分数线,即德分和才分均不低于 <em>L</em> 的考生才有资格被考虑录取;<em>H</em>(<100),为优先录取线——德分和才分均不低于此线的被定义为“才德全尽”,此类考生按德才总分从高到低排序;才分不到但德分到线的一类考生属于“德胜才”,也按总分排序,但排在第一类考生之后;德才分均低于 <em>H</em>,但是德分不低于才分的考生属于“才德兼亡”但尚有“德胜才”者,按总分排序,但排在第二类考生之后;其他达到最低线 <em>L</em> 的考生也按<strong>总分</strong>排序,但排在第三类考生之后。</p><p>随后 <em>N</em> 行,每行给出一位考生的信息,包括:<code>准考证号 德分 才分</code>,其中<code>准考证号</code>为 8 位整数,德才分为区间 [0, 100] 内的整数。数字间以空格分隔。</p><h3 id="输出格式:"><a href="#输出格式:" class="headerlink" title="输出格式:"></a>输出格式:</h3><p>输出第一行首先给出达到最低分数线的考生人数 <em>M</em>,随后 <em>M</em> 行,每行按照输入格式输出一位考生的信息,考生按输入中说明的规则从高到低排序。当某类考生中有多人总分相同时,按其德分<strong>降序</strong>排列;若德分也并列,则按准考证号的<strong>升序</strong>输出。</p><h3 id="输入样例:"><a href="#输入样例:" class="headerlink" title="输入样例:"></a>输入样例:</h3><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">14 60 80</span><br><span class="line">10000001 64 90</span><br><span class="line">10000002 90 60</span><br><span class="line">10000011 85 80</span><br><span class="line">10000003 85 80</span><br><span class="line">10000004 80 85</span><br><span class="line">10000005 82 77</span><br><span class="line">10000006 83 76</span><br><span class="line">10000007 90 78</span><br><span class="line">10000008 75 79</span><br><span class="line">10000009 59 90</span><br><span class="line">10000010 88 45</span><br><span class="line">10000012 80 100</span><br><span class="line">10000013 90 99</span><br><span class="line">10000014 66 60</span><br></pre></td></tr></table></figure><h3 id="输出样例:"><a href="#输出样例:" class="headerlink" title="输出样例:"></a>输出样例:</h3><figure class="highlight plain"><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">12</span><br><span class="line">10000013 90 99</span><br><span class="line">10000012 80 100</span><br><span class="line">10000003 85 80</span><br><span class="line">10000011 85 80</span><br><span class="line">10000004 80 85</span><br><span class="line">10000007 90 78</span><br><span class="line">10000006 83 76</span><br><span class="line">10000005 82 77</span><br><span class="line">10000002 90 60</span><br><span class="line">10000014 66 60</span><br><span class="line">10000008 75 79</span><br><span class="line">10000001 64 90</span><br></pre></td></tr></table></figure><h3 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h3><p>本题数据的输入没有任何问题,有两个难点</p><ol><li><strong>对输入数据的筛选;</strong></li><li><strong>对所筛选的各批数据的排序操作。</strong></li></ol><h4 id="C-代码"><a href="#C-代码" class="headerlink" title="C++代码"></a>C++代码</h4><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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><bits/stdc++.h></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Student</span>{</span></span><br><span class="line"><span class="built_in">string</span> id;</span><br><span class="line"><span class="keyword">int</span> de;</span><br><span class="line"><span class="keyword">int</span> cai;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">Student(<span class="built_in">string</span> i,<span class="keyword">int</span> d,<span class="keyword">int</span> c):id(i),de(d),cai(c){</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">show</span><span class="params">()</span></span>{</span><br><span class="line"><span class="built_in">cout</span><<id<<<span class="string">' '</span><<de<<<span class="string">' '</span><<cai<<<span class="built_in">endl</span>;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">sum</span><span class="params">()</span> <span class="keyword">const</span></span>{</span><br><span class="line"><span class="keyword">return</span> de+cai;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">friend</span> <span class="keyword">bool</span> <span class="title">cmp</span><span class="params">(<span class="keyword">const</span> Student&,<span class="keyword">const</span> Student&)</span></span>;</span><br><span class="line">};</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">show</span><span class="params">(<span class="built_in">vector</span><Student>&v)</span></span>{</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<v.size();i++){</span><br><span class="line">v[i].show();</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"><span class="function"><span class="keyword">bool</span> <span class="title">cmp</span><span class="params">(<span class="keyword">const</span> Student&,<span class="keyword">const</span> Student&)</span></span>;</span><br><span class="line"><span class="built_in">vector</span><Student>v1,v2,v3,v4;</span><br><span class="line"><span class="keyword">int</span> ps=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">int</span> N,H,L;</span><br><span class="line"><span class="built_in">cin</span>>>N>>L>>H;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<N;i++){</span><br><span class="line"><span class="built_in">string</span> id;</span><br><span class="line"><span class="keyword">int</span> de,cai;</span><br><span class="line"><span class="built_in">cin</span>>>id>>de>>cai;</span><br><span class="line"><span class="keyword">if</span>(de>=L&&cai>=L){</span><br><span class="line">ps++;</span><br><span class="line"><span class="function">Student <span class="title">s</span><span class="params">(id,de,cai)</span></span>;</span><br><span class="line"><span class="keyword">if</span>(de>=H&&cai>=H)v1.push_back(s);</span><br><span class="line"><span class="keyword">else</span> <span class="keyword">if</span>(de>=H&&cai<H)v2.push_back(s);</span><br><span class="line"><span class="keyword">else</span> <span class="keyword">if</span>(de<H&&cai>=H)v4.push_back(s);</span><br><span class="line"><span class="keyword">else</span>{</span><br><span class="line"><span class="keyword">if</span>(cai<=de)v3.push_back(s);</span><br><span class="line"><span class="keyword">else</span> v4.push_back(s);</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line">sort(v1.begin(),v1.end(),cmp);</span><br><span class="line">sort(v2.begin(),v2.end(),cmp);</span><br><span class="line">sort(v3.begin(),v3.end(),cmp);</span><br><span class="line">sort(v4.begin(),v4.end(),cmp);</span><br><span class="line"><span class="built_in">cout</span><<ps<<<span class="built_in">endl</span>;</span><br><span class="line">show(v1);</span><br><span class="line">show(v2);</span><br><span class="line">show(v3);</span><br><span class="line">show(v4);</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="function"><span class="keyword">bool</span> <span class="title">cmp</span><span class="params">(<span class="keyword">const</span> Student&s1,<span class="keyword">const</span> Student&s2)</span></span>{</span><br><span class="line"><span class="keyword">int</span> sum1=s1.sum();</span><br><span class="line"><span class="keyword">int</span> sum2=s2.sum();</span><br><span class="line"><span class="keyword">if</span>(sum1<sum2)<span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line"><span class="keyword">else</span>{</span><br><span class="line"><span class="keyword">if</span>(sum1==sum2){</span><br><span class="line"><span class="keyword">if</span>(s1.de>s2.de)<span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line"><span class="keyword">else</span>{</span><br><span class="line"><span class="keyword">if</span>(s1.de==s2.de){</span><br><span class="line"><span class="keyword">if</span>(s1.id<s2.id)<span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line"><span class="keyword">else</span> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}<span class="keyword">else</span> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br><span class="line">}<span class="keyword">else</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><br><span class="line">}</span><br></pre></td></tr></table></figure><h4 id="Java代码"><a href="#Java代码" class="headerlink" title="Java代码"></a>Java代码</h4><figure class="highlight java"><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><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> java.util.*;</span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Student</span></span>{</span><br><span class="line"> String id;</span><br><span class="line"> <span class="keyword">int</span> cai,de;</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="title">Student</span><span class="params">(String id,<span class="keyword">int</span> cai,<span class="keyword">int</span> de)</span></span>{</span><br><span class="line"> <span class="keyword">this</span>.id=id;</span><br><span class="line"> <span class="keyword">this</span>.cai=cai;</span><br><span class="line"> <span class="keyword">this</span>.de=de;</span><br><span class="line"> }</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">show</span><span class="params">()</span></span>{</span><br><span class="line"> System.out.println(id+<span class="string">" "</span>+de+<span class="string">" "</span>+cai);</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Main</span></span>{</span><br><span class="line"> ArrayList<Student> s1,s2,s3,s4;</span><br><span class="line"> <span class="keyword">int</span> ps;<span class="comment">//达线人数</span></span><br><span class="line"> <span class="keyword">int</span> N,L,H;</span><br><span class="line"> Scanner scn;</span><br><span class="line"> Main(){</span><br><span class="line"> s1=<span class="keyword">new</span> ArrayList<Student>();</span><br><span class="line"> s2=<span class="keyword">new</span> ArrayList<Student>();</span><br><span class="line"> s3=<span class="keyword">new</span> ArrayList<Student>();</span><br><span class="line"> s4=<span class="keyword">new</span> ArrayList<Student>();</span><br><span class="line"> ps=<span class="number">0</span>;</span><br><span class="line"> scn=<span class="keyword">new</span> Scanner(System.in);</span><br><span class="line"> N=scn.nextInt();</span><br><span class="line"> L=scn.nextInt();</span><br><span class="line"> H=scn.nextInt();</span><br><span class="line"> process();</span><br><span class="line"> }</span><br><span class="line"> <span class="function"><span class="keyword">void</span> <span class="title">process</span><span class="params">()</span></span>{</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<N;i++){</span><br><span class="line"> String id;</span><br><span class="line"> <span class="keyword">int</span> cai,de;</span><br><span class="line"> Student s;</span><br><span class="line"> id=scn.next();</span><br><span class="line"> de=scn.nextInt();</span><br><span class="line"> cai=scn.nextInt();</span><br><span class="line"> s=<span class="keyword">new</span> Student(id,cai,de);</span><br><span class="line"> <span class="keyword">if</span>(de>=L&&cai>=L){</span><br><span class="line"> ps++;</span><br><span class="line"> <span class="keyword">if</span>(cai>=H&&de>=H){</span><br><span class="line"> s1.add(s);</span><br><span class="line"> }<span class="keyword">else</span> <span class="keyword">if</span>(cai<H&&de>=H){</span><br><span class="line"> s2.add(s);</span><br><span class="line"> }<span class="keyword">else</span> <span class="keyword">if</span>(cai>=H&&de<H){</span><br><span class="line"> s4.add(s);</span><br><span class="line"> }<span class="keyword">else</span>{</span><br><span class="line"> <span class="keyword">if</span>(cai<=de){</span><br><span class="line"> s3.add(s);</span><br><span class="line"> }<span class="keyword">else</span>{</span><br><span class="line"> s4.add(s);</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="keyword">void</span> <span class="title">display</span><span class="params">(ArrayList<Student>s)</span></span>{</span><br><span class="line"> <span class="keyword">for</span>(Student t:s){</span><br><span class="line"> t.show();</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="function"><span class="keyword">void</span> <span class="title">show</span><span class="params">()</span></span>{<span class="comment">//展示四类考生信息</span></span><br><span class="line"> System.out.println(ps);</span><br><span class="line"> cmp c=<span class="keyword">new</span> cmp();</span><br><span class="line"> Collections.sort(s1,c);</span><br><span class="line"> Collections.sort(s2,c);</span><br><span class="line"> Collections.sort(s3,c);</span><br><span class="line"> Collections.sort(s4,c);</span><br><span class="line"> display(s1);</span><br><span class="line"> display(s2);</span><br><span class="line"> display(s3);</span><br><span class="line"> display(s4);</span><br><span class="line"> }</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span></span>{</span><br><span class="line"> Main m=<span class="keyword">new</span> Main();</span><br><span class="line"> m.show();</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">cmp</span> <span class="keyword">implements</span> <span class="title">Comparator</span></span>{</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">int</span> <span class="title">compare</span><span class="params">(Object o1,Object o2)</span> </span>{</span><br><span class="line"> Student p1=(Student)o1;</span><br><span class="line"> Student p2=(Student)o2;</span><br><span class="line"> <span class="keyword">int</span> sum1=p1.cai+p1.de;</span><br><span class="line"> <span class="keyword">int</span> sum2=p2.cai+p2.de;</span><br><span class="line"> <span class="keyword">if</span>(sum1<sum2)</span><br><span class="line"> <span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> <span class="keyword">if</span>(sum1==sum2){</span><br><span class="line"> <span class="keyword">if</span>(p1.de<p2.de)</span><br><span class="line"> <span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(p1.de==p2.de){</span><br><span class="line"> <span class="comment">//比较学号</span></span><br><span class="line"> <span class="keyword">if</span>(p1.id.compareTo(p2.id)><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 class="keyword">else</span></span><br><span class="line"> <span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line"> }<span class="keyword">else</span> <span class="keyword">return</span> -<span class="number">1</span>;</span><br><span class="line"> }<span class="keyword">else</span></span><br><span class="line"> <span class="keyword">return</span> -<span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<h3 id="1015-德才论-25-分"><a href="#1015-德才论-25-分" class="headerlink" title="1015 德才论 (25 分)"></a>1015 德才论 (25 分)</h3><p>宋代史学家司马光在《资治通鉴》中有一段著名的
</summary>
<category term="pat" scheme="https://yys123456.github.io/categories/pat/"/>
<category term="1015" scheme="https://yys123456.github.io/tags/1015/"/>
</entry>
<entry>
<title>pat-1012数字分类</title>
<link href="https://yys123456.github.io/2019/08/11/pat-1012/"/>
<id>https://yys123456.github.io/2019/08/11/pat-1012/</id>
<published>2019-08-11T14:14:41.000Z</published>
<updated>2019-08-11T14:40:33.000Z</updated>
<content type="html"><![CDATA[<h3 id="1012-数字分类-20-分"><a href="#1012-数字分类-20-分" class="headerlink" title="1012 数字分类 (20 分)"></a>1012 数字分类 (20 分)</h3><p>给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字:</p><ul><li><em>A</em>1 = 能被 5 整除的数字中所有偶数的和;</li><li><em>A</em>2 = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 <em>n</em>1−<em>n</em>2+<em>n</em>3−<em>n</em>4⋯;</li><li><em>A</em>3 = 被 5 除后余 2 的数字的个数;</li><li><em>A</em>4 = 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位;</li><li><em>A</em>5 = 被 5 除后余 4 的数字中最大数字。</li></ul><h3 id="输入格式:"><a href="#输入格式:" class="headerlink" title="输入格式:"></a>输入格式:</h3><p>每个输入包含 1 个测试用例。每个测试用例先给出一个不超过 1000 的正整数 <em>N</em>,随后给出 <em>N</em> 个不超过 1000 的待分类的正整数。数字间以空格分隔。</p><h3 id="输出格式:"><a href="#输出格式:" class="headerlink" title="输出格式:"></a>输出格式:</h3><p>对给定的 <em>N</em> 个正整数,按题目要求计算 <em>A</em>1~<em>A</em>5 并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。</p><p>若其中某一类数字不存在,则在相应位置输出 <code>N</code>。</p><h3 id="输入样例-1:"><a href="#输入样例-1:" class="headerlink" title="输入样例 1:"></a>输入样例 1:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">13 1 2 3 4 5 6 7 8 9 10 20 16 18</span><br></pre></td></tr></table></figure><h3 id="输出样例-1:"><a href="#输出样例-1:" class="headerlink" title="输出样例 1:"></a>输出样例 1:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">30 11 2 9.7 9</span><br></pre></td></tr></table></figure><h3 id="输入样例-2:"><a href="#输入样例-2:" class="headerlink" title="输入样例 2:"></a>输入样例 2:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">8 1 2 4 5 6 7 9 16</span><br></pre></td></tr></table></figure><h3 id="输出样例-2:"><a href="#输出样例-2:" class="headerlink" title="输出样例 2:"></a>输出样例 2:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">N 11 2 N 9</span><br></pre></td></tr></table></figure><h3 id="本题思路"><a href="#本题思路" class="headerlink" title="本题思路"></a>本题思路</h3><p>思路很简单,先将所有备用数据存储再数组中,然后从前向后遍历数组,并对每一个元素进行相应的判断,但是这一题<strong>最需要注意的地方不是对于$A1-A5$的计算,而是对$A1-A5$中每一个值是否计算出来的判断,即需要使用一种方法来判断在输出$A1-A5$时是否以N来替代的问题。</strong></p><p>设想一种非常理想的情况,$A1-A5$都存在,所以输出也变得简单,只需要对每一个按照题目格式输出即可,但是<strong>不理想的情况就是$A1-A5$中有一些值由于原本数据给的不好而造成的不存在问题</strong>。</p><p>对于这种问题应该如何去处理,需要对$A1-A5$分别考虑:</p><p><strong><em>A</em>1 = 能被 5 整除的数字中所有偶数的和(都是正整数)</strong></p><p>设置A1初值为0</p><script type="math/tex; mode=display">A1不存在\longrightarrow{A1==0}</script><p><strong><em>A</em>2 = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 <em>n</em>1−<em>n</em>2+<em>n</em>3−<em>n</em>4⋯;</strong></p><p>由于交错求和结果可能为0,所以也就不可以用结果是否为0来判断A2是否存在了,所以需要引入满足A2条件的数的个数K2,K2初值设为0</p><script type="math/tex; mode=display">A2不存在\longrightarrow{K2==0}</script><p><strong><em>A</em>3 = 被 5 除后余 2 的数字的个数;</strong></p><p>设置A3初值为0</p><script type="math/tex; mode=display">A3不存在\longrightarrow{A3==0}</script><p><strong><em>A</em>4 = 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位;</strong></p><p>设置A4初值为0</p><p>由于A4计算的是正整数的平均值所以也可以得到A4若存在则A4必定大于0</p><script type="math/tex; mode=display">A4不存在\longrightarrow{A4==0}</script><p><strong><em>A</em>5 = 被 5 除后余 4 的数字中最大数字。</strong></p><p>设置A5初值为0</p><script type="math/tex; mode=display">A5不存在\longrightarrow{A5==0}</script><p><strong>综上:得出A2需要特殊对待(即在在输出A2时决定是否替代输出N由K2是否等于0决定)。</strong></p><h3 id="Java代码"><a href="#Java代码" class="headerlink" title="Java代码"></a>Java代码</h3><figure class="highlight java"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> java.util.Scanner;</span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Main</span></span>{</span><br><span class="line"><span class="keyword">int</span>[] a;<span class="comment">//保存数据</span></span><br><span class="line">Scanner scn;</span><br><span class="line"><span class="keyword">int</span> a1=<span class="number">0</span>,a2=<span class="number">0</span>,a3=<span class="number">0</span>,a5=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">static</span> <span class="keyword">int</span> plain=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">int</span> k2=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">double</span> a4=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">int</span> flag=<span class="number">1</span>;</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">Main</span><span class="params">()</span></span>{</span><br><span class="line"><span class="keyword">int</span> k4=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">int</span> N;</span><br><span class="line">scn=<span class="keyword">new</span> Scanner(System.in);</span><br><span class="line">N=scn.nextInt();</span><br><span class="line">a=<span class="keyword">new</span> <span class="keyword">int</span>[N];</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<N;i++)</span><br><span class="line">a[i]=scn.nextInt();</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> t:a){</span><br><span class="line"><span class="keyword">if</span>(t%<span class="number">5</span>==<span class="number">0</span>){</span><br><span class="line"><span class="keyword">if</span>(t%<span class="number">2</span>==<span class="number">0</span>)</span><br><span class="line">a1+=t;</span><br><span class="line">}<span class="keyword">else</span>{</span><br><span class="line"><span class="keyword">if</span>(t%<span class="number">5</span>==<span class="number">1</span>){</span><br><span class="line">k2++;</span><br><span class="line">a2+=t*flag;</span><br><span class="line">flag=-flag;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">if</span>(t%<span class="number">5</span>==<span class="number">2</span>){</span><br><span class="line">a3++;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">if</span>(t%<span class="number">5</span>==<span class="number">3</span>){</span><br><span class="line">k4++;</span><br><span class="line">a4+=(<span class="keyword">double</span>)t;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">if</span>(t%<span class="number">5</span>==<span class="number">4</span>){</span><br><span class="line"><span class="keyword">if</span>(a5<t)</span><br><span class="line">a5=t;</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line">a4/=(k4==<span class="number">0</span>?<span class="number">1</span>:k4);</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">display</span><span class="params">(<span class="keyword">double</span> t)</span></span>{</span><br><span class="line">System.out.print((t==<span class="number">0</span>?<span class="string">"N"</span>:String.format(<span class="string">"%.1f"</span>,t))+<span class="string">" "</span>);</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">display</span><span class="params">(<span class="keyword">int</span> t)</span></span>{</span><br><span class="line">plain++;</span><br><span class="line"><span class="keyword">if</span>(plain==<span class="number">2</span>){</span><br><span class="line">System.out.print((k2==<span class="number">0</span>?<span class="string">"N"</span>:String.format(<span class="string">"%d"</span>,t))+<span class="string">" "</span>);</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>(plain<<span class="number">4</span>){</span><br><span class="line">System.out.print((t==<span class="number">0</span>?<span class="string">"N"</span>:String.format(<span class="string">"%d"</span>,t))+<span class="string">" "</span>);</span><br><span class="line">}<span class="keyword">else</span>{</span><br><span class="line">System.out.println((t==<span class="number">0</span>?<span class="string">"N"</span>:String.format(<span class="string">"%d"</span>,t)));</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">show</span><span class="params">()</span></span>{</span><br><span class="line">display(a1);</span><br><span class="line">display(a2);</span><br><span class="line">display(a3);</span><br><span class="line">display(a4);</span><br><span class="line">display(a5);</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span></span>{</span><br><span class="line">Main m=<span class="keyword">new</span> Main();</span><br><span class="line">m.show();</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<h3 id="1012-数字分类-20-分"><a href="#1012-数字分类-20-分" class="headerlink" title="1012 数字分类 (20 分)"></a>1012 数字分类 (20 分)</h3><p>给定一系列正整数,请按要求对数字进行
</summary>
<category term="pat" scheme="https://yys123456.github.io/categories/pat/"/>
<category term="1012" scheme="https://yys123456.github.io/tags/1012/"/>
</entry>
<entry>
<title>pat输出叶子结点</title>
<link href="https://yys123456.github.io/2019/08/11/pat%E8%BE%93%E5%87%BA%E5%8F%B6%E5%AD%90%E7%BB%93%E7%82%B9/"/>
<id>https://yys123456.github.io/2019/08/11/pat输出叶子结点/</id>
<published>2019-08-11T06:34:15.000Z</published>
<updated>2019-08-11T14:42:20.230Z</updated>
<content type="html"><![CDATA[<h3 id="7-4-List-Leaves-25-分"><a href="#7-4-List-Leaves-25-分" class="headerlink" title="7-4 List Leaves (25 分)"></a>7-4 List Leaves (25 分)</h3><p>Given a tree, you are supposed to list all the leaves in the order of top down, and left to right.</p><h3 id="Input-Specification"><a href="#Input-Specification" class="headerlink" title="Input Specification:"></a>Input Specification:</h3><p>Each input file contains one test case. For each case, the first line gives a positive integer <em>N</em> (≤10) which is the total number of nodes in the tree — and hence the nodes are numbered from 0 to <em>N</em>−1. Then <em>N</em> lines follow, each corresponds to a node, and gives the indices of the left and right children of the node. If the child does not exist, a “-“ will be put at the position. Any pair of children are separated by a space.</p><h3 id="Output-Specification"><a href="#Output-Specification" class="headerlink" title="Output Specification:"></a>Output Specification:</h3><p>For each test case, print in one line all the leaves’ indices in the order of top down, and left to right. There must be exactly one space between any adjacent numbers, and no extra space at the end of the line.</p><h3 id="Sample-Input"><a href="#Sample-Input" class="headerlink" title="Sample Input:"></a>Sample Input:</h3><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">8</span><br><span class="line">1 -</span><br><span class="line">- -</span><br><span class="line">0 -</span><br><span class="line">2 7</span><br><span class="line">- -</span><br><span class="line">- -</span><br><span class="line">5 -</span><br><span class="line">4 6</span><br></pre></td></tr></table></figure><h3 id="Sample-Output"><a href="#Sample-Output" class="headerlink" title="Sample Output:"></a>Sample Output:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">4 1 5</span><br></pre></td></tr></table></figure><h3 id="读题"><a href="#读题" class="headerlink" title="读题"></a>读题</h3><p>输入数据给出结点个数N,并且给出每一个结点(0~N-1)的左右孩子结点情况,需要得到这个二叉树的所有叶子结点的序号。并且要求输出叶子结点时需要按照不同深度从上到下,同一深度从左向右的顺序输出叶子结点的序号。</p><p>输入数据分析</p><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">8 #总结点个数#</span><br><span class="line">1 - #0号结点的左右孩子情况#</span><br><span class="line">- - #1号结点的左右孩子情况#</span><br><span class="line">0 -#2号结点的左右孩子情况#</span><br><span class="line">2 7#3号结点的左右孩子情况#</span><br><span class="line">- -#4号结点的左右孩子情况#</span><br><span class="line">- - #...#</span><br><span class="line">5 - #...#</span><br><span class="line">4 6 #7号结点的左右孩子情况#</span><br></pre></td></tr></table></figure><p>通过输入的数据情况,很容易就可以得到一个结论:<strong>3号结点是根结点</strong>。</p><p>因为3号结点不作为任何一个结点的孩子结点,即3号结点没有前驱结点。</p><p>所以只要从3号结点进入进行广度优先遍历(因为用广度优先遍历出来的顺序符合→,↓)就可以将整棵树走一遍了,然后在将整棵树走一遍的过程中,必然会遇到叶子结点,而叶子结点就是我所需要的结点,将代表叶子结点的序号保存起来即可。</p><h3 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h3><ol><li>找到根节点;</li><li>从根节点进入二叉树;</li><li>对二叉树进行广度优先遍历;</li><li>遍历过程中,如果遇到没有左右孩子的结点,就存储起来;</li><li>遍历完成之后,输出存储好的叶子结点。</li></ol><h3 id="算法过程"><a href="#算法过程" class="headerlink" title="算法过程"></a>算法过程</h3><h4 id="算法实现大致过程"><a href="#算法实现大致过程" class="headerlink" title="算法实现大致过程"></a>算法实现大致过程</h4><ol><li>通过一些方式找到整型值root;</li><li>从root开始广度优先遍历,并找叶子结点;</li><li>按顺序输出叶子结点。</li></ol><h4 id="对二叉树的广度优先遍历"><a href="#对二叉树的广度优先遍历" class="headerlink" title="对二叉树的广度优先遍历"></a>对二叉树的广度优先遍历</h4><p>对二叉树的广度优先遍历和图的广度优先遍历非常类似,但是更加简单,因为没有以下问题</p><ol><li>连通性(二叉树一定是无向连通图);</li><li>设置标记数组的问题(二叉树从根出发,一定只会向下走,而不会再回头看,即某一个结点相邻的结点并不包含它的双亲结点,而是只有它的孩子结点);</li><li>起点设置问题(起点只能为根结点)。</li></ol><h5 id="遍历过程(借助队列)"><a href="#遍历过程(借助队列)" class="headerlink" title="遍历过程(借助队列)"></a>遍历过程(借助队列)</h5><ol><li>检查二叉树是否只有根结点?只有根结点转到2:转到3;</li><li>根结点就是唯一的<strong>叶子(既作为根也作为叶子)</strong>结点,访问它,转到9;</li><li>将根结点入队,转到4;</li><li>判断队列是否为空?转到9:转到5;</li><li>取出队列的队首(front)元素x,并得到此队首元素的左右孩子lc、rc,然后让x出队;</li><li>判断lc是否为空,若不为空(表明是一个结点),访问它,然后入队;</li><li>判断rc是否为空,若不为空(表明是一个结点),访问它,然后入队;</li><li>转到4;</li><li>结束。</li></ol><p><strong>注意,在这个算法中,我一定会保证不让空结点入队。</strong></p><h4 id="算法实现"><a href="#算法实现" class="headerlink" title="算法实现"></a>算法实现</h4><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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">< bits / stdc++.h > </span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="keyword">typedef</span> <span class="class"><span class="keyword">struct</span> {</span></span><br><span class="line"> <span class="keyword">char</span> lc;</span><br><span class="line"> <span class="keyword">char</span> rc;</span><br><span class="line">}Tnode;</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>{</span><br><span class="line"> <span class="keyword">int</span> N; <span class="comment">//结点范围是0~N-1</span></span><br><span class="line"> <span class="keyword">int</span> * ved;<span class="comment">//用来得到根结点</span></span><br><span class="line"> <span class="keyword">int</span> root;<span class="comment">//根结点序号</span></span><br><span class="line"> <span class="built_in">vector</span> < <span class="keyword">int</span> > v; <span class="comment">//存放所有叶子 </span></span><br><span class="line"> <span class="built_in">queue</span> < <span class="keyword">char</span> > q1; <span class="comment">//做广度优先搜索 因为结点的左右孩子数据妥协于'-'所以用char</span></span><br><span class="line"> </span><br><span class="line"> <span class="built_in">cin</span> >> N;</span><br><span class="line"> ved = <span class="keyword">new</span> <span class="keyword">int</span>[N](); </span><br><span class="line"> Tnode * p = <span class="keyword">new</span> Tnode[N]; <span class="comment">//存放各个结点数据</span></span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i < N; i++) {</span><br><span class="line"> <span class="keyword">char</span> a;</span><br><span class="line"> <span class="built_in">cin</span> >> a;</span><br><span class="line"> <span class="keyword">if</span> (a != <span class="string">'-'</span>) ved[a - <span class="string">'0'</span>]++;</span><br><span class="line"> p[i].lc = a;</span><br><span class="line"> <span class="built_in">cin</span> >> a;</span><br><span class="line"> <span class="keyword">if</span> (a != <span class="string">'-'</span>) ved[a - <span class="string">'0'</span>]++;</span><br><span class="line"> p[i].rc = a;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i < N; i++) {</span><br><span class="line"> <span class="keyword">if</span> (ved[i] == <span class="number">0</span>) {</span><br><span class="line"> root = i;</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="comment">//得到根节点入口为root</span></span><br><span class="line"> <span class="comment">//此处的广度优先遍历将‘访问’换成了‘判断是否为叶子并存储’</span></span><br><span class="line"> <span class="keyword">if</span> (p[root].lc == <span class="string">'-'</span> && p[root].rc == <span class="string">'-'</span>) v.push_back(root); <span class="comment">//只有一个根节点</span></span><br><span class="line"> <span class="keyword">else</span> {</span><br><span class="line"> q1.push(root + <span class="string">'0'</span>);</span><br><span class="line"> <span class="keyword">while</span> (!q1.empty()) {</span><br><span class="line"> <span class="keyword">int</span> u = q1.front() - <span class="string">'0'</span>;</span><br><span class="line"> q1.pop();</span><br><span class="line"> <span class="keyword">char</span> lc = p[u].lc;</span><br><span class="line"> <span class="keyword">char</span> rc = p[u].rc;</span><br><span class="line"> <span class="keyword">if</span> (lc != <span class="string">'-'</span>) { </span><br><span class="line"> <span class="keyword">if</span> (p[lc - <span class="string">'0'</span>].lc == <span class="string">'-'</span> && p[lc - <span class="string">'0'</span>].rc == <span class="string">'-'</span>) v.push_back(lc - <span class="string">'0'</span>);</span><br><span class="line"> q1.push(lc);</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span> (rc != <span class="string">'-'</span>) { </span><br><span class="line"> <span class="keyword">if</span> (p[rc - <span class="string">'0'</span>].lc == <span class="string">'-'</span> && p[rc - <span class="string">'0'</span>].rc == <span class="string">'-'</span>) v.push_back(rc - <span class="string">'0'</span>);</span><br><span class="line"> q1.push(rc);</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i < v.size(); i++) {</span><br><span class="line"> <span class="keyword">if</span> (i == v.size() - <span class="number">1</span>) <span class="built_in">cout</span> << v[i];</span><br><span class="line"> <span class="keyword">else</span> <span class="built_in">cout</span> << v[i] << <span class="string">' '</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">delete</span>[] ved;</span><br><span class="line"> <span class="keyword">delete</span>[] p;</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">
<h3 id="7-4-List-Leaves-25-分"><a href="#7-4-List-Leaves-25-分" class="headerlink" title="7-4 List Leaves (25 分)"></a>7-4 List Leaves (25 分)</
</summary>
<category term="pat" scheme="https://yys123456.github.io/categories/pat/"/>
<category term="7-4" scheme="https://yys123456.github.io/tags/7-4/"/>
</entry>
<entry>
<title>pat-1041</title>
<link href="https://yys123456.github.io/2019/08/10/pat-1041/"/>
<id>https://yys123456.github.io/2019/08/10/pat-1041/</id>
<published>2019-08-10T05:21:14.000Z</published>
<updated>2019-08-10T05:22:30.961Z</updated>
<content type="html"><![CDATA[<h3 id="1041-考试座位号-15-分"><a href="#1041-考试座位号-15-分" class="headerlink" title="1041 考试座位号 (15 分)"></a>1041 考试座位号 (15 分)</h3><p>每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座。但有些考生迟到了,试机已经结束,他们只能拿着领到的试机座位号码求助于你,从后台查出他们的考试座位号码。</p><h3 id="输入格式:"><a href="#输入格式:" class="headerlink" title="输入格式:"></a>输入格式:</h3><p>输入第一行给出一个正整数 <em>N</em>(≤1000),随后 <em>N</em> 行,每行给出一个考生的信息:<code>准考证号 试机座位号 考试座位号</code>。其中<code>准考证号</code>由 16 位数字组成,座位从 1 到 <em>N</em> 编号。输入保证每个人的准考证号都不同,并且任何时候都不会把两个人分配到同一个座位上。</p><p>考生信息之后,给出一个正整数 <em>M</em>(≤<em>N</em>),随后一行中给出 <em>M</em> 个待查询的试机座位号码,以空格分隔。</p><h3 id="输出格式:"><a href="#输出格式:" class="headerlink" title="输出格式:"></a>输出格式:</h3><p>对应每个需要查询的试机座位号码,在一行中输出对应考生的准考证号和考试座位号码,中间用 1 个空格分隔。</p><h3 id="输入样例:"><a href="#输入样例:" class="headerlink" title="输入样例:"></a>输入样例:</h3><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">4</span><br><span class="line">3310120150912233 2 4</span><br><span class="line">3310120150912119 4 1</span><br><span class="line">3310120150912126 1 3</span><br><span class="line">3310120150912002 3 2</span><br><span class="line">2</span><br><span class="line">3 4</span><br></pre></td></tr></table></figure><h3 id="输出样例:"><a href="#输出样例:" class="headerlink" title="输出样例:"></a>输出样例:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">3310120150912002 2</span><br><span class="line">3310120150912119 1</span><br></pre></td></tr></table></figure><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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><bits/stdc++.h></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="keyword">typedef</span> <span class="class"><span class="keyword">struct</span>{</span></span><br><span class="line"><span class="built_in">string</span> a;<span class="comment">//准考证号 </span></span><br><span class="line"><span class="keyword">int</span> b;<span class="comment">//座位号 </span></span><br><span class="line"><span class="keyword">int</span> c;<span class="comment">//考试座位号 </span></span><br><span class="line">}xxx;</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line">xxx*t;</span><br><span class="line"><span class="keyword">int</span> n;</span><br><span class="line"><span class="built_in">cin</span>>>n;</span><br><span class="line">t=<span class="keyword">new</span> xxx[n];</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<n;i++){</span><br><span class="line"><span class="built_in">string</span> s;</span><br><span class="line"><span class="keyword">int</span> b;</span><br><span class="line"><span class="keyword">int</span> c;</span><br><span class="line"><span class="built_in">cin</span>>>s>>b>>c;</span><br><span class="line">t[b<span class="number">-1</span>].a=s;</span><br><span class="line">t[b<span class="number">-1</span>].b=b;</span><br><span class="line">t[b<span class="number">-1</span>].c=c;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">int</span> r;</span><br><span class="line"><span class="built_in">cin</span>>>r;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<r;i++){</span><br><span class="line"><span class="keyword">int</span> p;</span><br><span class="line"><span class="built_in">cin</span>>>p;</span><br><span class="line"><span class="built_in">cout</span><<t[p<span class="number">-1</span>].a<<<span class="string">' '</span><<t[p<span class="number">-1</span>].c<<<span class="built_in">endl</span>;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">delete</span>[] t;</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">
<h3 id="1041-考试座位号-15-分"><a href="#1041-考试座位号-15-分" class="headerlink" title="1041 考试座位号 (15 分)"></a>1041 考试座位号 (15 分)</h3><p>每个 PAT 考生在参加考试
</summary>
<category term="pat" scheme="https://yys123456.github.io/categories/pat/"/>
<category term="1041" scheme="https://yys123456.github.io/tags/1041/"/>
</entry>
<entry>
<title>快速排序</title>
<link href="https://yys123456.github.io/2019/08/10/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F/"/>
<id>https://yys123456.github.io/2019/08/10/快速排序/</id>
<published>2019-08-10T03:30:48.000Z</published>
<updated>2019-08-10T05:00:47.472Z</updated>
<content type="html"><![CDATA[<h3 id="算法描述"><a href="#算法描述" class="headerlink" title="算法描述"></a>算法描述</h3><p>快速排序是一种含有递归思想的排序方法,主要思想是<strong>分而治之</strong>。对于一整个的线性表,对其进行快速排序就是对这个线性表的不同部分进行快速排序。</p><p>注意,快速排序并不是一个一次完成的过程,使用快速排序的方法对一个顺序表进行排序需要对这个线性表进行多次快速排序过程。</p><h3 id="递归算法过程"><a href="#递归算法过程" class="headerlink" title="递归算法过程"></a>递归算法过程</h3><p>假设对整型数组T(它可能是一个数组,也可能是一个子数组)进行非递减排序</p><h4 id="定义一趟快速排序(需要原料低位指针low,高位指针high)"><a href="#定义一趟快速排序(需要原料低位指针low,高位指针high)" class="headerlink" title="定义一趟快速排序(需要原料低位指针low,高位指针high)"></a>定义一趟快速排序(需要原料低位指针low,高位指针high)</h4><ol><li>保存低位low所指向的值temp(枢轴记录,这个值决定了返回的枢轴);</li><li>使用指针high从后向前扫描(期间满足high>low),找到第一个使得T[high]<temp的high,然后让T[low]=T[high];</li><li>使用指针low从前向后扫描(期间满足high>low,注意high已经改变),找到第一个使得T[low]>temp的low,然后让T[high]=T[low];</li><li>low<high?转到2:转到5;</li><li>令T[low]=temp;</li><li>将low作为pivot返回。</li></ol><h4 id="对整个数组T使用快速排序算法(QSort)的过程(不断地利用一趟快速排序)"><a href="#对整个数组T使用快速排序算法(QSort)的过程(不断地利用一趟快速排序)" class="headerlink" title="对整个数组T使用快速排序算法(QSort)的过程(不断地利用一趟快速排序)"></a>对整个数组T使用快速排序算法(QSort)的过程(不断地利用一趟快速排序)</h4><ol><li>进入QSort(low,high);</li><li>接受决定排序部位地low,high指针;</li><li>判断low<high?转到3:不予排序;</li><li>对low,high之间地元素使用一次快速排序,得到返回值k;</li><li>递归调用QSort(low,k-1)(枢轴的前面);</li><li>递归调用QSort(k+1,high)(枢轴的后面);</li></ol><h4 id="C-代码的算法实现部分"><a href="#C-代码的算法实现部分" class="headerlink" title="C++代码的算法实现部分"></a>C++代码的算法实现部分</h4><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></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">getPivot</span><span class="params">(node*L,<span class="keyword">int</span> low,<span class="keyword">int</span> high,<span class="keyword">bool</span>(*cmp)(<span class="keyword">char</span>,<span class="keyword">char</span>))</span></span>{<span class="comment">//一次快排</span></span><br><span class="line">node temp=L[low];</span><br><span class="line"><span class="keyword">while</span>(low<high){</span><br><span class="line"><span class="keyword">while</span>(low<high&&cmp(L[high].data,temp.data))high--;</span><br><span class="line">L[low]=L[high];</span><br><span class="line"><span class="keyword">while</span>(low<high&&cmp(temp.data,L[low].data))low++;</span><br><span class="line">L[high]=L[low];</span><br><span class="line">}</span><br><span class="line">L[low]=temp;</span><br><span class="line"><span class="keyword">return</span> low;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">Qsort</span><span class="params">(node*L,<span class="keyword">int</span> low,<span class="keyword">int</span> high,<span class="keyword">bool</span>(*cmp)(<span class="keyword">char</span>,<span class="keyword">char</span>))</span></span>{</span><br><span class="line"><span class="keyword">if</span>(low<high){</span><br><span class="line"><span class="keyword">int</span> t=getPivot(L,low,high,cmp);</span><br><span class="line">Qsort(L,low,t<span class="number">-1</span>,cmp);</span><br><span class="line">Qsort(L,t+<span class="number">1</span>,high,cmp);</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h3 id="非递归算法过程"><a href="#非递归算法过程" class="headerlink" title="非递归算法过程"></a>非递归算法过程</h3><p>使用非递归快速排序,需要借助栈来实现,思想仍然是<strong>分治</strong>。</p><h4 id="借助栈来实现非递归的快排QSort,过程如下"><a href="#借助栈来实现非递归的快排QSort,过程如下" class="headerlink" title="借助栈来实现非递归的快排QSort,过程如下"></a>借助栈来实现非递归的快排QSort,过程如下</h4><ol><li>进入QSort(low,high);</li><li>接受决定排序部位地low,high指针;</li><li>判断low<high?转到3:不予排序;</li><li>将low,high分别压栈(此处正式进入分治的过程);</li><li>判断当前栈是否为空,若为空则转到11,否则将栈顶的两个元素进行弹栈i和j,分别作为high和low(注意顺序);</li><li>i<j?转到7:转到5;</li><li>使用一次快排,得到枢轴k;</li><li>如果i<k,则将i压栈,k压栈;</li><li>如果k<j,将k压栈,j压栈;</li><li>转到5;</li><li>结束。</li></ol><p><strong>实际上栈中存放的元素就是需要进行快排的low,high元素对。</strong></p><h4 id="C-算法实现部分代码"><a href="#C-算法实现部分代码" class="headerlink" title="C++算法实现部分代码"></a>C++算法实现部分代码</h4><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></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">Qsort1</span><span class="params">(node*L,<span class="keyword">int</span> low,<span class="keyword">int</span> high,<span class="keyword">bool</span>(*cmp)(<span class="keyword">char</span>,<span class="keyword">char</span>))</span></span>{</span><br><span class="line"><span class="comment">//非递归</span></span><br><span class="line"><span class="keyword">if</span>(low<high){</span><br><span class="line"><span class="built_in">stack</span><<span class="keyword">int</span>>p;</span><br><span class="line">p.push(low);</span><br><span class="line">p.push(high);</span><br><span class="line"><span class="keyword">while</span>(!p.empty()){</span><br><span class="line"><span class="keyword">int</span> i=p.top();<span class="comment">//h</span></span><br><span class="line">p.pop();</span><br><span class="line"><span class="keyword">int</span> j=p.top();<span class="comment">//l</span></span><br><span class="line">p.pop();</span><br><span class="line"><span class="keyword">int</span> t=getPivot(L,j,i,cmp);<span class="comment">//单次快排</span></span><br><span class="line"><span class="keyword">if</span>(t>j){</span><br><span class="line">p.push(j);</span><br><span class="line">p.push(t<span class="number">-1</span>);</span><br><span class="line">}</span><br><span class="line"><span class="keyword">if</span>(t<i){</span><br><span class="line">p.push(t+<span class="number">1</span>);</span><br><span class="line">p.push(i);</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><p>时间复杂度</p><script type="math/tex; mode=display">O(nlogn)</script>]]></content>
<summary type="html">
<h3 id="算法描述"><a href="#算法描述" class="headerlink" title="算法描述"></a>算法描述</h3><p>快速排序是一种含有递归思想的排序方法,主要思想是<strong>分而治之</strong>。对于一整个的线性表,对其进行快速
</summary>
<category term="数据结构" scheme="https://yys123456.github.io/categories/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
<category term="快速排序" scheme="https://yys123456.github.io/tags/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F/"/>
</entry>
<entry>
<title>直接插入排序</title>
<link href="https://yys123456.github.io/2019/08/09/%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F/"/>
<id>https://yys123456.github.io/2019/08/09/插入排序/</id>
<published>2019-08-09T12:55:56.000Z</published>
<updated>2019-08-10T03:26:10.497Z</updated>
<content type="html"><![CDATA[<h3 id="算法描述"><a href="#算法描述" class="headerlink" title="算法描述"></a>算法描述</h3><p>对于一个线性表,将这个线性表分为有序和无序的两个部分,对无序部分进行扫描,并对扫描到的每一个元素考虑它应当在有序部分插入的位置(保证插入之后仍为有序),然后将这个元素插入到有序部分,此后,逐渐扩大有序部分,直到整个线性表。</p><p>对于一个未经排序的线性表,认为第一个元素是有序的,然后进行$n-1$次的插入排序。即从线性表的第二个元素开始依次向后,对每一个元素考虑它要插入在有序部分的位置,然后进行插入操作。</p><h3 id="算法步骤(以非递减排序为例,即线性表中的有序部分是非递减的)"><a href="#算法步骤(以非递减排序为例,即线性表中的有序部分是非递减的)" class="headerlink" title="算法步骤(以非递减排序为例,即线性表中的有序部分是非递减的)"></a>算法步骤(以非递减排序为例,即线性表中的有序部分是非递减的)</h3><ol><li>从第二个元素开始向后扫描线性表(取每一个无序部分的元素进行操作);</li><li>判断1中$i$位置取出的元素x和它前面的那个元素$y_t (t=i-1)$的大小关系,如果大于等于就回到1,否则转到3;</li><li>此时x小于等于$y_t$,所以要进行x插入位置的确定,转到4;</li><li>将$y_t$向后移动一位,然后再判断x和$y_{t}(t=t-1)$的大小关系,直到到了某一个$t$的值使得$y_t≤x或者t==-1$时将$x$赋值给$y_{t+1}$,然后转到1。</li></ol><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="meta">#<span class="meta-keyword">include</span><span class="meta-string"><bits/stdc++.h></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="comment">//插入排序 </span></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">node</span>{</span></span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"><span class="keyword">char</span> data;</span><br><span class="line"><span class="keyword">int</span> index;</span><br><span class="line">};</span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> len=<span class="number">8</span>;</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">show</span><span class="params">(node*L)</span></span>{</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<len;i++){</span><br><span class="line"><span class="built_in">cout</span><<L[i].data<<<span class="string">' '</span>;</span><br><span class="line">}</span><br><span class="line"><span class="built_in">cout</span><<<span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<len;i++){</span><br><span class="line"><span class="built_in">cout</span><<L[i].index<<<span class="string">' '</span>;</span><br><span class="line">}</span><br><span class="line"><span class="built_in">cout</span><<<span class="built_in">endl</span>;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">insertSort</span><span class="params">(node*L,<span class="keyword">bool</span>(*cmp)(<span class="keyword">char</span>,<span class="keyword">char</span>))</span></span>{<span class="comment">//认为第一个是有序的,进行len-1次插入排序 从小到大排序 </span></span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<len;i++){</span><br><span class="line"><span class="comment">//首先判断是否有必要进行插入排序</span></span><br><span class="line"><span class="keyword">if</span>(!cmp(L[i].data,L[i<span class="number">-1</span>].data)){</span><br><span class="line">node temp=L[i];</span><br><span class="line"><span class="keyword">int</span> j;</span><br><span class="line"><span class="keyword">for</span>(j=i<span class="number">-1</span>;j>=<span class="number">0</span>&&cmp(L[j].data,temp.data);j--)</span><br><span class="line">L[j+<span class="number">1</span>]=L[j];</span><br><span class="line">L[j+<span class="number">1</span>]=temp;</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="keyword">bool</span> <span class="title">cmp</span><span class="params">(<span class="keyword">char</span> a,<span class="keyword">char</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 class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line">node line[]={{<span class="string">'B'</span>,<span class="number">0</span>},{<span class="string">'A'</span>,<span class="number">1</span>},{<span class="string">'D'</span>,<span class="number">2</span>},{<span class="string">'Z'</span>,<span class="number">3</span>},{<span class="string">'M'</span>,<span class="number">4</span>},{<span class="string">'E'</span>,<span class="number">5</span>},{<span class="string">'A'</span>,<span class="number">6</span>},{<span class="string">'S'</span>,<span class="number">7</span>}};</span><br><span class="line"><span class="built_in">cout</span><<<span class="string">"before:"</span><<<span class="built_in">endl</span>;</span><br><span class="line">show(line);</span><br><span class="line">insertSort(line,cmp);</span><br><span class="line"><span class="built_in">cout</span><<<span class="string">"after:"</span><<<span class="built_in">endl</span>;</span><br><span class="line">show(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><blockquote><p>运行结果</p><p>before:<br>B A D Z M E A S<br>0 1 2 3 4 5 6 7<br>after:<br>A A B D E M S Z<br>6 1 0 2 5 4 7 3</p></blockquote><p>通过运行结果可以发现,直接插入排序是不稳定的。</p><p>时间复杂度分析</p><p>因为对于一个线性表中的每一个元素而言,移动的次数都不是统一的,所以考虑<strong>最坏情况下</strong>的时间复杂度,及将一个非递增的线性表插入排序成为非递减线性表,可得总移动次数为</p><script type="math/tex; mode=display">\sum_{i=1}^{n}(i-1)=\frac{(n-1)\times{n}}{2}=\frac{n^2-n}{2}</script><p>所以可得时间复杂度为$O(n^2)$。</p><h3 id="对于一般的数组应用插入排序"><a href="#对于一般的数组应用插入排序" class="headerlink" title="对于一般的数组应用插入排序"></a>对于一般的数组应用插入排序</h3><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="meta-keyword">include</span><span class="meta-string"><bits/stdc++.h></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">show</span><span class="params">(<span class="keyword">int</span>*a,<span class="keyword">int</span> n)</span></span>{</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<n;i++){</span><br><span class="line"><span class="built_in">cout</span><<a[i]<<<span class="string">' '</span>;</span><br><span class="line">}</span><br><span class="line"><span class="built_in">cout</span><<<span class="built_in">endl</span>;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">insertSort</span><span class="params">(<span class="keyword">int</span>*a,<span class="keyword">int</span> n,<span class="keyword">bool</span>(*cmp)(<span class="keyword">int</span>,<span class="keyword">int</span>))</span></span>{<span class="comment">//非递减排序 </span></span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<n;i++){</span><br><span class="line"><span class="keyword">int</span> temp=a[i];</span><br><span class="line"><span class="keyword">if</span>(!cmp(temp,a[i<span class="number">-1</span>])){</span><br><span class="line"><span class="keyword">int</span> j;</span><br><span class="line"><span class="keyword">for</span>(j=i<span class="number">-1</span>;j>=<span class="number">0</span>&&cmp(a[j],temp);j--){</span><br><span class="line">a[j+<span class="number">1</span>]=a[j];</span><br><span class="line">}</span><br><span class="line">a[j+<span class="number">1</span>]=temp;</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="keyword">bool</span> <span class="title">cmp</span><span class="params">(<span class="keyword">int</span> a,<span class="keyword">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 class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"><span class="keyword">int</span> *a;</span><br><span class="line"><span class="keyword">int</span> n;</span><br><span class="line"><span class="built_in">cin</span>>>n;</span><br><span class="line">a=<span class="keyword">new</span> <span class="keyword">int</span>[n]();</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<n;i++){</span><br><span class="line"><span class="built_in">cin</span>>>a[i];</span><br><span class="line">}</span><br><span class="line"><span class="built_in">cout</span><<<span class="string">"before:"</span><<<span class="built_in">endl</span>;</span><br><span class="line">show(a,n);</span><br><span class="line"><span class="built_in">cout</span><<<span class="string">"after:"</span><<<span class="built_in">endl</span>;</span><br><span class="line">insertSort(a,n,cmp);</span><br><span class="line">show(a,n);</span><br><span class="line"><span class="keyword">delete</span>[] a;</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><blockquote><p>程序测试</p><p>5<br>5 5 5 5 5<br>before:<br>5 5 5 5 5<br>after:<br>5 5 5 5 5</p><p>5<br>5 4 3 2 1<br>before:<br>5 4 3 2 1<br>after:<br>1 2 3 4 5</p></blockquote>]]></content>
<summary type="html">
<h3 id="算法描述"><a href="#算法描述" class="headerlink" title="算法描述"></a>算法描述</h3><p>对于一个线性表,将这个线性表分为有序和无序的两个部分,对无序部分进行扫描,并对扫描到的每一个元素考虑它应当在有序部分插入的位
</summary>
<category term="数据结构" scheme="https://yys123456.github.io/categories/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
<category term="直接插入排序" scheme="https://yys123456.github.io/tags/%E7%9B%B4%E6%8E%A5%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F/"/>
</entry>
<entry>
<title>pat-1040 pat的个数 解析</title>
<link href="https://yys123456.github.io/2019/08/09/pat-1040/"/>
<id>https://yys123456.github.io/2019/08/09/pat-1040/</id>
<published>2019-08-09T10:35:49.000Z</published>
<updated>2019-08-11T14:44:04.982Z</updated>
<content type="html"><![CDATA[<h3 id="1040-有几个PAT-25-分"><a href="#1040-有几个PAT-25-分" class="headerlink" title="1040 有几个PAT (25 分)"></a>1040 有几个PAT (25 分)</h3><p>字符串 <code>APPAPT</code> 中包含了两个单词 <code>PAT</code>,其中第一个 <code>PAT</code> 是第 2 位(<code>P</code>),第 4 位(<code>A</code>),第 6 位(<code>T</code>);第二个 <code>PAT</code> 是第 3 位(<code>P</code>),第 4 位(<code>A</code>),第 6 位(<code>T</code>)。</p><p>现给定字符串,问一共可以形成多少个 <code>PAT</code>?</p><h3 id="输入格式:"><a href="#输入格式:" class="headerlink" title="输入格式:"></a>输入格式:</h3><p>输入只有一行,包含一个字符串,长度不超过105,只包含 <code>P</code>、<code>A</code>、<code>T</code> 三种字母。</p><h3 id="输出格式:"><a href="#输出格式:" class="headerlink" title="输出格式:"></a>输出格式:</h3><p>在一行中输出给定字符串中包含多少个 <code>PAT</code>。由于结果可能比较大,只输出对 1000000007 取余数的结果。</p><h3 id="输入样例:"><a href="#输入样例:" class="headerlink" title="输入样例:"></a>输入样例:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">APPAPT</span><br></pre></td></tr></table></figure><h3 id="输出样例:"><a href="#输出样例:" class="headerlink" title="输出样例:"></a>输出样例:</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">2</span><br></pre></td></tr></table></figure><h3 id="解析:"><a href="#解析:" class="headerlink" title="解析:"></a>解析:</h3><p>本题一开始我使用了深度优先搜索,并使用一个全局变量bk来做本递归和上层递归之间的通信从而减少操作次数(想复杂了)3、4测试点超时,代码如下:</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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><bits/stdc++.h></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="keyword">char</span> a[<span class="number">3</span>]={<span class="string">'P'</span>,<span class="string">'A'</span>,<span class="string">'T'</span>};</span><br><span class="line"><span class="keyword">int</span> count1=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">bool</span> bk=<span class="number">0</span>;<span class="comment">//</span></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">dfs</span><span class="params">(<span class="built_in">string</span>&s,<span class="keyword">int</span> k,<span class="keyword">int</span> flag)</span></span>{<span class="comment">//appapt</span></span><br><span class="line"><span class="keyword">if</span>(k==<span class="number">3</span>){</span><br><span class="line">count1++;</span><br><span class="line">count1%=<span class="number">1000000007</span>; </span><br><span class="line">}<span class="keyword">else</span>{</span><br><span class="line"><span class="keyword">if</span>(bk){</span><br><span class="line"><span class="keyword">return</span>;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">int</span> ff=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=flag;i<s.length();i++){</span><br><span class="line"><span class="keyword">if</span>(s[i]==a[k]){</span><br><span class="line">ff=<span class="number">1</span>;</span><br><span class="line">dfs(s,k+<span class="number">1</span>,i+<span class="number">1</span>);</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="keyword">if</span>(ff==<span class="number">0</span>){</span><br><span class="line">bk=<span class="number">1</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="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"><span class="built_in">string</span> s;</span><br><span class="line"><span class="built_in">cin</span>>>s;</span><br><span class="line">dfs(s,<span class="number">0</span>,<span class="number">0</span>);</span><br><span class="line"><span class="built_in">cout</span><<count1<<<span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>实际上本题是使用数学方法解决</p><p>观察一个字符串$APPAPT$,可以发现对于这个字符串而言,$PAT$这按顺序排放的三个字符出现的次数是2,简单来说就是从前向后扫描这个字符串,找到第一个P然后从P的下一个位置开始向后找第一个A,找到第一个A以后,再在这个位置的下一个位置去找第一个T,若找到那么总个数加一,由此可见可以用递归或者三重循环解决。但是由于不加处理的三冲循环或者递归的时间复杂度可以达到$O(n^3)$,所以考虑别的方法。</p><p>观察发现:</p><ol><li>对于每一个A,这个<strong>A前面的所有P的个数</strong>决定了这个A所带来的PA组合的个数;</li><li>对于每一个T,这个T前面的所有<strong>A所对应的PA组合的个数</strong>(因为每一个不同的A就对应了不同的PAT组合)<strong>相加</strong>就得到了这个T它可以决定的所有PAT组合的个数。</li><li>而对于一个串里面所有PAT的个数就是对于每一个T所对应的PAT的个数求和。</li></ol><p>时间复杂度$O(n)$。</p><p>代码</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></pre></td><td class="code"><pre><span class="line"><span class="comment">//有自底向上的思想</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><bits/stdc++.h></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"><span class="built_in">string</span> s;</span><br><span class="line"><span class="built_in">cin</span>>>s;</span><br><span class="line"><span class="keyword">int</span> p=<span class="number">0</span>,a=<span class="number">0</span>,t=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<s.length();i++){</span><br><span class="line"><span class="keyword">switch</span>(s[i]){</span><br><span class="line"><span class="keyword">case</span> <span class="string">'P'</span>:p++;<span class="keyword">break</span>;</span><br><span class="line"><span class="keyword">case</span> <span class="string">'A'</span>:a+=p;<span class="keyword">break</span>;</span><br><span class="line"><span class="keyword">case</span> <span class="string">'T'</span>:t+=a;<span class="keyword">break</span>;<span class="comment">//这个地方之所以用+=符号,是因为会出现多个t</span></span><br><span class="line">}</span><br><span class="line">t%=<span class="number">1000000007</span>;</span><br><span class="line">}</span><br><span class="line"><span class="built_in">cout</span><<t<<<span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>其他方法(排列组合的思想)</p><p>遍历字符串,对于每一个A来说的PAT的个数就是对于每一个A,它前面的P的个数和它后面的T的个数相乘。</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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><bits/stdc++.h></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"><span class="built_in">string</span> s;</span><br><span class="line"><span class="built_in">cin</span>>>s;</span><br><span class="line"><span class="keyword">int</span> Ts=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<s.length();i++){</span><br><span class="line"><span class="keyword">if</span>(s[i]==<span class="string">'T'</span>){</span><br><span class="line">Ts++;<span class="comment">//所有T的个数 </span></span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="keyword">int</span> p=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">int</span> sum=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<s.length();i++){</span><br><span class="line"><span class="keyword">switch</span>(s[i]){</span><br><span class="line"><span class="keyword">case</span> <span class="string">'P'</span>:p++;<span class="keyword">break</span>;</span><br><span class="line"><span class="keyword">case</span> <span class="string">'T'</span>:Ts--;<span class="keyword">break</span>;<span class="comment">//间接体现A后面的T的个数</span></span><br><span class="line"><span class="keyword">case</span> <span class="string">'A'</span>:sum+=(p%<span class="number">1000000007</span>)*(Ts%<span class="number">1000000007</span>)%<span class="number">1000000007</span>;sum%=<span class="number">1000000007</span>;<span class="keyword">break</span>;</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"><span class="built_in">cout</span><<sum<<<span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>