This repository has been archived by the owner on Apr 22, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
1011.html
71 lines (70 loc) · 9.22 KB
/
1011.html
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
<span style="font-family: Courier New;">เกมประกอบด้วยบอร์ดและบล็อก กำหนดให้บอร์ดมีขนาดไม่เกิน 5 x 5 และบล็อกมีไม่เกิน 3 ชนิด โดยบล็อกเท่านั้นที่สามารถเคลื่อนย้ายได้ โดยย้ายไปทางด้านซ้ายหรือด้านขวาเท่านั้นหากมีที่ว่าง ส่วนบอร์ดไม่สามารถเคลื่อนย้ายได้ หลังการเคลื่อนย้าย บล็อกใด ๆ ที่ไม่มีบล็อกหรือบอร์ดรองรับจะตกลงไปทับบล็อกหรือบอร์ดที่อยู่ด้านล่าง หากมีกลุ่มของบล็อกชนิดเดียวกันตั้งแต่ 2 บล็อกขึ้นไปอยู่ติดกัน ไม่ว่าจะเป็นในแนวตั้งหรือแนวนอน กลุ่มของบล็อกนั้นจะถูกลบออกไปจากบอร์ด โดยแต่ละบล็อกที่ถูกลบจะได้คะแนน 5 คะแนน และสำหรับแต่ละการเคลื่อนย้ายที่ไม่ถูกต้องจะได้ -5 คะแนน เช่น การย้ายบล็อกไปยังตำแหน่งของบอร์ด การย้ายบล็อกไปยังตำแหน่งที่มีบล็อกอื่นอยู่ การย้ายบล็อกในตำแหน่งที่ไม่มีบล็อก หรือการพยายามย้ายบอร์ด <b><br />
<br />
ตัวอย่าง</b> <br />
กำหนดตำแหน่งและทิศทางการเคลื่อนย้ายบล็อกอยู่ในรูป (แถว, สดมภ์, ทิศทาง) โดยนับตำแหน่งแถวและสดมภ์ของบอร์ดจากบนลงล่าง และจากซ้ายไปขวาเริ่มต้นจากศูนย์ตามลำดับ และใช้อักษร “L” หรือ “R” เพื่อแสดงทิศทางการเคลื่อนย้ายไปทางซ้ายหรือขวาตามลำดับ<br />
<br />
</span><center><span style="font-family: Courier New;"><img src="./img/1011/1011-1.gif" alt="" /><br />
<br />
</span></center><span style="font-family: Courier New;"> พิจารณาภาพ (A) หากมีคำสั่งให้ย้ายบล็อก (1, 3, L), (0, 1, R) ตามลำดับ จะได้ผลลัพธ์ดังภาพ (B) ถึง (G) โดยจะได้คะแนนรวม 20 คะแนน จากการลบบล็อกจำนวน 4 บล็อกออกไปจากบอร์ด อย่างไรก็ตาม พิจารณาจากภาพ (A) หากมีคำสั่งให้ย้ายบล็อก (1, 3, R), (0, 1, R) ตามลำดับ จะได้ผลลัพธ์ดังภาพ (H) ถึง (J) ซึ่งไม่สามารถย้ายบล็อกใดๆ ออกไปจากบอร์ดได้ ในกรณีนี้จะได้คะแนนรวม -5 คะแนน จากการย้ายบล็อก (1, 3, R) ไปในทิศทางไม่ถูกต้อง (ย้ายบล็อกไปตำแหน่งของบอร์ด) และหลังจากย้ายบล็อก (0, 1, R) ไม่มีบล็อกใดถูกลบออกไปจากบอร์ด </span><center><span style="font-family: Courier New;"><img src="./img/1011/1011-2.gif" alt="" /></span></center><span style="font-family: Courier New;"> ในข้อมูลทดสอบจะไม่มีกรณีเริ่มต้นที่มีบล็อกชนิดเดียวกันติดกัน และในระหว่างการเคลื่อนย้ายบล็อกจะไม่มีกรณีที่มีกลุ่มของบล็อกชนิดเดียวกันติดกันมากกว่าหนึ่งชุดในเวลาเดียวกัน <br />
<br />
อย่างไรก็ตามหลังจากลบบล็อกออกจากบอร์ดแล้วอาจมีบล็อกชนิดเดียวกันตกลงมาและทำให้ถูกลบออกต่อไปได้ <b><br />
<br />
คำสั่ง</b> จงเขียนโปรแกรมเพื่อรับข้อมูลโครงสร้างบอร์ดและบล็อก และข้อมูลการเคลื่อนย้ายบล็อก จากนั้นคำนวณหาคะแนนของการย้ายบล็อก พร้อมทั้งแสดงโครงสร้างใหม่ของบอร์ดและบล็อก <b><br />
<br />
</b><u><b>ข้อมูลนำเข้า</b></u><br />
ข้อมูลนำเข้าประกอบด้วย 2 ส่วน ดังนี้ <br />
<br />
<em><strong>ส่วนที่ 1</strong></em> <br />
<strong>บรรทัดแรก</strong>มีเลขจำนวนเต็มบวกสองจำนวน แต่ละค่าจะคั่นด้วยช่องว่างหนึ่งช่องบอกขนาดของแถว (m) และ สดมภ์ (n) ของบอร์ดตามลำดับ <br />
<strong>บรรทัดต่อมา m บรรทัด</strong> แสดงโครงสร้างของบอร์ดและบล็อก โดยใช้เครื่องหมาย “#” แทนบอร์ด “-” แทนพื้นที่ว่าง และอักษรตัวใหญ่แทนชนิดของบล็อก สำหรับแต่ละบรรทัด ระหว่างสดมภ์จะคั่นด้วยช่องว่างหนึ่งช่อง <br />
<br />
<em><strong>ส่วนที่ 2 </strong></em><strong><br />
</strong>เป็นข้อมูลนำเข้าต่อจากส่วนที่หนึ่ง ดังนี้ <br />
<strong>บรรทัดแรก</strong>มีเลขจำนวนเต็มบวก l (1 <= l <= 20) บอกจำนวนการเคลื่อนย้ายบล็อก <br />
<strong>บรรทัดต่อมา l บรรทัด</strong> แต่ละบรรทัดเป็นคำสั่งการเคลื่อนย้ายบล็อก ซึ่งประกอบด้วยค่า 3 ค่า แต่ละค่าจะคั่นด้วยช่องว่างหนึ่งช่องดังนี้ <br />
<strong>ค่าแรก</strong>บอกตำแหน่งแถวจากบนลงล่างเริ่มต้นจากศูนย์ <br />
<strong>ค่าที่สอง</strong>บอกตำแหน่งสดมภ์จากซ้ายไปขวาเริ่มต้นจากศูนย์ <br />
<strong>ค่าที่สาม</strong>บอกทิศทางการเคลื่อนย้าย โดย “L” ไปทางซ้าย และ “R” ไปทางขวา <b><br />
<br />
</b><u><b>ข้อมูลส่งออก</b></u> <br />
ให้แสดงผลลัพธ์ดังนี้ บรรทัดแรกแสดงคะแนนรวมการเคลื่อนย้ายบล็อก บรรทัดต่อมา m บรรทัด แสดงโครงสร้างใหม่ของบอร์ดและบล็อก <b><br />
<br />
<u>ที่มา</u>: การแข่งขันคอมพิวเตอร์โอลิมปิก สอวน. ครั้งที่ 3 มหาวิทยาลัยขอนแก่น</b></span>
<table>
<tr>
<th>ข้อมูลนำเข้า</th>
<th>ข้อมูลส่งออก</th>
</tr>
<tr>
<td>4 5
<br /># A - - #
<br /># # - B #
<br /># A B # #
<br /># # # # #
<br />2
<br />1 3 L
<br />0 1 R</td>
<td>20
<br /># - - - #
<br /># # - - #
<br /># - - # #
<br /># # # # #</td>
</tr>
<tr>
<td>5 5
<br /># A – B #
<br /># B - A #
<br /># # - B #
<br /># A B # #
<br /># # # # #
<br />3
<br />0 1 L
<br />0 3 L
<br />0 1 R</td>
<td>20
<br /># - - - #
<br /># B - - #
<br /># # - A #
<br /># - - # #
<br /># # # # #</td>
</tr></table>