Tags:

12.นกน้อย
คำโบราณว่าไว้ "นกน้อยทำรังแต่พอตัว"
สำหรับโจทย์ข้อนี้ นกจะมีขนาดเป็นจำนวนเต็มและทำรังบนพื้นที่ที่มีลักษณะเป็นตาราง นกขนาดต่าง ๆ จะต้องการพื้นที่ทำรังขนาดแตกต่างกัน กล่าวคือ นกขนาด i จะต้องการพื้นที่ทำรังมีลักษณะเป็นพื้นที่ข้าวหลามตัดกว้างและสูง 2i - 1 หน่วย ดังแสดงในตัวอย่างด้านล่าง
..... ..... ..#..
..... ..#.. .###.
..#.. .###. #####
..... ..#.. .###.
..... ..... ..#..

 (1)      (2)      (3)

รูปด้านบนแสดงลักษณะของพื้นที่ที่นกขนาด 1, 2, และ 3 ใช้ทำรัง ตามลำดับ ส่วนของช่องที่ใช้ทำรังแสดงด้วอักษร #
พื้นที่สนามที่นกจะทำรังมีขนาดกว้าง N หน่วยและสูง M หน่วย และแบ่งเป้นตารางย่อย ๆ ขนาด 1 x 1 หน่วย จำนวน NM ช่อง
ในพื้นที่ดังกล่าว มีบางช่องของตารางที่ไม่เหมาะต่อการทำรังของนก เช่น มีหลุม หรือมีรังแมลงป่องซ่อนอยู่ ดังนั้นในการสร้างรัง จะมีส่วนขอบพื้นที่รูปข้าวหลามตัดของรังนกทับช่องที่ไม่เหมาะสมไม่ได้
ให้คุณเขียนโปรแกรมรับขนาดของนก แล้วหาว่ามีตำแหน่งที่นกขนาดดังกล่าวสามารถทำรังในสนามได้กี่ตำแหน่ง
ข้อมูลนำเข้า
บรรทัดแรกระบุจำนวนเต็ม T แทนจำนวนชุดข้อมูลทดสอบ (1 <= T <= 10) จากนั้นจะข้อมูลจะตามด้วยชุดทดสอบ T ชุด โดยแต่ละชุดจะอยู่ในรูปแบบต่อไปนี้
บรรทัดแรกของข้อมูลชุดทดสอบจะระบุจำนวนเต็มสามจำนวน N M และ K (1 <= N <= 30; 1 <= M <= 30; 1 <= K <= 10) โดยที่ N และ M แทนความกว้างและสูงของพื้นที่ และ K แทนขนาดของนก รับประกันว่า 2K-1 <= N และ 2K-1 <= M
จากนั้นจะตามด้วยข้อมูลของสนามจำนวน M บรรทัด แต่ละบรรทัดเป็นสตริงความยาว N ตัวอักษร โดยจะมีตัวอักษรสองรูปแบบคือ . แทนช่องที่เหมาะสมต่อการทำรัง และ O (ตัวอักษรโอใหญ่) แทนช่องที่ไม่เหมาะสม
ข้อมูลส่งออก
มีทั้งสิ้น T บรรทัด แต่ละบรรทัดคือคำตอบของแต่ละข้อมูลชุดทดสอบ กล่าวคือแต่ละบรรทัดแทนจำนวนตำแหน่งที่นกสามารถทำรังได้
ตัวอย่าง
ข้อมูลนำเข้า
2
5 5 2
O.O.O
.....
O.O.O
.....
O.O.O
4 3 2
....
.O..
....
ข้อมูลส่งออก
4
0

Get latest news from Blognone
By: nat3738
ContributorAndroidRed HatUbuntu
on 12 March 2014 - 02:06 #686764

คิดยังไงเอาโจทย์โค้ดจมมาถามครับเนี่ย - -" ผมว่าไปถามอาจารย์ที่สอนถ้าไม่เข้าใจจะได้ประโยชน์กว่ามาถามอย่างนี้นะ

นกทำรังต้องการพื้นที่ขนาด (2k-1)(2k-1) ก็ดูว่าในขนาดสนามที่ให้มาสามารถวางสี่เหลี่ยมขนาด (2k-1)(2k-1) ลงไปได้กี่วิธี (เช่น นกขนาด 2 สนามขนาด 4*5 จะวางได้ 6 วิธี) แล้วก็เช็คว่าแต่ละวิธีนั้นมีจุดที่รังนกซ้อนกับจุดที่ทำรังไม่ได้หรือเปล่า ทำซ้ำไปเรื่อยๆ จนครบทุกจุด

By: rajatiw
Windows
on 12 March 2014 - 02:50 #686771

ขออภัยที่ต้องนำโจทย์นี้มาถามนะครับ พอดีว่าเปนงานที่อาจารย์สั่งให้ทำอ่ะครับ อาจารย์ต้องการให้ทำเองหมด แล้วผมพึ่งปี 1 เลยยังไม่ค่อยเข้าใจ เลยมาขอคำแนะนำอะครับ ^^

By: overbid
ContributorAndroidRed HatUbuntu
on 12 March 2014 - 08:52 #686786 Reply to:686771

อาจารย์ต้องการให้ทำเองหมด

By: chaiwathuy on 12 March 2014 - 10:47 #686820 Reply to:686771

พี่ว่าน้องต้องไปปรึกษาอาจารย์หรือเพื่อนร่วมชั้นครับ เพราะโจทย์ที่ให้เป็นการถามเรื่อง algorithm เสียมากกว่า เรื่องเทคนิคการเขียนโปรแกรม ดังนั้นระเบียบวิธีการคิดและวิเคราะห์ปัญหานั้นๆต้องมาจากตัวของน้องครับ

By: rajatiw
Windows
on 12 March 2014 - 11:44 #686854

ครับ ขอบคุณครับ

By: iPongHD
iPhoneAndroidUbuntuIn Love
on 12 March 2014 - 21:21 #687064
iPongHD's picture

-/- คาราวะ ม. ผมแบบนี้นะ ติด F กันหมด :3

By: mr_tawan
ContributoriPhoneAndroidWindows
on 13 March 2014 - 01:02 #687127
mr_tawan's picture

ไม่ค่อยอยากช่วยเรื่อง algorithm เท่าไหร่

แต่แนะให้ตรงที่ว่า เวลาร่างวิธีคิด ลองเขียนบนกระดาษ ไม่ใช่เขียนโค้ดลงไปบนกระดาษ แต่ลองดูว่าโค้ดมันควรทำงานอย่างไร

โจทย์ลักษณะนี้สามารถเขียนโค้ดได้สองแบบครับ

  1. สร้าง char array สองมิติ แล้วเข้าไปแก้ค่าตัวหนังสือข้างในก่อนที่จะพิมพ์ออกมา (แน่นอนว่าก็ต้องรู้ก่อนว่า array คืออะไรและใช้อย่างไร
  2. พิมพ์สดออกมาทาง command line ทันทีที่คิดออกว่าตำแหน่งนั้นควรมีค่าอะไร

แบบแรกง่ายกว่ามาก แต่อาจจะไม่ตรงคำสั่ง ที่สำคัญคือมันทำงานช้ากว่าด้วย

เอาเข้าจริง ๆ มันเป็นโจทย์พลอตกราฟครับ ถ้าน้องเขียนสมการที่สร้างกราฟแบบนี้ได้ ที่เหลือก็แค่จะพลอตสมการลงไปในหน้าจอยังไงเท่านั้นเอง ลองคิดดูนะครับว่าสมการที่จะสร้างภาพแบบนี้นั้นจะมีหน้าตาแบบไหน


  • 9tawan.net บล็อกส่วนตัวฮับ
By: hisoft
ContributorWindows PhoneWindows
on 13 March 2014 - 01:49 #687140
hisoft's picture

ปกติผมใช้วิธีคิดว่าจะแก้โจทย์นั้นๆ ได้ยังไง แล้วค่อยคิดว่าเราคิดอะไรไปบ้าง แล้วให้คอมทำตามลำดับที่เราคิดครับ ยกเว้นบางอย่างที่คอมมันทำตามเราไม่ได้ถึงหาวิธีพลิกแพลงต่อ

By: bow_der_kleine
WriterAndroidUbuntu
on 13 March 2014 - 19:19 #687350
bow_der_kleine's picture

อาจารย์ไม่ใช่คนอื่นไกล อาจารย์มักมีเมตตากับศิษย์ การถามอาจารย์เป็นการเพิ่มปฏิสัมพันธ์ และเป็น feedback กลับไปโดยตรง อาจารย์จะได้รู้ว่าสอนตกหล่นตรงไหน เป็นการฝึกให้เราตั้งคำถาม เวลาทำงานจริงหากเราไม่เข้าใจงานจะได้ถามเป็น ถามอาจารย์เถอะครับ