This repository was 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
Expand file tree
/
Copy path1013.html
More file actions
72 lines (71 loc) · 6.83 KB
/
1013.html
File metadata and controls
72 lines (71 loc) · 6.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<span style="font-family: Courier New;">ในการแทนนิพจน์ (expression) ใด ๆ ด้วยฟังก์ชัน นิพจน์หลักจะถูกแบ่งเป็นนิพจน์ย่อยๆ ด้วยตัวดำเนินการ (operator) ต่างๆ ดังนี้ การบวก “+” วงเล็บ “( )” การคูณ “ * ” และ การยกกำลัง “^” โดยสามารถเขียนแทนด้วยฟังก์ชันได้ดังนี้ op(i ,e) โดยที่ e หมายถึงนิพจน์ทางคณิตศาสตร์ใดๆ ซึ่งสามารถถูกแบ่งเป็นนิพจน์ย่อย ๆ ได้โดยใช้ตัวดำเนินการที่มีลำดับความสำคัญในการทำงาน (priority) ต่ำสุดในนิพจน์นั้น และ i คือลำดับของนิพจน์ย่อยนั้นๆ ตัวอย่างเช่น นิพจน์ “a*b+b*c+c*d” สามารถแบ่งเป็นสามนิพจน์ย่อย โดยมีนิพจน์ย่อยที่ 1 คือ “a*b” นิพจน์ย่อยที่ 2 คือ “b*c” และนิพจน์ย่อยที่ 3 คือ “c*d” เนื่องจากตัวดำเนินการ “+” มีความสำคัญต่ำสุดในการทำงานในนิพจน์นี้ กำหนดให้ลำดับความสำคัญในการทำงานของตัวดำเนินการจากมากสุดไปน้อยสุดมีดังนี้ “( )” “^” “ * ” และ “+” ตามลำดับ <br />
<br />
วัตถุประสงค์ของฟังก์ชันแทนนิพจน์คือ ต้องการแทนนิพจน์ย่อยด้วยฟังก์ชันเพื่อใช้ในการคำนวณ เช่น op(2,e) แทนนิพจน์ย่อยลำดับที่สองของ e ที่กำหนดให้ข้างบน (a*b+b*c+c*d) ซึ่งจะได้ op(2,e)=b*c <b><br />
<br />
ตัวอย่าง</b> <br />
กำหนดให้นิพจน์ p มีค่าดังนี้ <br />
a^b*c+(d*c)^f*z+b สามารถแทนนิพจน์ย่อยใดๆ ของ p ด้วยฟังก์ชันได้ดังนี้ <br />
</span>
<div style="text-align: left;"><span style="font-family: Courier New;">op(3,p) = b <br />
op(1,op(3,p)) = b <br />
op(2,p) = (d*c)^f*z <br />
op(1,op(2,p)) = (d*c)^f <br />
op(1,op(1,op(2,p))) = (d*c) <br />
op(1,op(1,op(1,op(2,p)))) = d*c <br />
op(2,op(1,op(1,op(2,p)))) = null (ไม่มีคำตอบ) <br />
op(2,op(2,p)) = z <b><br />
<br />
</b><u><b>คำสั่ง</b></u><br />
จงเขียนโปรแกรมเพื่อรับข้อมูลนิพจน์ p ใด ๆ และฟังก์ชันคำถาม จากนั้นคำนวณหานิพจน์ย่อยของ p ที่สอดคล้องกับฟังก์ชันที่กำหนด <br />
<br />
<b>หมายเหตุ</b> ในข้อมูลทดสอบ 10 ชุด จะมีนิพจน์ที่ใช้ตัวดำเนินการ “วงเล็บ” จำนวน 5 ชุด <br />
<br />
<u><b>ข้อมูลนำเข้า</b></u><br />
ข้อมูลนำเข้าประกอบด้วย 3 ส่วน ได้แก่ นิพจน์หลัก จำนวนฟังก์ชัน และ รายละเอียดแต่ละฟังก์ชันโดย <b><br />
บรรทัดแรก</b> แสดงนิพจน์หลัก (p) ที่ประกอบด้วยตัวอักษร a ถึง z และตัวดำเนินการเขียนติดกันโดยไม่มีช่องว่างโดยที่ความยาวตัวอักษรและตัวดำเนินการรวมกันไม่เกิน 64 ตัว <b><br />
บรรทัดที่สอง</b> เป็นเลขจำนวนเต็มบวก n (1 ≤ n ≤ 10) แสดงจำนวนฟังก์ชันคำถาม n ฟังก์ชัน <br />
<b>บรรทัดต่อไป n บรรทัด</b> แต่ละบรรทัดแทนฟังก์ชันคำถามหนึ่งคำถาม ซึ่งประกอบด้วยเลขจำนวนเต็มบวกอยู่ระหว่าง 1 ถึง 9 คั่นด้วยช่องว่าง 1 ช่อง และปิดท้ายด้วย 0 <b><br />
<br />
ตัวอย่าง</b> ข้อมูลนำเข้า 2 1 1 0 หมายถึงฟังก์ชัน op(1,op(1,op(2,p))) <b><br />
<br />
</b><u><b>ข้อมูลส่งออก</b></u> <br />
ข้อมูลส่งออกประกอบด้วย n บรรทัด โดยแต่ละบรรทัดแสดงฟังก์ชันและนิพจน์ย่อยที่สอดคล้องกับฟังก์ชัน โดยจะต้องไม่มีการเว้นวรรคใดๆ ในแต่ละบรรทัดของข้อมูลส่งออก กรณีที่ไม่มีคำตอบให้แสดง “null” <b><br />
<br />
<u>ที่มา</u>: การแข่งขันคอมพิวเตอร์โอลิมปิก สอวน. ครั้งที่ 3 มหาวิทยาลัยขอนแก่น</b></span></div>
<table>
<tr>
<th>ข้อมูลนำเข้า</th>
<th>ข้อมูลส่งออก</th>
</tr>
<tr>
<td>a*b^c+d*e^f
<br />2
<br />1 0
<br />2 0</td>
<td>op(1,p)=a*b^c
<br />op(2,p)=d*e^f</td>
</tr>
<tr>
<td>a*b^c+d*e^f
<br />3
<br />1 1 0
<br />1 2 0
<br />1 2 2 0</td>
<td>op(1,op(1,p))=a
<br />op(2,op(1,p))=b^c
<br />op(2,op(2,op(1,p)))=c </td>
</tr>
<tr>
<td>(x+y)+z
<br />5
<br />1 0
<br />1 1 0
<br />1 1 1 0
<br />1 1 2 0
<br />3 0</td>
<td>op(1,p)=(x+y)
<br />op(1,op(1,p))=x+y
<br />op(1,op(1,op(1,p)))=x
<br />op(2,op(1,op(1,p)))=y
<br />op(3,p)=null</td>
</tr></table>