- หน้าแรก
- เกิดใหม่ปี 07 เริ่มต้นอัปสกิลจากเด็กประถม
- บทที่ 230 นอกเหนือจากภูเขานี้ยังมีภูเขาอื่น! (ฟรี)
บทที่ 230 นอกเหนือจากภูเขานี้ยังมีภูเขาอื่น! (ฟรี)
บทที่ 230 นอกเหนือจากภูเขานี้ยังมีภูเขาอื่น! (ฟรี)
โจทย์ปัญหาโปรแกรมข้อแรกที่หลี่เหยียนได้ทำนั้นมีความยากในระดับปานกลาง จัดเป็นโจทย์พื้นฐานที่เมื่ออ่านจบก็สามารถคิดแนวทางการแก้ปัญหาได้ทันทีโดยไม่มีจุดติดขัดมากนัก
เป็นการทดสอบพื้นฐานและความชำนาญของผู้เข้าแข่งขัน
หลี่เหยียนเพิ่งอ่านโจทย์จบและกำลังจะลงมือทำ เมื่อสายตาเหลือบไปเห็นข้อความแจ้งเตือนบนหน้าจอใหญ่:
"ผู้ทำโจทย์ระดับที่หนึ่งเสร็จเป็นอันดับสอง: B-7, โรงเรียนมัธยมซินเป่ย, เติ้งอวี๋ตี้, ใช้เวลา 29:28"
ในขณะที่เขาเหลือบมองไปยังประกาศนั้น ก็มีข้อความที่สามปรากฏขึ้น:
"ผู้ทำโจทย์ระดับที่หนึ่งเสร็จเป็นอันดับสาม: A-11, โรงเรียนมัธยมซินอัน, เจิ้งต้า, ใช้เวลา 29:30"
คนนี้หลี่เหยียนรู้จักว่าเป็นใคร เป็นนักเรียนผู้มีศักยภาพที่น่าจับตามองจากโรงเรียนมัธยมซินอัน ตอนเรียนมัธยมปีที่หนึ่งเขาเคยคว้าอันดับที่สองในการแข่งขันลีกระดับมัธยมปลาย โดยอันดับหนึ่งก็คือเติ้งอวี๋ตี้นั่นเอง
หลี่เหยียนยิ้มพลางพยักหน้าเบาๆ รู้สึกพึงพอใจที่การคาดการณ์ของตนเองถูกต้อง ทว่าก็รู้สึกถึงความกดดันเพิ่มขึ้นเล็กน้อย
ดีทีเดียว นี่แหละคือความรู้สึกของการแข่งขันที่แท้จริง
การเป็นผู้ไร้คู่แข่งก็ย่อมรู้สึกเหงา ดังนั้นเขาจึงต้องการเวทีที่ใหญ่กว่า แม้จะต้องเผชิญกับความผิดหวังหรือความพ่ายแพ้บ้างก็ไม่เป็นไร
หน้าจอจะแสดงเพียงสามอันดับแรกที่ทำเสร็จเท่านั้น จากสัดส่วนการแสดงผล ดูเหมือนว่าผู้ที่ทำโจทย์เสร็จสามอันดับแรกในแต่ละระดับทั้งสามระดับจะได้รับการแสดงผลพร้อมกันบนหน้าจอ... หากเป็นคนแรกที่ทำเสร็จในทุกระดับ คงได้รับความสนใจอย่างมากแน่นอน
หลี่เหยียนไม่ต้องการเสียสมาธิและเขาก็ไม่ได้เสียสมาธิจริงๆ เพียงแค่เหลือบมองไปเท่านั้น แต่สมองของเขาก็วิเคราะห์ข้อมูลมากมายได้ในพริบตา
มือของเขายังคงทำงานต่อไปโดยไม่หยุดชะงัก โจทย์พื้นฐานมีแนวทางการแก้ปัญหาที่ชัดเจน หากแข่งด้านความเร็ว สิ่งที่ทดสอบก็คือความชำนาญในการเขียนโค้ด
ไม่นานโจทย์ข้อนี้ก็ถูกแก้ไขเสร็จสิ้น หลี่เหยียนกดส่งคำตอบด้วยความมั่นใจและพบกับโจทย์ข้อถัดไป:
จำนวนเฉพาะ คือจำนวนที่มีตัวประกอบเพียงแค่ตัวมันเองและเลข 1 เท่านั้น เช่น 1, 3, 5, 7, 17, 101 และ 10007...
หลี่เหยียนรู้สึกราวกับว่าเขามองเห็นรอยยิ้มมั่นใจของอาจารย์ผู้ออกโจทย์ จากท่อนเริ่มต้นนี้ ดูเหมือนว่าระดับความยากของโจทย์จะเพิ่มขึ้นอีกขั้น
"กำหนดให้มีชุดคำภาษาอังกฤษ แต่ละคำประกอบด้วยตัวอักษร a-z โดยแต่ละตัวอักษรจะมีค่าประจำตัว ตัวอักษร a มีค่าเท่ากับ 1, b มีค่าเท่ากับ 2 ไปเรื่อยๆ ตามลำดับ
หากผลรวมของค่าตัวอักษรในคำหนึ่งๆ เป็นจำนวนเฉพาะ คำนั้นจะเรียกว่า 'คำเฉพาะ' (prime word) จงเขียนโปรแกรมเพื่อตรวจสอบว่าคำที่กำหนดให้เป็นคำเฉพาะหรือไม่
หากผลรวมของค่าตัวอักษรในคำเป็นจำนวนเฉพาะ ให้แสดงผลว่า It is a prime word แต่หากไม่ใช่ให้แสดงผลว่า It is not a prime word"
หลี่เหยียนคิดแนวทางการแก้ปัญหาได้ทันที ความยาวของคำมีจำกัด ค่าของตัวอักษรก็มีจำกัด สามารถคำนวณหาค่าสูงสุดที่เป็นไปได้ จากนั้นคัดกรองจำนวนเฉพาะทั้งหมดในช่วงนั้นเพื่อสร้างเป็นเซ็ต u แล้วใช้สูตรคำนวณหาผลรวมของค่าตัวอักษรในคำ x จากนั้นนำผลลัพธ์มาเทียบกับเซ็ตของจำนวนเฉพาะ ถ้าผลลัพธ์คือ u[x]=1 ก็แสดงผล It is a prime word หากไม่ใช่ก็แสดงผลตรงกันข้าม ปัญหาก็จะได้รับการแก้ไข
ในความเห็นของหลี่เหยียน การใช้สูตรคำนวณในตอนหลังไม่ใช่ความยากที่แท้จริงของโจทย์นี้ ความท้าทายที่แท้จริงอยู่ที่การคัดกรองจำนวนเฉพาะ
ต้องรู้ไว้ว่า คำภาษาอังกฤษที่หมายถึง "โรคฝุ่นปอดที่เกิดจากการสูดดมซิลิเกตหรือเถ้าจากหินควอตซ์" คือ pneumonoultramicyoscpicailicovolcanoconiosis ซึ่งมีตัวอักษรถึง 45 ตัว
และนี่อาจจะยังไม่ใช่คำที่ยาวที่สุด เป็นเพียงคำที่ยาวที่สุดที่หลี่เหยียนรู้จัก สมมติว่าถ้าความยาวเฉลี่ยคือ 13 ตัวอักษร แต่มีคำที่ยาวถึง 50 ตัวอักษร ค่าสูงสุดก็จะอยู่ที่ 650
การคัดกรองจำนวนเฉพาะในช่วงนี้ไม่ง่ายเลย...
แต่ไม่ใช่ ปัญหาไม่ได้อยู่ตรงนี้ ถ้าเราไม่รู้ว่าค่าสูงสุดอยู่ที่เท่าไหร่ สมมติว่าในโลกนี้มีคำที่ประกอบด้วยตัวอักษรถึง 1913 ตัวล่ะ?
ใครจะรู้ว่าศัพท์เฉพาะทางบางคำจะยาวแค่ไหน งั้นต้องคัดกรองจำนวนเฉพาะไปจนถึงสองหมื่นเลยหรือ?
นี่ไม่ใช่ความยากระดับทั่วๆ ไปแล้วนะ
ในทันใดนั้น หลี่เหยียนก็ตระหนักว่ามีบางอย่างไม่ถูกต้อง นี่ยังไม่ใช่โจทย์ที่ยากที่สุดซึ่งต้องทำงานร่วมกันเป็นคู่ แต่เป็นโจทย์ที่แม้แต่เขาผู้เชี่ยวชาญทุกด้านยังลังเลที่จะตัดสินใจ แล้วคนอื่นจะทำได้อย่างไร?
เขาเลื่อนเมาส์ลงไปด้านล่างโดยไม่ตั้งใจ:
"อินพุตประกอบด้วยชุดคำภาษาอังกฤษ แต่ละคำประกอบด้วยตัวอักษรแบบสุ่ม แต่ละคำอยู่คนละบรรทัด จำนวนตัวอักษรไม่เกิน 20 ตัว"
เวรเอ๊ย... เขาแทบจะกดเมาส์ทะลุแป้นพิมพ์ โจทย์ดูเหมือนจะจบแล้วทุกประการ แต่ทำไมบรรทัดนี้ถึงซ่อนอยู่!
ไม่เกิน 20 ตัว และกำหนดแบบสุ่ม นั่นหมายความว่าค่าสูงสุดไม่เกิน 520 เพียงแค่คัดกรองจำนวนเฉพาะระหว่าง 1 ถึง 520 ก็พอ
จะคัดกรองอย่างไร? ก็คัดกรองตรงๆ นั่นแหละ
หลี่เหยียนจำจำนวนเฉพาะตั้งแต่ 1 ถึง 300 ได้ทั้งหมด ส่วนที่เหลือก็แค่ตัดจำนวนประกอบที่เห็นได้ชัดออกไป จำนวนที่ต้องคำนวณจริงๆ ก็ไม่ได้มากนัก
บ้าเอ๊ย ถ้ารู้ก่อนจะท่องจำไปถึง 1000 เลย จะได้เข้าใจทันทีโดยไม่ต้องคิดมาก
โจทย์ที่ไม่ได้ยากเกินไปกลับทำให้หลี่เหยียนรู้สึกตึงเครียด เมื่อคัดกรองเซ็ตจำนวนเฉพาะเสร็จ เขาก็รีบสร้างสูตรโดยไม่รอช้า
สุดท้ายเขาไม่ได้ตรวจสอบอะไรเลย เมื่อเขียนโปรแกรมเสร็จก็กดส่งคำตอบทันที
ติ๊งต่อง!
"ผู้ทำโจทย์ระดับที่สองเสร็จเป็นอันดับแรก: B-7, โรงเรียนมัธยมซินเป่ย, เติ้งอวี๋ตี้, ใช้เวลา 34:41"
"ผู้ทำโจทย์ระดับที่สองเสร็จเป็นอันดับสอง: E-12, โรงเรียนมัธยมที่หนึ่งซินเป่ย, หลี่เหยียน, ใช้เวลา 36:54"
อะไรกัน? ทั้งห้องฮือฮาขึ้นมา บางคนเพิ่งจะเริ่มทำโจทย์ระดับที่สอง แต่นี่มีคนสองคนทำเสร็จไปแล้ว?
โรงเรียนมัธยมที่หนึ่งซินเป่ยไม่ใช่โรงเรียนมัธยมต้นหรอกหรือ? นักเรียนมัธยมต้นจะมาแสดง... แต่แล้วพวกเขาก็เห็นชื่อหลี่เหยียนชัดเจน นี่เป็นเรื่องจริงหรือ?
เลขานุการจินที่นั่งอยู่ข้างๆ หญิงสาวคนหนึ่ง ซึ่งก็คือรองประธานสมาคมคอมพิวเตอร์มณฑลหลินเจียง นามว่าจาง แสดงความประหลาดใจ "การสอบสี่ชั่วโมงครึ่ง แค่สองระดับใช้เวลาแค่ชั่วโมงเดียว? นี่มันเกินไปไหม?"
"เกินความคาดหมาย ก็ดีไม่ใช่หรือ?" เลขานุการจินยิ้มตอบ
แต่ในใจเขาก็ไม่ค่อยมั่นใจนัก ถ้าสุดท้ายหลี่เหยียนแค่พยายามเรียกร้องความสนใจ หน้าเขาก็คงแย่แน่ๆ
หลี่เหยียนที่นั่งอยู่ข้างล่างรู้สึกตกใจ โจทย์ระดับที่สองนั้นเติ้งอวี๋ตี้เริ่มช้ากว่าเขา แม้ว่าตอนแรกเขาจะเสียเวลาไปบ้างเพราะไม่ได้อ่านโจทย์ให้จบ แต่เติ้งอวี๋ตี้ก็ใช้เวลาพอๆ กับเขาในการแก้โจทย์ระดับที่สอง
หลี่เหยียนมั่นใจว่าความเร็วในการพิมพ์ของเขาเหนือกว่าเติ้งอวี๋ตี้ ดังนั้นโจทย์พื้นฐานเขาน่าจะทำได้เร็วกว่า
แล้วเติ้งอวี๋ตี้คนนี้ใช้อะไรทำให้โจทย์ข้อที่สองเสร็จเร็วกว่าหลี่เหยียนที่จำจำนวนเฉพาะ 1 ถึง 300 ได้ทั้งหมด?
มีสองความเป็นไปได้ หนึ่งคือเติ้งอวี๋ตี้จำจำนวนเฉพาะตั้งแต่ 1 ถึง 520 ได้ทั้งหมด สองคือเขาเขียนโปรแกรมคัดกรองจำนวนเฉพาะขึ้นมาเอง... และมีประสิทธิภาพมากด้วย
ไม่ว่าจะเป็นความเป็นไปได้ข้อไหน คนคนนี้ก็เป็นคู่แข่งที่น่ากลัวจริงๆ...
แต่ตอนนี้ต้องมุ่งความสนใจไปที่โจทย์ระดับที่สาม ซึ่งเป็นโจทย์ที่ต้องทำงานร่วมกัน โจทย์นี้จะเป็นโจทย์ที่ยากที่สุดในวันนี้อย่างไม่ต้องสงสัย... หรืออาจจะเป็นโจทย์ที่มีปริมาณงานมากที่สุด แต่เนื่องจากเฉินฟานยังทำไม่เสร็จ หลี่เหยียนจึงต้องพิจารณาด้วยตัวเองก่อน:
"กำหนดให้มีส่วนของเส้นตรงจำนวนหนึ่ง เส้นตรงคือแกน X ส่วนของเส้นตรงมีพิกัดเป็น [Li, Ri] จงหาจำนวนส่วนของเส้นตรงน้อยที่สุดที่สามารถครอบคลุมช่วง [0, m] ได้"
หลี่เหยียนขมวดคิ้วเล็กน้อย โจทย์นี้ดูไม่ค่อยชัดเจนนัก
"บรรทัดแรกของอินพุตระบุจำนวนกรณีทดสอบ ตามด้วยบรรทัดว่าง
แต่ละกรณีทดสอบจะเริ่มด้วยจำนวนเต็ม M (M น้อยกว่าหรือเท่ากับ 5000 และมากกว่าหรือเท่ากับ 1) ตามด้วยหลายบรรทัด แต่ละบรรทัดแสดงส่วนของเส้นตรงในรูปแบบ 'Li Ri'..."
"เอาต์พุต: สำหรับแต่ละกรณีทดสอบ บรรทัดแรกของเอาต์พุตคือจำนวนเต็มที่แสดงจำนวนส่วนของเส้นตรงน้อยที่สุดที่ครอบคลุมช่วง [0, m] ตามด้วยหลายบรรทัดที่แสดงส่วนของเส้นตรงที่เลือก โดยแสดงพิกัดของส่วนของเส้นตรงเรียงตามปลายซ้าย หากไม่มีคำตอบ นั่นคือช่วง [0, m] ไม่สามารถถูกครอบคลุมด้วยส่วนของเส้นตรงที่กำหนดให้ ให้แสดงผลเป็น 0..."
โจทย์นี้มีความยากอยู่ หลี่เหยียนอ่านจบแล้วไม่ได้ลงมือทำทันที โจทย์ประเภทนี้ถ้ารีบร้อนแล้วเกิดข้อผิดพลาดในโปรแกรม การแก้ไขจะเสียเวลามากกว่า
จำเป็นต้องมีแนวคิดที่สมบูรณ์และเป็นไปได้ก่อน
หน้าจอใหญ่ก็แสดงผู้ที่ทำโจทย์ระดับที่สองเสร็จเป็นอันดับที่สาม:
"ผู้ทำโจทย์ระดับที่สองเสร็จเป็นอันดับสาม: E-11, โรงเรียนมัธยมที่หนึ่งซินเป่ย, เฉินฟาน, ใช้เวลา 45:02"
45 นาที? เขาไม่ได้ช้าแค่ไม่กี่นาทีหรอกนะ ดูเหมือนว่าเฉินฟานใช้เวลากับการตอบคำถามข้อเขียนค่อนข้างมาก
แต่ก็ไม่เป็นไร "ความเร็ว" ไม่ใช่ความต้องการหลักของการสอบครั้งนี้
"หลี่เหยียน?" เสียงของเฉินฟานดังมาจากหูฟัง
"รับทราบ"
"ทำไมนายทำไวจัง? เติ้งอวี๋ตี้คนนั้นก็บ้าไปแล้ว ทำไมทุกคนทำเร็วขนาดนี้ ไม่จำเป็นเลย!"
จริงอยู่ โจทย์ข้อสุดท้ายแม้จะยาก แต่สามชั่วโมงก็น่าจะเพียงพอ การรักษาความถูกต้องต้องมาก่อน จากนั้นจึงค่อยพัฒนาความสวยงามของวิธีคิด นี่ควรเป็นสิ่งสำคัญอันดับแรก
หลี่เหยียนทำแค่อยากจะอวดเท่านั้นเอง แต่เขาก็ไม่รู้ว่าเติ้งอวี๋ตี้คนนี้เป็นอย่างไร
"แกก็ทำเร็วไม่ใช่หรือ? ติดอันดับสามในระดับที่สองเลยนี่" หลี่เหยียนรู้สึกประหลาดใจ เฉินฟานไม่เคยมีความเร็วเป็นจุดเด่น แต่กลับสามารถคว้าตำแหน่งแสดงผลได้ในสนามแข่งขันที่มีมือฉกาจมากมายจากโรงเรียนมัธยมปลาย
"อ๋อ ฉันจำจำนวนเฉพาะตั้งแต่ 0 ถึง 600 ได้ทั้งหมด ช่วยประหยัดเวลาไปเยอะเลยในโจทย์ที่แล้ว"
ฮะ?
คำวิจารณ์ขอยกไว้ก่อน มาดูโจทย์กันดีกว่า
"ดังออกชื่อเสียงต้องรีบทำตั้งแต่เนิ่นๆ นะ เฉินฟาน"
(จบบท)