You are on page 1of 8

การสอบคัดเลือกการเข้าอบรมค่ายคอมพิวเตอร์โอลิมปิก สอวน.

ค่าย 2
โครงการ สอวน. ศูนย์โรงเรียนนางรอง จังหวัดบุรีรัมย์
ศูนย์โรงเรียนบุญวัฒนา จังหวัดนครราชสีมา
และ มหาวิทยาลัยเทคโนโลยีสุรนารี
วันจันทร์ที่ 21 ตุลาคม พ.ศ. 2562
13:00-16:00 น. (3 ชัว่ โมง)

1. ให้ทำการเขียนโปรแกรมคอมพิวเตอร์ด้วยภาษา C (Dev C, Code Block หรือ Compiler ตัวอื่นที่


ทำงานได้กับชุดโปรแกรมตรวจ Grader)
2. โจทย์มีทั้งหมด 3 ข้อ ข้อละ 100 คะแนน รวม 300 คะแนน
3. โจทย์ทั้ง 3 ข้อจะมีชุดข้อมูลสำหรับทดสอบ 10 ชุด ชุดละ 10 คะแนน การได้คะแนนเต็มจากการ
ทดสอบชุดข้อมูลในแต่ละชุดคือ การแสดงผลลัพธ์ได้อย่างถูกต้องภายในเวลาที่กำหนด
4. ให้ตั้งชื่อโปรแกรมตามที่โจทย์กำหนด
5. ผลสอบจะใช้โปรแกรมตรวจ (Grader) เป็นตัวพิจารณา
6. การตัดสินของคณะกรรมการถือว่าเป็นอันสิ้นสุด
จงใช้ข้อมูลต่อไปนี้ตอบคำถามข้อ 1. และ 2.
บทนิยาม จำนวนสุภาพ (polite number/staircase number/trapezoidal number) คือ จำนวนที่
สามารถถูกเขียนได้ในรูปผลรวมของจำนวนเต็มบวกที่เรียงต่อเนื่องกัน ตัวอย่างเช่น
3 = 1+2, 5 = 2+3, 9 = 4+5 = 2+3+4, 15 = 7+8 = 4+5+6 = 1+2+3+4+5, …
บทนิยาม จำนวนไม่สุภาพ (impolite number) คือ จำนวนเต็มบวกที่ไม่ใช่จำนวนสุภาพ
บทนิยาม ระดับความสุภาพ (politeness) คือ จำนวนของวิธีที่แตกต่างกันทั้งหมดในการเขียนจำนวน
สุภาพให้อยู่ในรูปผลรวมของจำนวนเต็มบวกที่เรียงต่อเนื่องกัน สำหรับจำนวนไม่สุภาพนั้นจะมีระดับความ
สุภาพเป็น 0
ตัวอย่างเช่น
1 มีระดับความสุภาพเท่ากับ 0
2 มีระดับความสุภาพเท่ากับ 0
3 = 1+2 มีระดับความสุภาพเท่ากับ 1
4 มีระดับความสุภาพเท่ากับ 0
5 = 2+3 มีระดับความสุภาพเท่ากับ 1
9 = 4+5 = 2+3+4 มีระดับความสุภาพเท่ากับ 2
15 = 7+8 = 4+5+6 = 1+2+3+4+5 มีระดับความสุภาพเท่ากับ 3

เนื่องจากจำนวนเต็มบวกใด ๆ สามารถเขียนได้ในรูปของจำนวนเฉพาะยกกำลัง

n = 2k1  p2k2  p3k3 pmkm


เมื่อ p2 ,, pm เป็นจำนวนเฉพาะคี่ เราสามารถแสดงได้ว่าจำนวนเต็มบวก n จะมีระดับความสุภาพ
เท่ากับ
( k2 + 1)( k3 + 1) ( km + 1) − 1
เช่น 9=32 ดังนั้นมีความสุภาพ (2+1)-1 = 2
15 = 31·51 ดังนั้นมีความสุภาพ (1+1)(1+1)-1 = 3
100 = 22·52 ดังนั้นมีความสุภาพ (2+1)-1 = 2
2,250 = 21·32·53 ดังนั้นมีความสุภาพ (2+1)(3+1)-1 = 11
1. จำนวนสุภาพ (Polite Number)
จากบทนิยามของจำนวนสุภาพ เราพบว่าจำนวนเต็มบวกที่มีค่าตั้งแต่ 8 เป็นต้นไป สามารถเขียนได้ในรูป
ผลรวมของจำนวนสุภาพ 2 จำนวน ตัวอย่างเช่น
8 = 3+5
9 = 3+6
10 = 3+7 = 5+5
19 = 5+14 = 6+13 = 7+12 = 9+10
ซึ่ งจากตั ว อย่ างข้ างต้ น พบว่ า 8 และ 9 สามารถถู ก เขี ย นในรูป ของผลรวมของจำนวนสุ ภ าพได้ เพี ย ง
แบบเดียวเท่านั้น ส่วน 10 และ 19 สามารถถูกเขียนในรูปของผลรวมของจำนวนสุภาพได้ 2 และ 4 แบบ
ตามลำดับ
งานของคุณ
ให้เขียนโปรแกรมที่มีประสิทธิภาพเพื่อวิเคราะห์ว่า จำนวนที่กำหนดให้จะสามารถถูกเขียนได้ในรูปของ
ผลรวมของจำนวนสุภาพ 2 จำนวน ได้ทั้งหมดกี่รูปแบบ
ข้อมูลนำเข้า
− บรรทัดที่หนึ่ง เป็นจำนวนเต็ม n เมื่อ 1  n  2, 000 แสดงถึงจำนวนของจำนวนเต็มบวกที่
ต้องการให้วิเคราะห์
− บรรทัดที่สอง ถึงบรรทัดที่ n + 1 เป็นจำนวนเต็ม xi แสดงถึงจำนวนเต็มบวกที่ต้องการให้วิเคราะห์
โดย 8  xi  500,000 ,1  i  n
ข้อมูลส่งออก
มี n บรรทัด โดยบรรทัดที่ i แสดงรูปแบบทั้งหมดที่ xi สามารถถูกเขียนได้ในรูปของผลรวมของจำนวน
สุภาพ 2 จำนวน เมื่อ 1  i  n
ตัวอย่างที่ 1
ข้อมูลนำเข้า ข้อมูลส่งออก
4 1
8 1
9 2
10 4
19

ตัวอย่างที่ 2
ข้อมูลนำเข้า ข้อมูลส่งออก
2 199981
400000 249981
500000
ข้อกำหนด
หัวข้อ เงื่อนไข
ข้อมูลนำเข้า Standard Input (คีย์บอร์ด)
ข้อมูลส่งออก Standard Output (จอภาพ)
ระยะเวลาสูงสุดที่ใช้ในการประมวลผล ต่อชุดทดสอบหนึ่งชุด 1 วินาที
หน่วยความจำสูงสุดที่ใช้ในการประมวลผล ต่อชุดทดสอบหนึ่งชุด 16 MB
จำนวนชุดทดสอบ (โปรแกรมประมวลผลครั้งละชุดทดสอบ) 10
เงื่อนไขการรับโปรแกรม โปรแกรมต้องประมวลผลข้อมูลตามตัวอย่างที่ให้มาได้

ข้อมูลคำสั่งเพิ่มเติม
ส่วนหัวของโปรแกรมเพื่อระบุชื่อโจทย์ สำหรับผู้เข้าแข่งขันที่เขียนโปรแกรมด้วยภาษา C
/*
TASK: polite
LANG: C
AUTHOR: YourName YourLastName
CENTER: SUT
*/

ส่วนหัวของโปรแกรมเพื่อระบุชื่อโจทย์ สำหรับผู้เข้าแข่งขันที่เขียนโปรแกรมด้วยภาษา C++


/*
TASK: polite
LANG: C++
AUTHOR: YourName YourLastName
CENTER: SUT
*/
2. ระดับความสุภาพ (Politeness)
ระดับความสุภาพ (politeness) คือ จำนวนของวิธีที่แตกต่างกันทั้งหมดในการเขียนจำนวนสุภาพให้อยู่ใน
รูปผลรวมของจำนวนเต็มบวกที่เรียงต่อเนื่องกัน สำหรับจำนวนไม่สุภาพนั้นจะมีระดับความสุภาพเป็น 0

งานของคุณ
ให้เขียนโปรแกรมที่มีประสิทธิภาพเพื่อหาระดับความสุภาพของจำนวนเต็มบวกที่กำหนดให้

ข้อมูลนำเข้า
− บรรทัดที่หนึ่ง เป็นจำนวนเต็ม n เมื่อ 1  n  2, 000 แสดงถึงจำนวนของจำนวนเต็มบวกที่
ต้องการให้วิเคราะห์
− บรรทัดที่สอง ถึงบรรทัดที่ n + 1 เป็นจำนวนเต็ม xi แสดงถึงจำนวนเต็มบวกที่ต้องการหาระดับ
ความสุภาพ 1  xi  2,000,000 ,1  i  n

ข้อมูลส่งออก
มี n บรรทัด โดยบรรทัดที่ i แสดงระดับความสุภาพของ xi เมื่อ 1  i  n

ตัวอย่าง
ข้อมูลนำเข้า ข้อมูลส่งออก
2 2
100 3
1000

ตัวอย่างที่ 2
ข้อมูลนำเข้า ข้อมูลส่งออก
3 0
8 2
9 1
10
ข้อกำหนด
หัวข้อ เงื่อนไข
ข้อมูลนำเข้า Standard Input (คีย์บอร์ด)
ข้อมูลส่งออก Standard Output (จอภาพ)
ระยะเวลาสูงสุดที่ใช้ในการประมวลผล ต่อชุดทดสอบหนึ่งชุด 1 วินาที
หน่วยความจำสูงสุดที่ใช้ในการประมวลผล ต่อชุดทดสอบหนึ่งชุด 16 MB
จำนวนชุดทดสอบ (โปรแกรมประมวลผลครั้งละชุดทดสอบ) 10
เงื่อนไขการรับโปรแกรม โปรแกรมต้องประมวลผลข้อมูลตามตัวอย่างที่ให้มาได้

ข้อมูลคำสั่งเพิ่มเติม
ส่วนหัวของโปรแกรมเพื่อระบุชื่อโจทย์ สำหรับผู้เข้าแข่งขันที่เขียนโปรแกรมด้วยภาษา C
/*
TASK: politeness
LANG: C
AUTHOR: YourName YourLastName
CENTER: SUT
*/

ส่วนหัวของโปรแกรมเพื่อระบุชื่อโจทย์ สำหรับผู้เข้าแข่งขันที่เขียนโปรแกรมด้วยภาษา C++


/*
TASK: politeness
LANG: C++
AUTHOR: YourName YourLastName
CENTER: SUT
*/
3. ลายสลับฟันปลา (Zigzag)
ลายสลับ ฟัน ปลามีลักษณะดังนี้ บางครั้งก็เรียกทับศัพท์ภ าษาอังกฤษว่าลายซิกแซ็กก็ได้
ลายดังกล่าวปรากฏทั่วไปในหลายที่ บางครั้งก็ใช้ลายนี้ในการตกแต่งสิ่งก่อสร้าง หรือเสื้อผ้า

งานของคุณ
ให้เขียนโปรแกรมที่มีประสิทธิภาพเพื่อแสดงลายสลับฟันปลาตามข้อมูลที่กำหนดให้

ข้อมูลนำเข้า
มี 2 บรรทัด
− บรรทัดที่หนึ่ง เป็นอักขระ 2 จำนวนคือ c1 และ c2 แต่ละจำนวนคั่นด้วยช่องว่าง “ ” 1 ช่อง
− บรรทั ดที่ สอง เป็นจำนวนเต็ม 2 จำนวน แต่ล ะจำนวนคั่นด้วยช่องว่าง “ ” 1 ช่อง ได้แก่ n แทน
จำนวนบรรทัดที่จะแสดงลายสลับฟันปลา โดย n ที่กำหนดให้เป็นจำนวนคู่เสมอ เมื่อ 4  n  50
และ k แทนจำนวนรอบในการสร้างลายสลับฟันปลา เมื่อ 1  k  50
ทั้งนี้ 1 รอบของการสร้างลายสลับฟั นปลา หมายถึง การใช้ บรรทัดจำนวน n บรรทัดสร้างลาย หรือ
เป็นความกว้าง 2n ตัวอักษร

ข้อมูลส่งออก
มี n บรรทัด แต่ละบรรทัดมีอักขระ 2nk จำนวน โดยแสดงภาพลายสลับฟันปลาที่กำหนด จำนวน k
รอบ ดังนี้
เฉพาะการสร้างลายสลับฟันปลา n บรรทัด 1 รอบ
แต่ละ 1 รอบจะมีความยาวสายอักขระ (string) 2n
บรรทัดที่ 1 จะมีอักขระความยาว 2n โดยสายอักขระ (string) ดังกล่าวมีอักขระ c1 อยู่ตรงตำแหน่งที่ 1
และตำแหน่งที่ 2n สำหรับ อักขระ c2 อยู่ตรงตำแหน่งที่ n และตำแหน่งที่ n + 1 ส่วนอักขระที่เหลือ
ของสายอักขระเป็นอักขระจุด “.”
บรรทัดที่ 2 ยังคงมีอักขระความยาว 2n โดยสายอักขระดังกล่าวมีอักขระ c1 อยู่ตรงตำแหน่งที่ 2 และ
ตำแหน่งที่ 2n − 1 สำหรับอักขระ c2 อยู่ตรงตำแหน่งที่ n − 1 และตำแหน่งที่ n + 2 ส่วนอักขระที่เหลือ
ของสายอักขระเป็นอักขระจุด “.”
บรรทัดที่ 3 ถึงบรรทัดที่ n อักขระความยาว 2n สำหรับบรรทัดที่ j อักขระ c1 อยู่ตรงตำแหน่งที่ j
และ 2n − j + 1 สำหรับ อักขระ c2 อยู่ตรงตำแหน่งที่ n − j + 1 และตำแหน่งที่ n + j ส่วนตำแหน่ง
บริเวณอื่นเป็นอักขระจุด “.”
หมายเหตุ ในการสร้างลายสลับฟันปลา k รอบจะมีความยาวสายอักขระ 2nk
ตัวอย่าง 1
ข้อมูลนำเข้า ข้อมูลส่งออก
+ - +..--..++..--..++..--..+
4 3 .+-..-+..+-..-+..+-..-+.
.-+..+-..-+..+-..-+..+-.
-..++..--..++..--..++..-
ตัวอย่าง 2
ข้อมูลนำเข้า
V ^
6 5
ข้อมูลส่งออก
V....^^....VV....^^....VV....^^....VV....^^....VV....^^....V
.V..^..^..V..V..^..^..V..V..^..^..V..V..^..^..V..V..^..^..V.
..V^....^V....V^....^V....V^....^V....V^....^V....V^....^V..
..^V....V^....^V....V^....^V....V^....^V....V^....^V....V^..
.^..V..V..^..^..V..V..^..^..V..V..^..^..V..V..^..^..V..V..^.
^....VV....^^....VV....^^....VV....^^....VV....^^....VV....^
ข้อกำหนด
หัวข้อ เงื่อนไข
ข้อมูลนำเข้า Standard Input (คีย์บอร์ด)
ข้อมูลส่งออก Standard Output (จอภาพ)
ระยะเวลาสูงสุดที่ใช้ในการประมวลผล ต่อชุดทดสอบหนึ่งชุด 1 วินาที
หน่วยความจำสูงสุดที่ใช้ในการประมวลผล ต่อชุดทดสอบหนึ่งชุด 16 MB
จำนวนชุดทดสอบ (โปรแกรมประมวลผลครั้งละชุดทดสอบ) 10
เงื่อนไขการรับโปรแกรม โปรแกรมต้องประมวลผลข้อมูลตามตัวอย่างที่ให้มาได้

ข้อมูลคำสั่งเพิ่มเติม
ส่วนหัวของโปรแกรมเพื่อระบุชื่อโจทย์ สำหรับผู้เข้าแข่งขันที่เขียนโปรแกรมด้วยภาษา C
/*
TASK: zigzag
LANG: C
AUTHOR: YourName YourLastName
CENTER: SUT
*/

ส่วนหัวของโปรแกรมเพื่อระบุชื่อโจทย์ สำหรับผู้เข้าแข่งขันที่เขียนโปรแกรมด้วยภาษา C++


/*
TASK: zigzag
LANG: C++
AUTHOR: YourName YourLastName
CENTER: SUT
*/

You might also like