ผลต่างระหว่างรุ่นของ "Thepsint"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
 
(ไม่แสดง 37 รุ่นระหว่างกลางโดยผู้ใช้ 3 คน)
แถว 41: แถว 41:
  
 
== ASCII Art ==
 
== ASCII Art ==
ASCII art is an art of creating pictures with a grid of ASCII characters. There are many styles of ASCII art, but we are interested in the most primitive one, where just an overall character density is used to represent differently shaded areas of the picture.
+
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=25507#problem/A
  
You should write a proof-of-concept program that renders a filled closed polygon with a rectangular grid of ASCII characters. The whole process is explained in detail below.
+
ASCII art คือรูปที่สร้างจากตารางของอักขระ ASCII มีรูปแบบของ ASCII art จำนวนมากในโลก แต่เราสนใจเพียงรูปแบบที่มาตรฐานที่สุดซึ่งเพียงแค่ความหนาแน่นของอักขระเท่านั้นที่จะถูกใช้แสดงบริเวณที่ถูกแรเงาในรูป
  
Let OXY be a Cartesian coordinate system with OX pointing to the right and OY pointing up. Drawing canvas is bounded with (0, 0) – (w, h) rectangle. Pixels on the canvas are (x, y) – (x + 1, y + 1) squares where x and y are integers such that 0 ≤ x < w and 0 ≤ y < h. A filled closed polygon without self-intersections and self-touchings (but not necessarily convex) is drawn on the canvas. Pixels of the canvas become partially filled during the process. Each pixel is represented by an ASCII character depending on the percentage of its filled area according to the following table:
+
คุณจะต้องเขียนโปรแกรมที่จะเปลี่ยนรูปปิดขั้นต้นเป็น ASCII art วิธีการทำนั้นจะถูกอธิบายต่อไป
  
Pixel percentage area filled Character name Glyph ASCII code
+
กำหนดพิกัดสองมิติ OXY โดย OX ชี้ไปทางขวาและ OY ชี้ขึ้น รูปจะถูกตีกรอบด้วยสี่เหลี่ยมจาก (0,0) ถึง (w,h) แต่ละพิกเซลในรูปคือสี่เหลี่ยมจตุรัสจาก (x,y) ถึง (x+1,y+1) โดย 0≤x<w และ 0≤y<h รูปต้นแบบจะถูกสร้างด้วยรูปปิดที่จุดยอดจะไม่สร้างเส้นที่ตัดกัน (แต่สัมผัสกันได้) แต่ละช่องพิกเซลจะถูกเติมเมื่อรูปปิดถูกสร้างขึ้น แต่ละช่องของพิกเซลจะถูกแสดงด้วยอักขระ ASCII ตามอัตราส่วนของพื้นที่ที่ถูกแรเงา โดย
From 0% inclusive to 25% exclusive Full stop . 46
 
From 25% inclusive to 50% exclusive Plus sign + 43
 
From 50% inclusive to 75% exclusive Small letter o o 111
 
From 75% inclusive to 100% exclusive Dollar sign $ 36
 
100% Number sign # 35
 
  
The resulting ASCII characters for all pixels are printed top-to-bottom and left-to-right to get a visual representation of the drawing.
+
[0-25)% แสดง . (46 ASCII)
 +
[25-50)% แสดง + (43 ASCII)
 +
[50-75)% แสดง o (111 ASCII)
 +
[75-100)% แสดง $ (30 ASCII)
 +
100% แสดง # (35 ASCII)
  
 
== Driving Directions ==
 
== Driving Directions ==
แถว 75: แถว 74:
  
 
Output: บรรทัดเดียว คือระยะทางสั้นสุดเป็นทศนิยมหกตำแหน่ง หากหาไม่ได้ให้แสดง "no solution" โดยไม่ต้องมีเครื่องหายคำพูด
 
Output: บรรทัดเดียว คือระยะทางสั้นสุดเป็นทศนิยมหกตำแหน่ง หากหาไม่ได้ให้แสดง "no solution" โดยไม่ต้องมีเครื่องหายคำพูด
 +
 +
== Kingdom Reunion ==
 +
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=25507#problem/C
 +
 +
เคลวิล และ คาร์ล เป็นลูกพี่ลูกน้องกันและเป็นราชาของเมืองสองเมืองคือ แอสเทรียและแอปส์เทรีย ร้อยปีที่แล้วประเทศทั้งสองเป็นประเทศเดียวกันแต่ราชาเก่า เฮลวิก ตายและทิ้งประเทศให้ลูกทั้งสอง เอียน และ อินกรัม ไม่มีใครรู้ว่าจะทำไงดีจนกระทั่วแผนการแบ่งประเทศเป็นสองส่วนเท่ากันได้ถูกเสนอขึ้น การแบ่งนี้โคตรยากจนต้องใช้คนจากอนาคต โชคร้ายยิ่งนักบุคคลทั้งห้าพยายามจะแก้ปัญหานี้แล้วไม่สำเร็จจึงทำให้เกิดสงครามกลางเมืองขึ้น สงครามนี้กินเวลาเจ็ดปีและสิ้นสุดด้วย NEERC (ไม่สำคัญ) ตามที่กฎหมายได้กล่าวประเทศจะต้องถูกแบ่งเป็นสองส่วนสำหรับ เอียน และ อินกรัม แต่ประเทศทั้งสองมีพื้นที่ไม่เท่ากัน สงครามจึงเริ่มต้นอีกครั้ง
 +
 +
หลังจากเก้าสิบปีแห่งสงคราม ทรัพยากรธรรมชาติทั้งหมดได้ถูกใช้จนหมดสิ้นทำให้ราชาทั้งสองตะหนักได้ว่าหากสู้กันต่อจะตายกันหมด ดังนั้นพวกเขาตัดสินใจนำสันติเข้าใช้ พวกเขาตัดสินใจที่จะรวมประเทศกลับซึ่งประเทศ แอสเทรียและแอปส์เทรียจะถูกรวมเป็นประเทศ แอแอปส์ทรีอา
 +
 +
ตามหนังสือโบราณ คุณได้ค้นพบคำอธิบายที่หลากหลายเกี่ยวกับเส้นแบ่งเขตของสองประเทศนี้ แต่ละคำอธิบายคือลำดับของเสาเขตแดนซึ่งจะถูกระบุตามเข็มหรือทวนเข็มนาฬิกา อย่างไรก็ตามคุณรู้ได้ทันทีว่าแต่ละจุดต้นของขอบเขตแตกต่างกัน ในบางหนังสือขอบเขตจะไม่ถูกกำหนดเป็นรูปหลายเหลี่ยม คุณต้องการที่จะค้นหาขอบเขตที่แท้จริงของสองประเทศนี้ กำหนดจุดของเส้นเขตแดนของทั้งสามประเทศมีสมบัติดังนี้
 +
 +
สำหรับแต่ละประเทศเส้นที่ถูกสร้างขึ้นด้วยเสาเขตแดนจะเป็นรูปหายเหลี่ยม เส้นขอบเหล่านั้นจะถูกพิจารณาเป็นรูปหลายเหลี่ยมถ้ามันมีอย่างน้อยสามจุดที่ไม่ตัดกันเอง ไม่สัมผัสกันเอง ไม่มีรู และมีพื้นที่ไม่เป็นศูนย์
 +
พื้นที่ของ แอสเทรียและแอปส์เทรียไม่ซ้อนทับกัน
 +
พื้นที่ของ แอแอปส์ทรีอาจะต้องเป็นพื้นที่ของแอสเทรียและแอปส์เทรียรวมกันเป๊ะๆ
 +
 +
จงเขียนโปรแกรมพี่ดูว่าคุณสมบัติเหล่านี้ถูกต้อง
 +
 +
== Flights ==
 +
 +
กองทัพนั้นงานยุ่ง การฝึกซ้อมทางการทหารนั้นเริ่มขึ้นเมื่อวาน หน่วยงานแต่ละหน่วยกำลังทำหน้าที่อย่างดีที่สุด (มั้ง) ตัวอย่างเช่น หน่วยปืนใหญ่ก็กำลังยิงจรวด ในขณะที่หน่วยอากาศยานก็กำลังส่งเสบียงให้ทหารราบ
 +
 +
สนามฝึกซ้อมนั้นเป็นเส้นตรง ฐานทัพอากาศและกองทหารราบนั้นอยู่บนจุดบางจุดบนเส้นตรงนี้ และหน่วยปืนใหญ่ก็กำลังยิงจรวดไปทุกที่ การยิงจรวดทุกครั้งนั้นมีการวางแผนไว้เรียบร้อยแล้ว ว่า ยิงเมื่อไร และ มีเส้นทางอย่างไร (อย่าลืมว่ามันเป็นเพียงการซ้อมรบ) แผนการบินของหน่วยอากาศยานก็ได้ทำไว้แล้วเช่นกัน ทุก ๆ อย่างควรจะไม่มีปัญหา แต่จรวดก็ช่างน่ากลัวอยู่ดี ซึ่งอาจจะเกิดปัญหาได้ถึงแม้จะเป็นการฝึกซ้อมก็ตาม
 +
 +
คุณจะต้องช่วยนายพลแห่งหน่วยอากาศยานเพื่อวางแผนเพดานบินปลอดภัยต่ำสุดสำหรับการบินต่าง ๆ จากข้อมูลช่วงเวลาการบินและช่วงตำแหน่งที่จะบิน เพดานบินปลอดภัยต่ำสุดสำหรับเที่ยวบินคือ ความสูงน้อยสุดที่ทางเดินของจรวดทั้งหมดในช่วงเวลาและช่วงตำแหน่งนั้นอยู่ต่ำกว่าหรือเท่ากับความสูงดังกล่าว ถ้าไม่มีจรวดอยู่ในช่วงเวลาและช่วงตำแหน่งดังกล่าวแล้ว เพดานบินปลอดภัยต่ำสุดคือ 0
 +
 +
จรวดนั้นจะถูกยิงจากพื้น ซึ่งถือว่ามีความสูงเป็น 0  และเดินทางเป็นรูปพาราโบลาสมมาตรแนวตั้ง ความเร็วของจรวดนั้นถือว่าไม่เป็นที่สนใจในปัญหานี้ ให้ถือว่าจรวดนั้นเดินทางตามเส้นทางแบบทันที
 +
 +
ดังตัวอย่างในรูป (ดูจาก link) มีจรวดอยู่สองอันซึ่งมีเส้นทางแสดงดังเส้นทึบ และมีเพดานบินปลอดภัยต่ำสุดของเที่ยวบินต่าง ๆ แสดงดังเส้นประ เส้นแนวตั้งระบุขอบเขตของช่วงตำแหน่งของเที่ยวบิน ส่วนช่วงเวลาของเที่ยวบินในตัวอย่างนี้ รวมเวลายิงของจรวดทั้งสองอยู่
 +
 +
 +
ข้อมูลนำเข้า:
 +
 +
บรรทัดแรกระบุจำนวนแผนการยิงจรวด n (1 <= n <= 50,000)
 +
 +
หลังจากนั้นอีก n บรรทัดเป็นข้อมูลการยิงจรวด  โดยที่แต่ละบรรทัด ประกอบด้วยจำนวนเต็ม 3 ตัว คือ p ซึ่งระบุตำแหน่งที่ยิงจรวด และตำแหน่งสูงสุดของเส้นทางของจรวด x y (0 <= p <= x <= 50,0000; 0 < y <= 50)  โดยที่ p และ x เป็นตำแหน่งบนเส้นตรงสนามฝึกซ้อม  และ y เป็นความสูงของจุดสูงสุดของเส้นทางของจรวด
 +
 +
จรวดจะถูกยิงที่ละลูกในแต่ละนาที ตามลำดับที่ปรากฎในข้อมูลนำเข้า
 +
 +
บรรทัดถัดมาจะระบุจำนวนเที่ยวบิน m  (1 <= m <= 20,000)
 +
 +
หลังจากนั้นอีก m บรรทัดเป็นข้อมูลเที่ยวบินโดยที่แต่ละบรรทัด ประกอบด้วยจำนวนเต็ม 4 ตัว t1 t2 x1 x2 โดยที่ t1 t2 คือช่วงเวลาของเที่ยวบิน ส่วน x1 x2 คือช่วงตำแหน่งของเที่ยวบินบนเส้นตรงสนามฝึกซ้อม
 +
 +
 +
ข้อมูลส่งออก:
 +
 +
สำหรับแต่ละเที่ยวบิน ให้พิมพ์ข้อมูลหนึ่งบรรทัดประกอบด้วยค่าเพดานบินปลอดภัย โดยที่มีค่าความผิดพลาดสมบูรณ์ไม่เกิน 10^-4
 +
 +
== Birthday ==
 +
มันเป็นวันเกิดน้องสาวตัวน้อยๆของคุณ และตามหลักการแล้วเธอจะต้องตัดเค้กวงกลม น้องสาวของคุณยังเด็กมากจึงตัดเค้กไม่ค่อยเก่ง ทุกครั้งที่เธอตัดเค้กเค้กจะถูกแบ่งตามเส้นแต่ไม่จำเป็นต้องเป็นสองส่วนเท่ากัน เธอตัดเค้กซ้ำแล้วซ้ำเล่าจนได้เค้กที่หน้าตาน่าเกลียด (แต่ยังอร่อยนะ)
 +
หน้าที่ของคุณคือ กำหนดการตัดให้ช่วยน้องสาวของคุณหาว่าเค้กโดนแบ่งเป็นกี่ชิ้น โดย
 +
*เค้กจะถูกวางบนพิกัด xy ที่จุดกึ่งกลางของเค้กอยู่ที่ (0,0)
 +
*เค้กจะไม่มีความหนา
 +
*ไม่มีการตัดครั้งใดทับกันพอดี
 +
*จุดยอดของเส้นการตัดทั้งสองจุดของแต่ละเส้นจะอยู่นอกบริเวณเค้ก
 +
*ทุกการตัดจะผ่านเค้ก (ดังนั้นจะมีจำนวนเค้กเป็นจำนวนบวกทั้งสองข้างของทุกการตัด)
 +
 +
การเขียนโปรแกรม
 +
คุณจะต้องเขียนฟังก์ชัน pieces(int R,int N,int *X1,int *Y1,int *X2,int *Y2) โดย
 +
R: รัศมีเค้ก
 +
N: จำนวนการตัด
 +
X1 Y1 X2 Y2 อาเรย์เก็บว่าตัดจากจุด (X1[i],Y1[i]) ไปยัง (X2[i],Y2[i])
 +
และจะคืนค่าจะนวนชิ้นของเค้กหลังการตัด
 +
 +
ขอบเขตข้อมูล
 +
1≤R≤500
 +
1≤N≤1000
 +
-500≤X1[i],X2[i],Y1[i],Y2[i]≤500
 +
 +
== Citizen ==
 +
หลังจากไม่เที่ยวโซลและปารีสคุณตัดสินใจที่จะไปเที่ยวอีกเยอะๆคุณจึงอยากได้สัญชาติของประเทศหลายๆประเทศในเวลาเดียวกันให้มากที่สุดเท่าที่จะเป็นไปได้
 +
 +
เนื่องจากนักคณิตศาสตร์ได้ยึดครององค์การสหประชาชาติ กฎการขอสัญชาติจึงง่ายดายมาก แม้ว่าแต่ละประเทศมีกฎที่แตกต่างกันในการให้สัญชาติ ทุกประเทศจะปฏิบัติตามเงื่อนไขเดียวกัน
 +
*คุณได้สัญชาติถ้าคุณอยู่ในประเทศนั้นอย่างต่อเนื่องเป็นเวลา p ปี
 +
*ถ้าคุณออกจากประเทศเป็นเลา q ปีโดยไม่กลับมาเยี่ยมเลย สถานะสัญชาติจะหายไป
 +
ค่า p และ q ของแต่ละประเทศจะต่างกันไป คุณสามารถถือได้ว่าเวลาที่คุณใช้ในการเดินทางระหว่างประเทศนั้นเล็กน้อยมาก (นับเป็น 0) และสำหรับแต่ละประเทศ p จะเป็นเลขคู่ และ q จะเป็นเลขคี่
 +
 +
ตัวอย่าง
 +
สมมติว่ากฎของประเทศห้าประเทศเป็นดังนี้
 +
*ออสเตรเลีย p=2 q=15
 +
*บราซิล p=6 q=3
 +
*ฝรั่งเศส p=6 q=11
 +
*อินเดีย p=4 q=7
 +
*สิงคโปร์ p=8 q=5
 +
แผนของคุณอาจเป็นดังนี้
 +
*ไปฝรั่งเศสและอยู่ที่นั่น 6 ปีเพื่อได้สัญชาติฝรั่งเศส
 +
*ไปออสเตรเลียและอยู่ที่นั่น  2 ปีเพื่อได้สัญชาติออสเตรเลีย
 +
*ไปอินเดียและอยู่ที่นั่น 4 ปีเพื่อได้สัญชาติอินเดีย
 +
*แวะฝรั่งเศสอย่างรวดเร็วเพื่อรักษาสถานภาพสัญชาติฝรั่งเศส (ไม่นับเวลา)
 +
*บินไปบราซิล 6 ปีเพื่อได้สัญชาติบราซิล
 +
สังเกตได้ว่าหากคุณไม่แวะฝรั่งเศสหลังจากอินเดีย คุณจะเสียสัญชาติฝรั่งเศส (2+4+6 ปีในออสเตรเลีย อินเดีย และบราซิลมีค่ามากกว่า q=11 ของฝรั่งเศส) นี่คือจำนวนสัญชาติมากที่สุดที่คุณมีได้ หากคุณพยายามได้สัญชาติสิงคโปร์ คุณจะสูญเสียสัญชาติอินเดียและบราซิลระหว่างระยะเวลานั้น มีวิธีอีกมากมายที่จะได้ 4 สัญชาติในเวลาเดียวกันแต่ไม่มีวิธีที่จะได้มากกว่านั้น
 +
 +
การเขียนโปรแกรม
 +
คุณจะต้องเขียนฟังก์ชัน countries ดังนี้: int countries(int N,int *P,int *Q) โดยฟังก์ชันนี้จะคำนวณจำนวนที่มากที่สุดของสัญชาติที่คุณสามารถถือได้ในเวลาหนึ่ง
 +
 +
ตัวแปร
 +
N: จำนวนประเทศ
 +
P: อาเรย์ยาว N เก็บค่า P แต่ละประเทศ
 +
Q: อาเรย์ยาว N เก็บค่า Q แต่ละประเทศ
 +
 +
ขอบเขตข้อมูล
 +
1≤N≤100000
 +
2≤P[i]≤10000, P[i] เป็นเลขคู่
 +
1≤Q[i]≤9999, Q[i] เป็นเลขคี่
 +
 +
== Fog ==
 +
ในฐานะหัวหน้าของเกาะ Oz คุณพยายามที่จะทำแผนที่ของสะพานที่เชื่อมเกาะ อย่างไรก็ตามเกาะทั้งหมดถูกปกคลุมด้วยหมอกทำให้คุณมองไม่เห็นอะไรเลย ด้วยความลำบากนี้คุณตัดสินใจที่จะพายเรือไปตรวจสอบสะพานด้วยตนเอง
 +
 +
แผนของคุณคือพายเรือขึ้นและลงตามแม่น้ำ แม้ว่าคุณจะมองไม่เห็นสะพานจากระยะไกล คุณจะรับรู้ถึงการมีของสะพานหากคุณอยู่ล่างมันพอดี เนื่องหมอกอันหนาแน่นคุณไม่สามารถมองทางได้อย่างแม่นยำ คุณจึงสามารถทำได้เพียงพายเรือจากตลิ่งฝั่งหนึ่งไปยังอีกฝั่งและนับจำนวนสะพานที่คุณลอดทั้งหมด
 +
 +
แม่น้ำมีตลิ่งบนและตลิ่งล่างแต่ละตลิ่งจะมีเกาะ N เกาะ ชื่อว่าเกาะ 1, 2, 3, …, N เรียงจากซ้ายไปขวา
 +
 +
คุณไม่รู้จำนวนของสะพาน อย่างไรก็ตามคุณรู้ว่า
 +
*แต่ละสะพานจะเริ่มที่จุด 1, 2, 3, …, N ของตลิ่งบนและจบลงที่จุดๆหนึ่งของตลิ่งล่าง
 +
*ไม่มีสะพานใดตัดกัน แม้ว่ามันจะสามารถเริ่มหรือสิ้นสุดที่จุดเดียวกัน
 +
 +
หน้าที่ของคุณคือหาจำนวนของสะพานและตำแหน่งที่แน่นอนของมัน คุณสามารถพายเรือซ้ำไปมาจากตลิ่งบนไปตลิ่งล่าง โดยแต่ละครั้ง คุณจะ
 +
*พายจากจุด 1, 2, 3, …, N ของตลิ่งบนไปยังจุดๆหนึ่งของตลิ่งล่าง
 +
*นับสะพานที่คุณลอด โดยคุณจะไม่นับสะพานที่เริ่มหรือสิ้นสุดที่จุดที่คุณเริ่มหรือสิ้นสุดการพายเรือ
 +
*บางครั้ง การพายเรือครั้งนั้นจะทำให้คุณรู้ตัวว่าคุณอยู่ใต้สะพานตลอดเวลา (มีสะพานเชื่อมจากจุดเริ่มต้นการพายไปยังจุดสิ้นสุดการพาย)
 +
 +
แต่ละเส้นทางสามารถเริ่มและสิ้นสุดที่ไหนก็ได้ (คุณไม่จำเป็นต้องเริ่มที่จุดสิ้นสุดของครั้งที่แล้ว) แขนของคุณแข็งแรงเพียงพอที่จะให้คุณพายเรือได้อย่างมาก 250000 ครั้ง
 +
 +
การเขียนโปรแกรม
 +
คุณจะต้องสร้าง goSail() ซึ่งจะเรียก row() และ foundBridge()  โดย
 +
int row(int top,int bottom) จะส่งคืนค่าจำนวนสะพานที่คุณลอดหากพายจากจุด top บนตลิ่งบนและจบที่จุด bottom บนตลิ่งล่าง หากคุณอยู่ใต้สะพานตลอดเวลา row จะคืนค่า -1
 +
 +
void foundBridge(int top,int bottom) จะส่งคำตอบว่าคุณได้เจอสะพานที่เริ่มจากจุด top บนตลิ่งบนและจบที่จุด bottom บนตลิ่งล่าง
 +
 +
goSail(int n) เป็นฟังก์ชันที่คุณเขียนและจะรับค่า n คือจำนวนจุดบนแต่ละตลิ่ง
 +
 +
ขอบเขตข้อมูล
 +
1≤N≤100000
 +
 +
== Barricades==
 +
 +
http://main.edu.pl/en/archive/pa/2007/bar (*63)
 +
 +
เฉลยนะจ๊ะ: http://pastebin.com/v38eZqUZ
 +
 +
 +
เมือง Byteland คือเกาะที่ประกอบด้วยเมืองจำนวนหนึ่งซึ่งถูกเชื่อมต่อด้วยถนนสองทาง ถนนทั้งหมดจะถูกเชื่อมต่อในลักษณะที่ว่าทุกๆคู่เมืองจะมีเส้นทางเพียงเส้นทางเดียวเชื่อมต่อกัน (หากไม่เดินทางซ้ำผ่านเมืองเดิม)
 +
 +
โชคร้ายยิ่งนักที่ช่วงเวลาที่เลวร้ายได้คืบคลานเข้ามา เมือง Byteland กำลังเข้าสู่สงคราม!!! เจ้าเมือง Byteland (ชื่อ Byteasar) ได้ทำการวางแผนปกป้องเมือง เขาได้ทำการก่อตั้งเขตปลอดภัยพิเศษขึ้น ซึ่งเขตนั้นจะถูกสร้างขึ้นจากการทำลายถนนบางเส้นใน Byteland เพื่อให้การเดินทางผ่านถนนเส้นนั้นเป็นไปไม่ได้ เพื่อที่จะทำให้เขตปลอดภัยนั้นปลอดภัย เมืองในเขตปลอดภัยต้องมีคุณสมบัติดังนี้:
 +
 +
* จากเมืองที่อยู่ในเขตปลอดภัย คุณจะสามารถเดินทางไปยังเมืองใดๆก็ได้ที่อยู่ในเขตปลอดภัยเช่นกัน
 +
* คุณจะไม่สามารถเดินทางจากเมืองที่อยู่นอกเขตปลอดภัยไปยังเมืองที่อยู่ในเขตปลอดภัย
 +
* มีเมือง k เมืองพอดีในเขตปลอดภัย
 +
 +
มีวิธีการเลือกเขตปลอดภัยหลากหลายวิธีถูกเสนอขึ้น แต่ละค่าของ k มันจำเป็นที่เราจะต้องรู้จำนวนถนนที่น้อยที่สุดที่จะต้องถูกทำลายเพื่อที่สร้างเขตปลอดภัยขนาด k หน้าที่ของคุณคือการช่วย Byteasar เขียนหาว่าสำหรับแต่ละค่า k จะต้องทำลายถนนอย่างน้อยกี่เส้นเพื่อสร้างเขตปลอดภัยนั้น
 +
 +
=== Task ===
 +
 +
จงเขียนโปรแกรมที่
 +
 +
* อ่านข้อมูลนำเข้าซึ่งจะอธิบายสภาพถนนใน Byteland และจำนวนครั้งของคำถาม
 +
* สำหรับแต่ละคำถาม ค้นหาจำนวนการทำลายถนนที่น้อยที่สุดที่เพียงพอกับการสร้างเขตปลอดภัยในขนาดนั้นๆ
 +
* แสดงผลคำตอบทางข้อมูลส่งออก
 +
 +
=== Input ===
 +
 +
บรรทัดแรกประกอบด้วยจำนวนเต็มหนึ่งจำนวน n (1≤n≤3000) แสดงจำนวนเมืองใน Byteland เมืองจะถูกตั้งชื่อ 1, 2, 3, …, n
 +
 +
ต่อจากนั้น n-1 บรรทัดแต่ละบรรทัดประกอบด้วยคู่ของจำนวนเต็ม a, b (1≤a, b≤n) แต่ละคู่ a, b แสดงถนนเชื่อมเมือง a และ b แต่ละคู่ของเมืองจะถูกเชื่อมด้วยถนนอย่างมากหนึ่งเส้น
 +
 +
บรรทัดต่อมาประกอบด้วยจำนวนเต็มหนึ่งจำนวน m (1≤m≤n) แสดงจำนวนของคำถาม ต่อจากนั้น m บรรทัดประกอบด้วยจำนวนเต็มหนึ่งจำนวน k_i (1≤k_i≤n) แสดงคำถามลำดับที่ i ซึ่งหมายถึงจำนวนเมืองที่ต้องการจะมีในเขตปลอดภัย
 +
 +
Output
 +
โปรแกรมของคุณจะต้องแสดงจำนวนเต็ม m จำนวนแยกกัน m บรรทัด โดยแต่ละบรรทัดจะเป็น
 +
*-1 ถ้าคุณไม่สามารถสร้างเขตปลอดภัยขนาด k_i ได้
 +
*จำนวนการทำลายถนนที่น้อยที่สุดที่เพียงพอกับการสร้างเขตปลอดภัยในขนาด k_i
 +
 +
===Example===
 +
 +
ข้อมูลนำเข้า:
 +
 +
7
 +
1 2
 +
1 3
 +
2 4
 +
2 5
 +
3 6
 +
3 7
 +
2
 +
2
 +
3
 +
 +
ข้อมูลส่งออก:
 +
 +
2
 +
1
 +
 +
== Byteland ==
 +
http://main.edu.pl/en/archive/oig/1/baj (*368)
 +
 +
เฉลยนะจ๊ะ: http://pastebin.com/XPaMwX7e
 +
 +
 +
พระราชา Byteasar มหาราชคือกษัตริย์ที่ร่ำรวยและแข็งแกร่งของประเทศ Byteland ประเทศนี้ประกอบด้วยเมือง n เมือง Byteasar ต้องการที่จะพัฒนาประเทศจึงได้สั่งสถาปนิกเตรียมแผนสำหรับพัฒนาทางด่วนระหว่างเมือง เขาได้รับข้อเสนอ m แบบ ซึ่งแต่ละแบบจะถูกอธิบายด้วยเลขสามจำนวนคือ p, k, w โดย p และ k คือเมืองต้นทางและปลายทางของทางด่วนและ w คือราคาในการสร้างทางด่วนนั้น แต่ละทางด่วนเป็นถนนเดินได้สองทางและจะไม่ตัดผ่านเมืองใดๆยกเว้นเมืองต้นทางและปลายทาง
 +
 +
พระราชาต้องการที่จะสร้างทางด่วนเพื่อให้มีเส้นทางการเดินทางสำหรับทุกคู่เมือง (แม้ว่าเส้นทางนั้นมีความเป็นไปได้ที่จะต้องแวะผ่านเมืองอื่น) Byteasar ต้องการที่จะเสียเงินค่าสร้างรวมน้อยที่สุดเช่นเดียวกัน
 +
 +
=== Task ===
 +
จงเขียนโปรแกรมที่
 +
*รับจำนวนของเมือง จำนวนของแผนทางด่วน และคำอธิบายทางแต่ละเส้น
 +
*ค้นหาว่าในแต่ละเส้นแผนทางด่วน เส้นทางใดที่จะสามารถอยู่ในความต้องการของ Byteasar (มีความเป็นไปได้ที่จะอยู่ในเซตของเส้นทางถูกสร้าง)
 +
*แสดงผลการทำงานของโปรแกรม
 +
 +
===Input===
 +
บรรทัดแรกประกอบด้้วยจำนวนเต็ม 2 จำนวนคือจำนวนเมือง n และจำนวนแผนทางด่วน m (2≤n≤7000, 1≤m≤300000) ต่อมา m บรรทัดแต่ละบรรทัดประด้วยจำนวนเต็ม p, k, w อธิบายแผนทางด่วนแต่ละเส้น  (1≤p, k≤n, 1≤w≤100000)
 +
 +
===Output===
 +
แสดงผล m บรรทัดโดยบรรทัดที่ i จะต้องเป็นคำว่า TAK (แปลว่าใช่) หรือ NIE (แปลว่าไม่) แสดงว่าแผนเส้นทางที่ i สามารถเติมเต็มความต้องการของ Byteasar เรารับประกันว่าจะมีอย่างน้อยหนึ่งเซตของเส้นทางที่จะเติมเต็มความต้องการของ Byteasar
 +
 +
===Example===
 +
ข้อมูลนำเข้า:
 +
6 10
 +
1 2 2
 +
1 6 1
 +
1 5 3
 +
4 1 5
 +
2 6 2
 +
2 3 5
 +
4 3 4
 +
3 5 4
 +
4 5 4
 +
5 6 3
 +
 +
ข้อมูลส่งออก
 +
TAK
 +
TAK
 +
TAK
 +
NIE
 +
TAK
 +
NIE
 +
TAK
 +
TAK
 +
TAK
 +
TAK
 +
 +
== Mushrooms ==
 +
http://main.edu.pl/en/archive/pa/2010/grz (*77)
 +
 +
เฉลยนะจ๊ะ: http://pastebin.com/bnbGiKs1
 +
 +
 +
ฝนได้ตกที่ป่าแห่ง Bytean นักล่าเห็ดนามว่า Byteasar ได้ตัดสินในที่จะออกไปล่าเห็ด
 +
 +
Byteasar รู้เส้นทางที่จะนำเขาไปสู่ป่า ซึ่งเส้นทางนั้นจะมีแหล่งเห็ดมากมายระหว่างทาง สองแหล่งเห็ดใดๆที่อยู่ติดกันจะห่างเท่ากันเสมอซึ่ง Byteasar จะใช้เวลา 15 นาทีในการเดินทางระหว่างสองแหล่งเห็ดนั้น Byteasar ก็เหมือนกับนักล่าเห็ดชั้นสูงทั่วไปเพราะเขาจะใช้เวลาน้อยมาก (นับเป็น 0) ในการเก็บเห็ดทั้งหมดในแหล่งเห็ด เป็นที่รู้กันว่าเห็ดในแหล่งเห็ดจะกลับมาเติบโตหลังจากถูกเก็บไปแล้ว 30 นาที
 +
 +
ระบุจำนวนของเห็ดในแต่ละแหล่งเห็ดเป็นเส้นตรง จงหาจำนวนเห็ดที่มากที่สุดที่ Byteasar สามารถเก็บได้โดยเขาจะเริ่มต้นที่แหล่งเห็ดซ้ายสุด และจบการเดินทางที่แหล่งเห็ดใดก็ได้
 +
 +
===Input===
 +
บรรทัดแรกประกอบด้วยจำนวนเต็มสองจำนวน n และ t (1≤n, t≤1000000) แสดงจำนวนแหล่งเห็ดและเวลาที่ Byteasar ใช้ในการเก็บเห็ดทั้งหมด หน่วยเป็น 15 นาที บรรทัดที่สองประกอบด้วยจำนวนเต็ม a_1, a_2, ..., a_n (1≤a_i≤1000000) แทนจำนวนเห็ดในแต่ละแหล่งเห็ดตามเส้นตรงการเดินทาง Byteasar จะเริ่มการเดินทางที่แหล่งเห็ดแรก และจะเริ่มเก็บเห็ดที่เวลา 0 และจะเก็บเห็ดได้จนถึงเวลา t
 +
 +
===Output===
 +
บรรทัดแรกและบรรทัดเดียวแสดงจำนวนเห็ดสูงสุดที่ Byteasar จะเก็บได้
 +
 +
===Example===
 +
ข้อมูลนำเข้า
 +
5 4
 +
3 4 3 5 1
 +
 +
ข้อมูลส่งออก
 +
18
 +
 +
==Rooks==
 +
http://main.edu.pl/en/archive/oi/3/wie (*102)
 +
 +
เฉลยนะจ๊ะ: http://pastebin.com/Pa0HFh7t
 +
 +
 +
บนกระดานหมากรุกขนาด nxn เราต้องการวางเรือ n ตัวตามกฎต่อไปนี้
 +
*เรือตัวที่ i จะต้องวางอยู่ในช่องสี่เหลี่ยมที่อยู่ในสี่เหลี่ยมใหญ่ที่มีพิกัดมุมบนซ้ายเป็น (a_i,b_i) และพิกัดขวาเป็น (c_i,d_i) เมื่อ 1≤a_i≤c_i≤n และ 1≤b_i≤d_i≤n
 +
*ไม่มีเรือตัวใดกินกันได้ กล่าวไม่มีเรือสองตัวใดๆอยู่ในแถวหรือคอลัมน์เดียวกัน
 +
 +
===Task===
 +
จงเขียนโปรแกรมที่
 +
*รับขนาดของตารางและพิกัดช่องสี่เหลี่ยมใหญ่ที่เรือแต่ละตัวสามารถถูกวางได้
 +
*ค้นหาจุดที่เราสามารถวางเรือตามกฎได้ หากมีหลายวิธีให้เลือกมาเพียงวิธีเดียว
 +
*แสดงผลวิธีที่หาได้ออกทางข้อมูลส่งออก หากไม่สามารถหาได้ให้แสดงคำว่า NIE (แปลว่าไม่)
 +
 +
===Input===
 +
บรรทัดแรกคือจำนวนเต็มเต็ม n (1≤n≤3000) แทนขนาดตาราง ต่อมา n บรรทัดคือจำนวนเต็มสี่จำนวนคั่นด้วยช่องว่างหนึ่งช่องแสดงสี่เหลี่ยมขอบเขตของเรือแต่ละตัวตามลำดับ a, b, c และ d
 +
 +
===Output===
 +
ข้อมูลส่งออกอาจเป็นเพียงคำว่า NIE หรืออาจประกอบด้วย n บรรทัดแต่ละบรรทัดแสดงพิกัด (x_i,y_i) ที่เรือตัวที่ i ในข้อมูลนำเข้าจะถูกวางเพื่อให้ถูกตามเงื่อนไขที่กำหนด
 +
 +
===Example===
 +
ข้อมูลนำเข้า
 +
4
 +
1 1 1 1
 +
1 3 2 4
 +
3 1 4 2
 +
2 2 4 4
 +
 +
ข้อมูลส่งออก
 +
1 1
 +
2 3
 +
3 2
 +
4 4

รุ่นแก้ไขปัจจุบันเมื่อ 15:07, 24 มิถุนายน 2557

Fuel

(http://main.edu.pl/en/archive/pa/2011/pal) *323

ในวันคืนเก่าๆ เมืองทั้ง n เมืองใน Byteland ถูกเชื่อมต่อด้วยถนนสองทิศทางมากมาย ราชาแห่ง Byteland ตัดสินใจที่จะลดจำนวนถนน หลังจากที่เขาปรึกษาหัวหน้าภาคคอมพิวเตอร์เขาได้ลดจำนวนถนนในเมือง Byteland เหลือ n-1 เส้นเชื่อมต่อในเมืองโดยที่จะมีเส้นทางการเดินทางเพียงเส้นเดียวเท่านั้นสำหรับคู่เมืองใดๆ ถนนทั้งหมดจะมีความยาวเท่ากัน

Byteasar ต้องการจะสร้างทัวร์ที่จำนวนเมืองที่แตกต่างกันมากที่สุด เขามีรถที่มีแก๊สสำหรับขับบนถนน m เส้น เขาสามารถเริ่มการเดินทางที่เมืองในก็ได้ และในทำนองเดียวกัน เขาสามารถจบการเดินทางที่เมืองใดก็ได้ไม่จำเป็นต้องเป็นเมืองเริ่มต้น Byteasar สามารถขับผ่านถนนเส้นเดิมซ้ำๆได้ หน้าที่ของคุณคือช่วย Byteasar หาจำนวนของเมืองที่เขาสามารถเยี่ยมชมเมื่อเขาเริ่มการเดินทางด้วยแก๊สเต็มถัง

Input บรรทัดแรกประกอบด้วยจำนวนเต็ม n และ m (1≤n≤500000, 1≤m≤200000000) เมื่อ n คือจำนวนเมือง (ที่จะถูกตั้งชื่อว่า 1, 2, 3, ..., n) และ m คือจำนวนถนนที่สามารถวิ่งได้ด้วยแก๊สเต็มถัง

ต่อจากนั้น n-1 บรรทัด แต่ละบรรทัดประกอบด้วยจำนวนเต็ม a และ b (1≤a, b≤n) บ่งบอกว่ามีถนนเชื่อต่อระหว่างเมือง a และ b

Output ประกอบด้วยจำนวนเต็มหนึ่งจำนวนเท่านั้น คือจำนวนเมืองสูงสุดที่สามารถเยี่ยมชมเมื่อเริ่มการเดินทางด้วยแก๊สเต็มถัง

Cakes

(http://main.edu.pl/en/archive/pa/2009/cia) *374

เทพเจ้าแห่งการอบจากทั่วประเทศได้มารวมตัวกันที่งานประชุมแห่ง Bytean ที่นั่นจะมีการแข่งขันอบเค้กของทีมสามคนโดยทุกๆสามคนจะอบเค้กหนึ่งชิ้น คนๆหนึ่งสามารถเป็นสมาชิกของทีมได้ไม่จำกัดจำนวนทีม อย่างไรก็ตามคนบางคู่จะเกลียดกันทำให้ไม่สามารถอยู่ทีมเดียวกันได้

เป็นที่รู้กันว่าแต่ละคนต้องการผงฟูกี่เดคากรัมสำหรับการอบเค้ก ทีมที่มีสามคนจะต้องใช้ผงฟูปริมาณเท่ากับจำนวนที่คนที่ต้องการมากที่สุดในทีมต้องการ จงหาจำนวนผงฟูที่จะต้องใช้ หากทุกทีมสามคนที่เป็นไปได้จะอบเค้กทีมละหนึ่งชิ้น

Input บรรทัดแรกประกอบด้วยจำนวนเต็ม n และ m (1≤n≤100000, 1≤m≤250000) แทนจำนวนของคนและจำนวนคู่คนที่ไม่ได้เกลียดกัน บรรทัดถัดมาประกอบด้วยจำนวนเต็ม n จำนวนแทนปริมาณผงฟูที่แต่ละต้องการหน่วยเป็นเดคากรัม (1≤pi≤1000000) ต่อมา m บรรทัดแต่ละบรรทัดประกอบด้วยจำนวนเต็ม ai และ bi (1≤ai, bi≤n, ai≠bi) แสดงว่าคนหมายเลข ai และ bi ไม่ได้เกลียดกัน

Output ประกอบด้วยจำนวนเต็มหนึ่งจำนวนเท่านั้น คือปริมาณผงฟูที่ต้องใช้หน่วยเป็นเคคากรัม

Afternoon Tea

(http://main.edu.pl/en/archive/amppz/2011/her) *216

ระหว่างเยี่ยมชมเกาะ Bytic นั้น คุณรู้สึกชื่นชอบอาหารประจำเกาะ นั่นคือชาและนม เครื่องดื่มนี้จะถูกปรุงในกฎที่เคร่งครัดนั่นคือตอนแรกในแก้วจะถูกเติมครึ่งหนึ่งด้วยชาและครึ่งหนึ่งด้วยนม หลังจากนั้นคำแห่งสวรรค์จะถูกประกาศออกมาโดยสำหรับ i=1, 2, 3, …, n หากคำแห่งสวรรค์คำที่ i คือ H คุณจะต้องดื่มน้ำครึ่งแก้ว เติมชาจนเต็มแก้ว แล้วคนจนเข้ากัน แต่หากคำแห่งสวรรค์คำที่ i คือ M คุณจะต้องดื่มน้ำครึ่งแก้ว เติมนมจนเต็มแก้ว แล้วคนจนเข้ากัน หลังจากคุณทำตามคำแห่งสวรรค์ทั้ง n คำแล้ว น้ำในแก้วจะถูกกำจัด

คุณต้องการทราบว่าหลังจากฟังคำแห่งสวรรค์ทั้งหมดแล้วคุณจะได้ดื่มอะไรมากกว่า ชา หรือ นม?

Input บรรทัดแรกระบุจำนวนเต็ม n (1≤n≤100000) บรรทัดที่สองระบุสตริงยาว n ประกอบด้วย H หรือ M เท่านั้น

Output บรรทัดเดียว แสดง H ถ้าคุณได้กินชามากกว่า M ถ้ากคุณกินนมมากกว่า หรือ HM ถ้าคุณกินทั้งสองอย่างนั้นเท่ากัน

ASCII Art

http://acm.hust.edu.cn/vjudge/contest/view.action?cid=25507#problem/A

ASCII art คือรูปที่สร้างจากตารางของอักขระ ASCII มีรูปแบบของ ASCII art จำนวนมากในโลก แต่เราสนใจเพียงรูปแบบที่มาตรฐานที่สุดซึ่งเพียงแค่ความหนาแน่นของอักขระเท่านั้นที่จะถูกใช้แสดงบริเวณที่ถูกแรเงาในรูป

คุณจะต้องเขียนโปรแกรมที่จะเปลี่ยนรูปปิดขั้นต้นเป็น ASCII art วิธีการทำนั้นจะถูกอธิบายต่อไป

กำหนดพิกัดสองมิติ OXY โดย OX ชี้ไปทางขวาและ OY ชี้ขึ้น รูปจะถูกตีกรอบด้วยสี่เหลี่ยมจาก (0,0) ถึง (w,h) แต่ละพิกเซลในรูปคือสี่เหลี่ยมจตุรัสจาก (x,y) ถึง (x+1,y+1) โดย 0≤x<w และ 0≤y<h รูปต้นแบบจะถูกสร้างด้วยรูปปิดที่จุดยอดจะไม่สร้างเส้นที่ตัดกัน (แต่สัมผัสกันได้) แต่ละช่องพิกเซลจะถูกเติมเมื่อรูปปิดถูกสร้างขึ้น แต่ละช่องของพิกเซลจะถูกแสดงด้วยอักขระ ASCII ตามอัตราส่วนของพื้นที่ที่ถูกแรเงา โดย

[0-25)% แสดง . (46 ASCII) [25-50)% แสดง + (43 ASCII) [50-75)% แสดง o (111 ASCII) [75-100)% แสดง $ (30 ASCII) 100% แสดง # (35 ASCII)

Driving Directions

http://acm.hust.edu.cn/vjudge/contest/view.action?cid=25507#problem/B

ตรงข้ามกับความเชื่อที่แสนฮิต เอเลี่ยนนั้นจริงๆแล้วไม่สามารถบินมั่วๆบนบรรยากาศโลก พวกมันเตะพื้นโลกและออกบินอีกครั้งด้วยความสิ้นเปลือพลังงาน ดังนั้นพวกมันวางแผมอย่างรอบคอบที่จะลงสู่พื้นโลก ทำภารกิจบริเวณนั้น และออกบินต่อ เนื่องจากอารยธรรมของมนุษย์นั้นอ่อนด๋อยมากพวกมันสามารถบินข้ามต้นไม้และสิ่งก่อสร้างส่งผลให้เส้นทางสั้นที่สุดระหว่างแต่ละจุดภารกิจคือเส้นตรงธรรมดาๆ อย่างไรก็ตามเมืองยุคใหม่มีตึกโคตรสูงที่พวกเอเลี่ยนไม่สามารถบินเหนือมันทำให้การทำภารกิจที่เมืองยุคใหม่ยากมาก คุณถูกจ้างด้วยพวกเอเลี่ยนเพื่อที่จะเขียนโปรแกรมสุดโหดที่จะบอกเส้นทางการบินในเมือง งานแรกของคุณ (เพื่อที่จะเพิ่มความน่าเชื่อถือในการทำงานกับพวกเอเลี่ยนต่อไป) คือการเขียนโปรแกรมที่จะหาระยะทางสั้นที่สุดจากจุดหนึ่งไปยังอีกจุดหนึ่ง โปรแกรมนี้จะช่วยเอเลี่ยนวางแผนการใช้พลังงาน

โปรแกรมนี้จะถูกทำให้ง่ายขึ้นด้วยข้อจำกัดหลายข้อ ข้อแรกเนื่องจากการเอเลี่ยนสามารถบินเหนือสิ่งก่อสร้างส่วนมาก สิ่งเดียวที่คุณต้องกังวัลคือตึกยุคใหม่โคตรสูงเท่านั้น ข้อสองปัญหานี้เป็นปัญหาสองมิติ คุณดูแผนที่จากมุมสูงและเสแสร้งว่าทุกวัตถุอยู่บินิิกัด xy เอเลี่ยนจะถูกแทนด้วยวงกลมรัศมี r และเนื่องจากตึกยุคใหม่โคตรสูงนั้นสร้างอย่างมีระบบ ตึกจะสามารถเขียนแทนด้วยรูปสี่เหลี่ยมมุมฉากที่ีด้านขนานกับแกน x และ y

ตามนิยามปกติ ตำแหน่งของเอเลี่ยนคือตรงกลางของแผนที่และระยะทางที่มันเดินทางคือระยะทางที่สุดศูนย์กลางของวงกลมเดินทาง ระหว่างภารกิจส่วนใดส่วนหนึ่งของวงกลมไม่สามารถสัมผัสตึกยุคใหม่โคตรสูง

ในรูปแรกเอเลี่ยนมีรัศมี r=1 และต้องการเดินทางจาก A ไป B เส้นตรงคือเส้นทางสั้นสุดหารไม่สนใจตึกยุคใหม่โคตรสูงหมายเลข 1 เส้นทางสั้นที่สุดที่หลบหลีกตึกโคตรสูงหมายเลขหนึ่งคือการการบินไปตามมุมบนขวา แต่ตึกหมายเลยสองอยู่ใกล้เกินไปที่จะบินไปทางนั้น ดังนั้นเส้นทางที่ดีที่สุดคือการบินไปตามมุมล่างซ้าย ทำให้ได้ระยะทาง 10.570796

ในรูปที่สองมันเป็นไปไม่ได้ที่จะบินหากเอเลี่ยนมีรัสมี r=2 จาก A ไป B เนื่องจากตึกยุคใหม่โคตรสูงทั้งหมดอยู่ใกล้เกินไป

ในรูปที่สามเอเลี่ยนรัศมี r=1 จะต้องบินโค้งไปมาระหว่างตึกทั้งสองเพื่อที่จะได้ระยะทางสั้นสุดจาก A ไป B คือ 11.652892

Input: บรรทัดแรก r (รัศมี) และ n (จำนวนตึก) ถัดมา n บรรทัดแต่ละบรรทัดระบุ x1 y1 x2 y2 ของแต่ละตึก

Output: บรรทัดเดียว คือระยะทางสั้นสุดเป็นทศนิยมหกตำแหน่ง หากหาไม่ได้ให้แสดง "no solution" โดยไม่ต้องมีเครื่องหายคำพูด

Kingdom Reunion

http://acm.hust.edu.cn/vjudge/contest/view.action?cid=25507#problem/C

เคลวิล และ คาร์ล เป็นลูกพี่ลูกน้องกันและเป็นราชาของเมืองสองเมืองคือ แอสเทรียและแอปส์เทรีย ร้อยปีที่แล้วประเทศทั้งสองเป็นประเทศเดียวกันแต่ราชาเก่า เฮลวิก ตายและทิ้งประเทศให้ลูกทั้งสอง เอียน และ อินกรัม ไม่มีใครรู้ว่าจะทำไงดีจนกระทั่วแผนการแบ่งประเทศเป็นสองส่วนเท่ากันได้ถูกเสนอขึ้น การแบ่งนี้โคตรยากจนต้องใช้คนจากอนาคต โชคร้ายยิ่งนักบุคคลทั้งห้าพยายามจะแก้ปัญหานี้แล้วไม่สำเร็จจึงทำให้เกิดสงครามกลางเมืองขึ้น สงครามนี้กินเวลาเจ็ดปีและสิ้นสุดด้วย NEERC (ไม่สำคัญ) ตามที่กฎหมายได้กล่าวประเทศจะต้องถูกแบ่งเป็นสองส่วนสำหรับ เอียน และ อินกรัม แต่ประเทศทั้งสองมีพื้นที่ไม่เท่ากัน สงครามจึงเริ่มต้นอีกครั้ง

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

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

สำหรับแต่ละประเทศเส้นที่ถูกสร้างขึ้นด้วยเสาเขตแดนจะเป็นรูปหายเหลี่ยม เส้นขอบเหล่านั้นจะถูกพิจารณาเป็นรูปหลายเหลี่ยมถ้ามันมีอย่างน้อยสามจุดที่ไม่ตัดกันเอง ไม่สัมผัสกันเอง ไม่มีรู และมีพื้นที่ไม่เป็นศูนย์ พื้นที่ของ แอสเทรียและแอปส์เทรียไม่ซ้อนทับกัน พื้นที่ของ แอแอปส์ทรีอาจะต้องเป็นพื้นที่ของแอสเทรียและแอปส์เทรียรวมกันเป๊ะๆ

จงเขียนโปรแกรมพี่ดูว่าคุณสมบัติเหล่านี้ถูกต้อง

Flights

กองทัพนั้นงานยุ่ง การฝึกซ้อมทางการทหารนั้นเริ่มขึ้นเมื่อวาน หน่วยงานแต่ละหน่วยกำลังทำหน้าที่อย่างดีที่สุด (มั้ง) ตัวอย่างเช่น หน่วยปืนใหญ่ก็กำลังยิงจรวด ในขณะที่หน่วยอากาศยานก็กำลังส่งเสบียงให้ทหารราบ

สนามฝึกซ้อมนั้นเป็นเส้นตรง ฐานทัพอากาศและกองทหารราบนั้นอยู่บนจุดบางจุดบนเส้นตรงนี้ และหน่วยปืนใหญ่ก็กำลังยิงจรวดไปทุกที่ การยิงจรวดทุกครั้งนั้นมีการวางแผนไว้เรียบร้อยแล้ว ว่า ยิงเมื่อไร และ มีเส้นทางอย่างไร (อย่าลืมว่ามันเป็นเพียงการซ้อมรบ) แผนการบินของหน่วยอากาศยานก็ได้ทำไว้แล้วเช่นกัน ทุก ๆ อย่างควรจะไม่มีปัญหา แต่จรวดก็ช่างน่ากลัวอยู่ดี ซึ่งอาจจะเกิดปัญหาได้ถึงแม้จะเป็นการฝึกซ้อมก็ตาม

คุณจะต้องช่วยนายพลแห่งหน่วยอากาศยานเพื่อวางแผนเพดานบินปลอดภัยต่ำสุดสำหรับการบินต่าง ๆ จากข้อมูลช่วงเวลาการบินและช่วงตำแหน่งที่จะบิน เพดานบินปลอดภัยต่ำสุดสำหรับเที่ยวบินคือ ความสูงน้อยสุดที่ทางเดินของจรวดทั้งหมดในช่วงเวลาและช่วงตำแหน่งนั้นอยู่ต่ำกว่าหรือเท่ากับความสูงดังกล่าว ถ้าไม่มีจรวดอยู่ในช่วงเวลาและช่วงตำแหน่งดังกล่าวแล้ว เพดานบินปลอดภัยต่ำสุดคือ 0

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

ดังตัวอย่างในรูป (ดูจาก link) มีจรวดอยู่สองอันซึ่งมีเส้นทางแสดงดังเส้นทึบ และมีเพดานบินปลอดภัยต่ำสุดของเที่ยวบินต่าง ๆ แสดงดังเส้นประ เส้นแนวตั้งระบุขอบเขตของช่วงตำแหน่งของเที่ยวบิน ส่วนช่วงเวลาของเที่ยวบินในตัวอย่างนี้ รวมเวลายิงของจรวดทั้งสองอยู่


ข้อมูลนำเข้า:

บรรทัดแรกระบุจำนวนแผนการยิงจรวด n (1 <= n <= 50,000)

หลังจากนั้นอีก n บรรทัดเป็นข้อมูลการยิงจรวด โดยที่แต่ละบรรทัด ประกอบด้วยจำนวนเต็ม 3 ตัว คือ p ซึ่งระบุตำแหน่งที่ยิงจรวด และตำแหน่งสูงสุดของเส้นทางของจรวด x y (0 <= p <= x <= 50,0000; 0 < y <= 50) โดยที่ p และ x เป็นตำแหน่งบนเส้นตรงสนามฝึกซ้อม และ y เป็นความสูงของจุดสูงสุดของเส้นทางของจรวด

จรวดจะถูกยิงที่ละลูกในแต่ละนาที ตามลำดับที่ปรากฎในข้อมูลนำเข้า

บรรทัดถัดมาจะระบุจำนวนเที่ยวบิน m (1 <= m <= 20,000)

หลังจากนั้นอีก m บรรทัดเป็นข้อมูลเที่ยวบินโดยที่แต่ละบรรทัด ประกอบด้วยจำนวนเต็ม 4 ตัว t1 t2 x1 x2 โดยที่ t1 t2 คือช่วงเวลาของเที่ยวบิน ส่วน x1 x2 คือช่วงตำแหน่งของเที่ยวบินบนเส้นตรงสนามฝึกซ้อม


ข้อมูลส่งออก:

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

Birthday

มันเป็นวันเกิดน้องสาวตัวน้อยๆของคุณ และตามหลักการแล้วเธอจะต้องตัดเค้กวงกลม น้องสาวของคุณยังเด็กมากจึงตัดเค้กไม่ค่อยเก่ง ทุกครั้งที่เธอตัดเค้กเค้กจะถูกแบ่งตามเส้นแต่ไม่จำเป็นต้องเป็นสองส่วนเท่ากัน เธอตัดเค้กซ้ำแล้วซ้ำเล่าจนได้เค้กที่หน้าตาน่าเกลียด (แต่ยังอร่อยนะ) หน้าที่ของคุณคือ กำหนดการตัดให้ช่วยน้องสาวของคุณหาว่าเค้กโดนแบ่งเป็นกี่ชิ้น โดย

  • เค้กจะถูกวางบนพิกัด xy ที่จุดกึ่งกลางของเค้กอยู่ที่ (0,0)
  • เค้กจะไม่มีความหนา
  • ไม่มีการตัดครั้งใดทับกันพอดี
  • จุดยอดของเส้นการตัดทั้งสองจุดของแต่ละเส้นจะอยู่นอกบริเวณเค้ก
  • ทุกการตัดจะผ่านเค้ก (ดังนั้นจะมีจำนวนเค้กเป็นจำนวนบวกทั้งสองข้างของทุกการตัด)

การเขียนโปรแกรม คุณจะต้องเขียนฟังก์ชัน pieces(int R,int N,int *X1,int *Y1,int *X2,int *Y2) โดย R: รัศมีเค้ก N: จำนวนการตัด X1 Y1 X2 Y2 อาเรย์เก็บว่าตัดจากจุด (X1[i],Y1[i]) ไปยัง (X2[i],Y2[i]) และจะคืนค่าจะนวนชิ้นของเค้กหลังการตัด

ขอบเขตข้อมูล 1≤R≤500 1≤N≤1000 -500≤X1[i],X2[i],Y1[i],Y2[i]≤500

Citizen

หลังจากไม่เที่ยวโซลและปารีสคุณตัดสินใจที่จะไปเที่ยวอีกเยอะๆคุณจึงอยากได้สัญชาติของประเทศหลายๆประเทศในเวลาเดียวกันให้มากที่สุดเท่าที่จะเป็นไปได้

เนื่องจากนักคณิตศาสตร์ได้ยึดครององค์การสหประชาชาติ กฎการขอสัญชาติจึงง่ายดายมาก แม้ว่าแต่ละประเทศมีกฎที่แตกต่างกันในการให้สัญชาติ ทุกประเทศจะปฏิบัติตามเงื่อนไขเดียวกัน

  • คุณได้สัญชาติถ้าคุณอยู่ในประเทศนั้นอย่างต่อเนื่องเป็นเวลา p ปี
  • ถ้าคุณออกจากประเทศเป็นเลา q ปีโดยไม่กลับมาเยี่ยมเลย สถานะสัญชาติจะหายไป

ค่า p และ q ของแต่ละประเทศจะต่างกันไป คุณสามารถถือได้ว่าเวลาที่คุณใช้ในการเดินทางระหว่างประเทศนั้นเล็กน้อยมาก (นับเป็น 0) และสำหรับแต่ละประเทศ p จะเป็นเลขคู่ และ q จะเป็นเลขคี่

ตัวอย่าง สมมติว่ากฎของประเทศห้าประเทศเป็นดังนี้

  • ออสเตรเลีย p=2 q=15
  • บราซิล p=6 q=3
  • ฝรั่งเศส p=6 q=11
  • อินเดีย p=4 q=7
  • สิงคโปร์ p=8 q=5

แผนของคุณอาจเป็นดังนี้

  • ไปฝรั่งเศสและอยู่ที่นั่น 6 ปีเพื่อได้สัญชาติฝรั่งเศส
  • ไปออสเตรเลียและอยู่ที่นั่น 2 ปีเพื่อได้สัญชาติออสเตรเลีย
  • ไปอินเดียและอยู่ที่นั่น 4 ปีเพื่อได้สัญชาติอินเดีย
  • แวะฝรั่งเศสอย่างรวดเร็วเพื่อรักษาสถานภาพสัญชาติฝรั่งเศส (ไม่นับเวลา)
  • บินไปบราซิล 6 ปีเพื่อได้สัญชาติบราซิล

สังเกตได้ว่าหากคุณไม่แวะฝรั่งเศสหลังจากอินเดีย คุณจะเสียสัญชาติฝรั่งเศส (2+4+6 ปีในออสเตรเลีย อินเดีย และบราซิลมีค่ามากกว่า q=11 ของฝรั่งเศส) นี่คือจำนวนสัญชาติมากที่สุดที่คุณมีได้ หากคุณพยายามได้สัญชาติสิงคโปร์ คุณจะสูญเสียสัญชาติอินเดียและบราซิลระหว่างระยะเวลานั้น มีวิธีอีกมากมายที่จะได้ 4 สัญชาติในเวลาเดียวกันแต่ไม่มีวิธีที่จะได้มากกว่านั้น

การเขียนโปรแกรม คุณจะต้องเขียนฟังก์ชัน countries ดังนี้: int countries(int N,int *P,int *Q) โดยฟังก์ชันนี้จะคำนวณจำนวนที่มากที่สุดของสัญชาติที่คุณสามารถถือได้ในเวลาหนึ่ง

ตัวแปร N: จำนวนประเทศ P: อาเรย์ยาว N เก็บค่า P แต่ละประเทศ Q: อาเรย์ยาว N เก็บค่า Q แต่ละประเทศ

ขอบเขตข้อมูล 1≤N≤100000 2≤P[i]≤10000, P[i] เป็นเลขคู่ 1≤Q[i]≤9999, Q[i] เป็นเลขคี่

Fog

ในฐานะหัวหน้าของเกาะ Oz คุณพยายามที่จะทำแผนที่ของสะพานที่เชื่อมเกาะ อย่างไรก็ตามเกาะทั้งหมดถูกปกคลุมด้วยหมอกทำให้คุณมองไม่เห็นอะไรเลย ด้วยความลำบากนี้คุณตัดสินใจที่จะพายเรือไปตรวจสอบสะพานด้วยตนเอง

แผนของคุณคือพายเรือขึ้นและลงตามแม่น้ำ แม้ว่าคุณจะมองไม่เห็นสะพานจากระยะไกล คุณจะรับรู้ถึงการมีของสะพานหากคุณอยู่ล่างมันพอดี เนื่องหมอกอันหนาแน่นคุณไม่สามารถมองทางได้อย่างแม่นยำ คุณจึงสามารถทำได้เพียงพายเรือจากตลิ่งฝั่งหนึ่งไปยังอีกฝั่งและนับจำนวนสะพานที่คุณลอดทั้งหมด

แม่น้ำมีตลิ่งบนและตลิ่งล่างแต่ละตลิ่งจะมีเกาะ N เกาะ ชื่อว่าเกาะ 1, 2, 3, …, N เรียงจากซ้ายไปขวา

คุณไม่รู้จำนวนของสะพาน อย่างไรก็ตามคุณรู้ว่า

  • แต่ละสะพานจะเริ่มที่จุด 1, 2, 3, …, N ของตลิ่งบนและจบลงที่จุดๆหนึ่งของตลิ่งล่าง
  • ไม่มีสะพานใดตัดกัน แม้ว่ามันจะสามารถเริ่มหรือสิ้นสุดที่จุดเดียวกัน

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

  • พายจากจุด 1, 2, 3, …, N ของตลิ่งบนไปยังจุดๆหนึ่งของตลิ่งล่าง
  • นับสะพานที่คุณลอด โดยคุณจะไม่นับสะพานที่เริ่มหรือสิ้นสุดที่จุดที่คุณเริ่มหรือสิ้นสุดการพายเรือ
  • บางครั้ง การพายเรือครั้งนั้นจะทำให้คุณรู้ตัวว่าคุณอยู่ใต้สะพานตลอดเวลา (มีสะพานเชื่อมจากจุดเริ่มต้นการพายไปยังจุดสิ้นสุดการพาย)

แต่ละเส้นทางสามารถเริ่มและสิ้นสุดที่ไหนก็ได้ (คุณไม่จำเป็นต้องเริ่มที่จุดสิ้นสุดของครั้งที่แล้ว) แขนของคุณแข็งแรงเพียงพอที่จะให้คุณพายเรือได้อย่างมาก 250000 ครั้ง

การเขียนโปรแกรม คุณจะต้องสร้าง goSail() ซึ่งจะเรียก row() และ foundBridge() โดย int row(int top,int bottom) จะส่งคืนค่าจำนวนสะพานที่คุณลอดหากพายจากจุด top บนตลิ่งบนและจบที่จุด bottom บนตลิ่งล่าง หากคุณอยู่ใต้สะพานตลอดเวลา row จะคืนค่า -1

void foundBridge(int top,int bottom) จะส่งคำตอบว่าคุณได้เจอสะพานที่เริ่มจากจุด top บนตลิ่งบนและจบที่จุด bottom บนตลิ่งล่าง

goSail(int n) เป็นฟังก์ชันที่คุณเขียนและจะรับค่า n คือจำนวนจุดบนแต่ละตลิ่ง

ขอบเขตข้อมูล 1≤N≤100000

Barricades

http://main.edu.pl/en/archive/pa/2007/bar (*63)

เฉลยนะจ๊ะ: http://pastebin.com/v38eZqUZ


เมือง Byteland คือเกาะที่ประกอบด้วยเมืองจำนวนหนึ่งซึ่งถูกเชื่อมต่อด้วยถนนสองทาง ถนนทั้งหมดจะถูกเชื่อมต่อในลักษณะที่ว่าทุกๆคู่เมืองจะมีเส้นทางเพียงเส้นทางเดียวเชื่อมต่อกัน (หากไม่เดินทางซ้ำผ่านเมืองเดิม)

โชคร้ายยิ่งนักที่ช่วงเวลาที่เลวร้ายได้คืบคลานเข้ามา เมือง Byteland กำลังเข้าสู่สงคราม!!! เจ้าเมือง Byteland (ชื่อ Byteasar) ได้ทำการวางแผนปกป้องเมือง เขาได้ทำการก่อตั้งเขตปลอดภัยพิเศษขึ้น ซึ่งเขตนั้นจะถูกสร้างขึ้นจากการทำลายถนนบางเส้นใน Byteland เพื่อให้การเดินทางผ่านถนนเส้นนั้นเป็นไปไม่ได้ เพื่อที่จะทำให้เขตปลอดภัยนั้นปลอดภัย เมืองในเขตปลอดภัยต้องมีคุณสมบัติดังนี้:

  • จากเมืองที่อยู่ในเขตปลอดภัย คุณจะสามารถเดินทางไปยังเมืองใดๆก็ได้ที่อยู่ในเขตปลอดภัยเช่นกัน
  • คุณจะไม่สามารถเดินทางจากเมืองที่อยู่นอกเขตปลอดภัยไปยังเมืองที่อยู่ในเขตปลอดภัย
  • มีเมือง k เมืองพอดีในเขตปลอดภัย

มีวิธีการเลือกเขตปลอดภัยหลากหลายวิธีถูกเสนอขึ้น แต่ละค่าของ k มันจำเป็นที่เราจะต้องรู้จำนวนถนนที่น้อยที่สุดที่จะต้องถูกทำลายเพื่อที่สร้างเขตปลอดภัยขนาด k หน้าที่ของคุณคือการช่วย Byteasar เขียนหาว่าสำหรับแต่ละค่า k จะต้องทำลายถนนอย่างน้อยกี่เส้นเพื่อสร้างเขตปลอดภัยนั้น

Task

จงเขียนโปรแกรมที่

  • อ่านข้อมูลนำเข้าซึ่งจะอธิบายสภาพถนนใน Byteland และจำนวนครั้งของคำถาม
  • สำหรับแต่ละคำถาม ค้นหาจำนวนการทำลายถนนที่น้อยที่สุดที่เพียงพอกับการสร้างเขตปลอดภัยในขนาดนั้นๆ
  • แสดงผลคำตอบทางข้อมูลส่งออก

Input

บรรทัดแรกประกอบด้วยจำนวนเต็มหนึ่งจำนวน n (1≤n≤3000) แสดงจำนวนเมืองใน Byteland เมืองจะถูกตั้งชื่อ 1, 2, 3, …, n

ต่อจากนั้น n-1 บรรทัดแต่ละบรรทัดประกอบด้วยคู่ของจำนวนเต็ม a, b (1≤a, b≤n) แต่ละคู่ a, b แสดงถนนเชื่อมเมือง a และ b แต่ละคู่ของเมืองจะถูกเชื่อมด้วยถนนอย่างมากหนึ่งเส้น

บรรทัดต่อมาประกอบด้วยจำนวนเต็มหนึ่งจำนวน m (1≤m≤n) แสดงจำนวนของคำถาม ต่อจากนั้น m บรรทัดประกอบด้วยจำนวนเต็มหนึ่งจำนวน k_i (1≤k_i≤n) แสดงคำถามลำดับที่ i ซึ่งหมายถึงจำนวนเมืองที่ต้องการจะมีในเขตปลอดภัย

Output โปรแกรมของคุณจะต้องแสดงจำนวนเต็ม m จำนวนแยกกัน m บรรทัด โดยแต่ละบรรทัดจะเป็น

  • -1 ถ้าคุณไม่สามารถสร้างเขตปลอดภัยขนาด k_i ได้
  • จำนวนการทำลายถนนที่น้อยที่สุดที่เพียงพอกับการสร้างเขตปลอดภัยในขนาด k_i

Example

ข้อมูลนำเข้า:

7
1 2
1 3
2 4
2 5
3 6
3 7
2
2
3

ข้อมูลส่งออก:

2
1

Byteland

http://main.edu.pl/en/archive/oig/1/baj (*368)

เฉลยนะจ๊ะ: http://pastebin.com/XPaMwX7e


พระราชา Byteasar มหาราชคือกษัตริย์ที่ร่ำรวยและแข็งแกร่งของประเทศ Byteland ประเทศนี้ประกอบด้วยเมือง n เมือง Byteasar ต้องการที่จะพัฒนาประเทศจึงได้สั่งสถาปนิกเตรียมแผนสำหรับพัฒนาทางด่วนระหว่างเมือง เขาได้รับข้อเสนอ m แบบ ซึ่งแต่ละแบบจะถูกอธิบายด้วยเลขสามจำนวนคือ p, k, w โดย p และ k คือเมืองต้นทางและปลายทางของทางด่วนและ w คือราคาในการสร้างทางด่วนนั้น แต่ละทางด่วนเป็นถนนเดินได้สองทางและจะไม่ตัดผ่านเมืองใดๆยกเว้นเมืองต้นทางและปลายทาง

พระราชาต้องการที่จะสร้างทางด่วนเพื่อให้มีเส้นทางการเดินทางสำหรับทุกคู่เมือง (แม้ว่าเส้นทางนั้นมีความเป็นไปได้ที่จะต้องแวะผ่านเมืองอื่น) Byteasar ต้องการที่จะเสียเงินค่าสร้างรวมน้อยที่สุดเช่นเดียวกัน

Task

จงเขียนโปรแกรมที่

  • รับจำนวนของเมือง จำนวนของแผนทางด่วน และคำอธิบายทางแต่ละเส้น
  • ค้นหาว่าในแต่ละเส้นแผนทางด่วน เส้นทางใดที่จะสามารถอยู่ในความต้องการของ Byteasar (มีความเป็นไปได้ที่จะอยู่ในเซตของเส้นทางถูกสร้าง)
  • แสดงผลการทำงานของโปรแกรม

Input

บรรทัดแรกประกอบด้้วยจำนวนเต็ม 2 จำนวนคือจำนวนเมือง n และจำนวนแผนทางด่วน m (2≤n≤7000, 1≤m≤300000) ต่อมา m บรรทัดแต่ละบรรทัดประด้วยจำนวนเต็ม p, k, w อธิบายแผนทางด่วนแต่ละเส้น (1≤p, k≤n, 1≤w≤100000)

Output

แสดงผล m บรรทัดโดยบรรทัดที่ i จะต้องเป็นคำว่า TAK (แปลว่าใช่) หรือ NIE (แปลว่าไม่) แสดงว่าแผนเส้นทางที่ i สามารถเติมเต็มความต้องการของ Byteasar เรารับประกันว่าจะมีอย่างน้อยหนึ่งเซตของเส้นทางที่จะเติมเต็มความต้องการของ Byteasar

Example

ข้อมูลนำเข้า:

6 10
1 2 2
1 6 1
1 5 3
4 1 5
2 6 2
2 3 5
4 3 4
3 5 4
4 5 4
5 6 3

ข้อมูลส่งออก

TAK
TAK
TAK
NIE
TAK
NIE
TAK
TAK
TAK
TAK

Mushrooms

http://main.edu.pl/en/archive/pa/2010/grz (*77)

เฉลยนะจ๊ะ: http://pastebin.com/bnbGiKs1


ฝนได้ตกที่ป่าแห่ง Bytean นักล่าเห็ดนามว่า Byteasar ได้ตัดสินในที่จะออกไปล่าเห็ด

Byteasar รู้เส้นทางที่จะนำเขาไปสู่ป่า ซึ่งเส้นทางนั้นจะมีแหล่งเห็ดมากมายระหว่างทาง สองแหล่งเห็ดใดๆที่อยู่ติดกันจะห่างเท่ากันเสมอซึ่ง Byteasar จะใช้เวลา 15 นาทีในการเดินทางระหว่างสองแหล่งเห็ดนั้น Byteasar ก็เหมือนกับนักล่าเห็ดชั้นสูงทั่วไปเพราะเขาจะใช้เวลาน้อยมาก (นับเป็น 0) ในการเก็บเห็ดทั้งหมดในแหล่งเห็ด เป็นที่รู้กันว่าเห็ดในแหล่งเห็ดจะกลับมาเติบโตหลังจากถูกเก็บไปแล้ว 30 นาที

ระบุจำนวนของเห็ดในแต่ละแหล่งเห็ดเป็นเส้นตรง จงหาจำนวนเห็ดที่มากที่สุดที่ Byteasar สามารถเก็บได้โดยเขาจะเริ่มต้นที่แหล่งเห็ดซ้ายสุด และจบการเดินทางที่แหล่งเห็ดใดก็ได้

Input

บรรทัดแรกประกอบด้วยจำนวนเต็มสองจำนวน n และ t (1≤n, t≤1000000) แสดงจำนวนแหล่งเห็ดและเวลาที่ Byteasar ใช้ในการเก็บเห็ดทั้งหมด หน่วยเป็น 15 นาที บรรทัดที่สองประกอบด้วยจำนวนเต็ม a_1, a_2, ..., a_n (1≤a_i≤1000000) แทนจำนวนเห็ดในแต่ละแหล่งเห็ดตามเส้นตรงการเดินทาง Byteasar จะเริ่มการเดินทางที่แหล่งเห็ดแรก และจะเริ่มเก็บเห็ดที่เวลา 0 และจะเก็บเห็ดได้จนถึงเวลา t

Output

บรรทัดแรกและบรรทัดเดียวแสดงจำนวนเห็ดสูงสุดที่ Byteasar จะเก็บได้

Example

ข้อมูลนำเข้า

5 4
3 4 3 5 1

ข้อมูลส่งออก

18

Rooks

http://main.edu.pl/en/archive/oi/3/wie (*102)

เฉลยนะจ๊ะ: http://pastebin.com/Pa0HFh7t


บนกระดานหมากรุกขนาด nxn เราต้องการวางเรือ n ตัวตามกฎต่อไปนี้

  • เรือตัวที่ i จะต้องวางอยู่ในช่องสี่เหลี่ยมที่อยู่ในสี่เหลี่ยมใหญ่ที่มีพิกัดมุมบนซ้ายเป็น (a_i,b_i) และพิกัดขวาเป็น (c_i,d_i) เมื่อ 1≤a_i≤c_i≤n และ 1≤b_i≤d_i≤n
  • ไม่มีเรือตัวใดกินกันได้ กล่าวไม่มีเรือสองตัวใดๆอยู่ในแถวหรือคอลัมน์เดียวกัน

Task

จงเขียนโปรแกรมที่

  • รับขนาดของตารางและพิกัดช่องสี่เหลี่ยมใหญ่ที่เรือแต่ละตัวสามารถถูกวางได้
  • ค้นหาจุดที่เราสามารถวางเรือตามกฎได้ หากมีหลายวิธีให้เลือกมาเพียงวิธีเดียว
  • แสดงผลวิธีที่หาได้ออกทางข้อมูลส่งออก หากไม่สามารถหาได้ให้แสดงคำว่า NIE (แปลว่าไม่)

Input

บรรทัดแรกคือจำนวนเต็มเต็ม n (1≤n≤3000) แทนขนาดตาราง ต่อมา n บรรทัดคือจำนวนเต็มสี่จำนวนคั่นด้วยช่องว่างหนึ่งช่องแสดงสี่เหลี่ยมขอบเขตของเรือแต่ละตัวตามลำดับ a, b, c และ d

Output

ข้อมูลส่งออกอาจเป็นเพียงคำว่า NIE หรืออาจประกอบด้วย n บรรทัดแต่ละบรรทัดแสดงพิกัด (x_i,y_i) ที่เรือตัวที่ i ในข้อมูลนำเข้าจะถูกวางเพื่อให้ถูกตามเงื่อนไขที่กำหนด

Example

ข้อมูลนำเข้า

4
1 1 1 1 
1 3 2 4
3 1 4 2
2 2 4 4

ข้อมูลส่งออก

1 1
2 3
3 2
4 4