นี่คือปริศนาเรขาคณิตที่ท้าทายสำหรับคุณ!
ป.ร. ให้ไว้เป็นวงกลมA
และn
วงการอื่น ๆB[n]
พบว่าพื้นที่ทั้งหมดที่มีอยู่ภายในA
นั่นคือไม่ได้B
อยู่ภายในวงกลมของใด ๆ
รหัสของคุณควรสั้นที่สุด
อินพุต
ข้อมูลที่คุณป้อนควรมีข้อมูลต่อไปนี้:
A
จำนวนจุดลอยตัวเพื่อเป็นตัวแทนของรัศมีของวงกลม- รายการหมายเลขลอยจุด A
B
ไปแทนรัศมีของวงการใน B
รายชื่อศูนย์ของวงการใน โปรแกรมของคุณอาจคาดหวังว่าศูนย์ในพิกัดเชิงขั้วหรือคาร์ทีเซียน- คุณอาจได้รับจำนวน
n
วงกลมใน B หรือไม่จำเป็นต้องป้อนข้อมูลนี้ก็ได้
มันจะได้รับการสันนิษฐานว่าศูนย์กลางของวงกลมเป็นที่มาที่เป็นจุดA
(0, 0)
มีการรับประกันว่าจะไม่มีวงกลมสองวงB
เหมือนกัน แต่ไม่รับประกันว่า: วงกลมทั้งหมดของB
จุดตัดA
, ศูนย์กลางทั้งหมดB
อยู่ด้านนอกA
หรือไม่มีวงกลมสองวงที่อยู่B
ตรงข้ามกัน ตรวจสอบให้แน่ใจว่าโซลูชันของคุณสามารถจัดการกับเคสแบบขอบต่างๆ
คุณอาจได้รับการป้อนข้อมูลในลำดับใด ๆ และในรูปแบบของการป้อนข้อความ (ผ่าน stdin หรือเทียบเท่าภาษาของคุณ) พารามิเตอร์ฟังก์ชั่นหรืออาร์กิวเมนต์บรรทัดคำสั่ง
หากคุณเลือกที่จะรับข้อความควรมีตัวคั่น ASCII หนึ่งหรือสองตัวอักษรที่พิมพ์ได้ระหว่างส่วนของอินพุต
เอาท์พุต
โปรแกรมหรือฟังก์ชั่นการส่งออกควรเป็นจำนวนจุดลอยตัวเดียวที่เป็นตัวแทนของพื้นที่ทั้งหมดของคุณไม่ได้อยู่ในแวดวงของA
B
คำตอบของคุณควรแม่นยำถึงตัวเลขที่มีนัยสำคัญอย่างน้อยสามตัวสำหรับกรณีทดสอบทั้งหมด
มีการใช้กฎเกณฑ์ทั่วไปเกี่ยวกับกอล์ฟ
โซลูชันของคุณไม่ควรใช้จุดสุ่มตัวอย่างภายในวงกลมเพื่อกำหนดพื้นที่
บิวด์อินที่ค้นหาตำแหน่งทางแยกของวงกลมโดยอัตโนมัติค้นหาพื้นที่ภายในจุดตัดของวงกลมหรือแก้ไขปัญหานี้ทันทีไม่ได้รับอนุญาต
กรณีทดสอบ
ในแต่ละภาพวงกลมA
จะมีเส้นขอบสีน้ำเงินโดยมีวงกลมที่ล้อมรอบด้วยB
สีเขียวและดำ พื้นที่ที่ควรส่งคืนจะถูกเติมสีแดง
(ขอขอบคุณRainer P. เป็นพิเศษสำหรับการตรวจสอบวิธีแก้ไขปัญหาของฉัน)
กรณีทดสอบ 1:
A = {x: 0, y: 0, rad: 50}
B[0] = {x: 0, y: 0, rad: 100}
Result: 0.00
กรณีทดสอบ 2:
A = {x: 0, y: 0, rad: 100.000000}
B[0] = {x: 100.000000, y: 0.000000, rad: 50.000000}
B[1] = {x: 30.901699, y: -95.105652, rad: 50.000000}
B[2] = {x: -80.901699, y: -58.778525, rad: 50.000000}
B[3] = {x: -80.901699, y: 58.778525, rad: 50.000000}
B[4] = {x: 30.901699, y: 95.105652, rad: 50.000000}
Result: 1.3878e+04
กรณีทดสอบ 3:
A = {x: 0, y: 0, rad: 138}
B[0] = {x: 100, y: 0, rad: 100}
B[1] = {x: -50, y: -86, rad: 100}
B[2] = {x: -93, y: 135, rad: 50}
Result: 1.8969e+04
กรณีทดสอบ 4:
A = {x: 0, y: 0, rad: 121.593585}
B[0] = {x: 81.000000, y: 107.000000, rad: 59.841457}
B[1] = {x: -152.000000, y: -147.000000, rad: 50.000000}
B[2] = {x: 43.000000, y: -127.000000, rad: 105.118980}
B[3] = {x: 0.000000, y: -72.000000, rad: 57.870545}
B[4] = {x: -97.000000, y: -81.000000, rad: 98.488578}
B[5] = {x: -72.000000, y: 116.000000, rad: 66.468037}
B[6] = {x: 2.000000, y: 51.000000, rad: 50.000000}
Result: 1.1264e+04
กรณีทดสอบ 5:
A = {x: 0, y: 0, rad: 121.605921}
B[0] = {x: 0.000000, y: -293.000000, rad: 250.000000}
B[1] = {x: 0.000000, y: -56.000000, rad: 78.230429}
B[2] = {x: 0.000000, y: -102.000000, rad: 100.000000}
Result: 2.6742e+04
การอ่านที่แนะนำ:
Fewell, MP "พื้นที่ที่พบบ่อยซ้อนกันของสามวงกลม" ต.ค. 2549 เว็บ http://dspace.dsto.defence.gov.au/dspace/bitstream/1947/4551/4/DSTO-TN-0722.PR.pdf
B
นั้น อาจจะมีมูลค่าเพิ่มที่
1.8970e+04
ฉันได้รับ
B[0] - A intersection: 20653.659515
, B[1] - A intersection: 20757.824115
, B[1] - B[0] intersection: 1841.847766
, B[2] - A intersection: 1289.164541
ซึ่งอัตราผลตอบแทนที่18969.69009
เป็นคำตอบ