டாப்கோடர் ஓபன் 2019 சவால்: பையை ஆறு துண்டுகளாக வெட்டுங்கள்

டாப்கோடர் ஓபன் 2019 சவால்: பையை ஆறு துண்டுகளாக வெட்டுங்கள்
பாதையில் "எங்கள் வென்றது: டாப்கோடர் ஓபன் 2019" அல்காரிதம் டிராக்கிலிருந்து சிக்கல்களை வெளியிடுகிறேன் (கிளாசிக்கல் ஸ்போர்ட்ஸ் புரோகிராமிங். ஒன்றரை மணி நேரத்தில் ஜாவா, சி#, சி++ அல்லது பைதான் ஆகிய மூன்று சிக்கல்களைத் தீர்க்க வேண்டும்.)

1. ஆறுக்கு பை

பிரச்சனை அறிக்கை

நேர வரம்பு 4 வினாடிகள்.

உங்களிடம் ஒரு பை உள்ளது. மேலே இருந்து பார்க்கும் போது, ​​கேக் ஒரு (கண்டிப்பாக) குவிந்த பலகோணத்தின் வடிவத்தைக் கொண்டுள்ளது. X மற்றும் Y முழு எண்களில் உள்ள முனைகளின் ஆயத்தொகுப்புகள் உங்களுக்கு வழங்கப்பட்டுள்ளன.

உங்களுக்கு ஐந்து நண்பர்கள் உள்ளனர். நீங்கள் பையை சமமான பகுதியின் ஆறு துண்டுகளாகப் பிரிக்க விரும்புகிறீர்கள் (ஆனால் ஒரே வடிவம் அவசியமில்லை). நிச்சயமாக, யார் வேண்டுமானாலும் ஐந்து வெட்டுக்களில் செய்யலாம், ஆனால் ஒரு சார்பு மட்டுமே அதை மூன்று வெட்டுக்களில் செய்ய முடியும்.

பையை ஆறு சம பாகங்களாகப் பிரிக்கும் ஒரு புள்ளியின் மூலம் நேர் கோடுகளில் மூன்று வெட்டுக்களைக் கண்டறியவும். அச்சு {x, y, d1, d2, d3}, இதில் (x, y) என்பது மூன்று வெட்டுக்களின் பொதுவான புள்ளியாகும், மேலும் d1, d2, d3 ஆகியவை ரேடியன்களில் வெட்டுக்களின் திசைக் கோணங்களாகும்.

வரையறைவகுப்பு: CakeForSix
முறை: வெட்டு
அளவுருக்கள்: int[], int[] Returns: double[] முறை கையொப்பம்: double[] cut(int[] x, int[] y)
(உங்கள் முறை பொதுவில் இருப்பதை உறுதி செய்து கொள்ளவும்)

குறிப்புகள்

  • x அச்சில் நேர்மறை திசை 0 (ரேடியன்கள்), y அச்சில் நேர்மறை திசை பை/2 (ரேடியன்கள்).
  • d திசையில் ஒரு வெட்டு எந்த முழு எண் k க்கும் pi*k+d திசையில் வெட்டப்பட்டதைப் போன்றது.
  • நீங்கள் எந்த திசைகளையும் வெளியிடலாம், அவை [0, pi) இலிருந்து இருக்க வேண்டியதில்லை.
  • கிரேடர் உங்கள் ஆறு கேக்கின் பரப்பளவை இரட்டைக் கணக்கில் கணக்கிடுவார். அவற்றுக்கிடையேயான ஒப்பீட்டு அல்லது முழுமையான வேறுபாடு 10^(-4) க்கும் குறைவாக இருந்தால் பதில் ஏற்றுக்கொள்ளப்படும்.
  • இன்னும் துல்லியமாக, கிரேடரால் கணக்கிடப்பட்ட உங்களின் ஆறு பகுதிகளில் X மற்றும் Y ஆகியவை சிறியதாகவும் பெரியதாகவும் இருக்கட்டும். ஒய் என்றால் உங்கள் பதில் ஏற்றுக்கொள்ளப்படும்
  • (சிக்கலின் அசல் பதிப்பு 1e-7 க்குப் பதிலாக 1e-4 இன் துல்லியத்தைப் பயன்படுத்தியது. காப்பகத்தில் இந்தச் சிக்கலைத் தீர்க்க, துல்லியமான வரம்பு குறைக்கப்பட்டது, இது ஒரு துல்லியத்துடன் சிக்கலைத் தீர்க்க முடியாததாகச் செய்யும் அழைப்பு வழக்குகள் இருப்பதால் 1e-7. ஒரு சிறந்த உலகில், வரம்புகள் அத்தகைய நிகழ்வுகளை அனுமதிக்காது, இன்னும் அதிக துல்லியம் தேவைப்படுகிறது, எனவே சில பொதுவான எண் தேர்வுமுறை மூலம் சிக்கலைத் தீர்ப்பது எளிதானது அல்ல.)

கட்டுப்பாடுகள்

  • x 3 முதல் 50 வரையிலான கூறுகளை உள்ளடக்கியது.
  • y ஆனது x இன் அதே எண்ணிக்கையிலான உறுப்புகளைக் கொண்டுள்ளது.
  • 0 மற்றும் 10 உட்பட அனைத்து ஆயத்தொகுப்புகளும்
  • x மற்றும் y ஒரு குவிவு பலகோணத்தை எதிரெதிர் திசையில் வரையறுக்கின்றன.

ஆங்கிலத்தில் அசல்

சிக்கல் அறிக்கை

நேர வரம்பு 4 வினாடிகள்.

உங்களிடம் ஒரு கேக் உள்ளது. மேலே இருந்து பார்த்தால், கேக் ஒரு (கண்டிப்பாக) குவிந்த பலகோணம். int[]sx மற்றும் y இல் அதன் முனைகளின் ஆயத்தொகுப்புகள் உங்களுக்கு வழங்கப்பட்டுள்ளன.

உங்களுக்கு ஐந்து நண்பர்கள் உள்ளனர். நீங்கள் இப்போது கேக்கை ஆறு துண்டுகளாக சமமான பகுதிகளாக வெட்ட விரும்புகிறீர்கள் (ஆனால் சமமான வடிவத்தில் அவசியமில்லை). நிச்சயமாக, எவரும் அதை ஐந்து வெட்டுக்களில் செய்ய முடியும் - ஆனால் ஒரு உண்மையான சார்பு மட்டுமே அதை மூன்றில் செய்ய முடியும்!

கேக்கை ஆறு சமமான பெரிய பகுதிகளாக வெட்டிய அதே புள்ளியில் மூன்று நேர்கோட்டு வெட்டுக்களைக் கண்டறியவும். திரும்ப {x, y, d1, d2, d3}, இங்கு (x, y) என்பது மூன்று வெட்டுக்களின் பொதுவான புள்ளியாகும், மேலும் d1, d2, d3 ஆகியவை ரேடியன்களில் அவற்றின் திசைகளாகும்.

வரையறை

வகுப்பு: CakeForSix
முறை: வெட்டு
அளவுருக்கள்: int[], int[] Returns: double[] முறை கையொப்பம்: double[] cut(int[] x, int[] y)
(உங்கள் முறை பொதுவில் இருப்பதை உறுதி செய்து கொள்ளவும்)

குறிப்புகள்
— x அச்சில் நேர்மறை திசை 0 (ரேடியன்கள்), y அச்சில் நேர்மறை திசை பை/2 (ரேடியன்கள்).
— திசையில் d ஒரு வெட்டு எந்த முழு எண் k க்கு pi*k+d திசையில் வெட்டும் அதே.
— நீங்கள் எந்த திசையையும் திருப்பி அனுப்பலாம், அவை [0,pi) இலிருந்து இருக்க வேண்டிய அவசியமில்லை.
— கிரேடர் உங்கள் ஆறு கேக் துண்டுகளின் பகுதிகளை இரட்டையாகக் கணக்கிடுவார். அவற்றுக்கிடையேயான ஒப்பீட்டு அல்லது முழுமையான வேறுபாடு 10^(-4) க்கும் குறைவாக இருந்தால் பதில் ஏற்றுக்கொள்ளப்படும்.
— இன்னும் துல்லியமாக, கிரேடரால் கணக்கிடப்பட்ட உங்கள் ஆறு பகுதிகளில் X மற்றும் Y ஆகியவை சிறியதாகவும் பெரியதாகவும் இருக்கட்டும். பின்னர், உங்கள் பதில் Y < max( X + 10^(-4), X * (1+10^(-4)) ) எனில் ஏற்றுக்கொள்ளப்படும்.
— (சிக்கலின் அசல் பதிப்பு 1e-7 க்குப் பதிலாக 1e-4 துல்லியத்தைப் பயன்படுத்தியது. காப்பகத்தில் இந்தச் சிக்கலைத் தீர்க்க, 1e-7 துல்லியத்துடன் பணியைத் தீர்க்க முடியாத சவால் வழக்குகள் இருப்பதால் துல்லிய வரம்பு குறைக்கப்பட்டது. ஒரு சிறந்த உலகில், கட்டுப்பாடுகள் அத்தகைய நிகழ்வுகளை அனுமதிக்காது, இன்னும் அதிக துல்லியம் தேவைப்படுகிறது, இதனால் சில பொதுவான எண் தேர்வுமுறை மூலம் சிக்கலைத் தீர்ப்பது எளிதானது அல்ல.)

தடைகள்
— x ஆனது 3 மற்றும் 50 உறுப்புகளை உள்ளடக்கியதாக இருக்கும்.
— y ஆனது x இன் அதே எண்ணிக்கையிலான உறுப்புகளைக் கொண்டிருக்கும்.
— அனைத்து ஆயத்தொலைவுகளும் 0 முதல் 10,000 வரை இருக்கும்.
- x மற்றும் y ஒரு குவிவு பலகோணத்தை எதிரெதிர் திசையில் விவரிக்கும்.

உதாரணங்கள்

0)

{0, 20, 30, 50, 30, 20}
{10, 0, 0, 10, 20, 20}
ரிட்டர்ன்ஸ்:
{24.999999999437453, 9.999999999500002, 0.0, 0.7266423406817211, 2.4149503129080787 }

ஒரு சமச்சீர் ஆனால் ஒழுங்கற்ற அறுகோணம். எடுத்துக்காட்டு பதில், அதை கிடைமட்டமாக பாதியாக வெட்டுவதற்கும், ஒவ்வொரு பகுதியையும் மூன்று பகுதிகளாகப் பிரிக்கும் மையத்தில் இரண்டு வெட்டுக்களைச் செய்வதற்கும் ஒத்திருக்கிறது.

டாப்கோடர் ஓபன் 2019 சவால்: பையை ஆறு துண்டுகளாக வெட்டுங்கள்

1)

{0, 1000, 0}
{0, 0, 1000}
ரிட்டர்ன்ஸ்:
{333.3333333331763, 333.3333333332546, 0.7853981633986264, 2.0344439357948154, 2.6779450445891753 }

வலது முக்கோணம். மீண்டும், சமச்சீர் அச்சில் மூன்று வெட்டுக்களில் ஒன்றைத் தொடங்கலாம்.

டாப்கோடர் ஓபன் 2019 சவால்: பையை ஆறு துண்டுகளாக வெட்டுங்கள்

2)

{40, 70, 90, 90, 50}
{30, 20, 40, 100, 60}
ரிட்டர்ன்ஸ்:
{69.79517771922892, 52.77575974637605, 2.0616329654335885, 3.637826104091601, 4.32123485812475 }

ஒழுங்கற்ற பென்டகன்.

டாப்கோடர் ஓபன் 2019 சவால்: பையை ஆறு துண்டுகளாக வெட்டுங்கள்

3)

{300, 400, 300, 200}
{500, 600, 700, 600}
ரிட்டர்ன்ஸ்: {299.99999999974995, 599.9999999995, 0.0, 1.107148717794088, 2.034443935795705 }

ஒரு சதுரம் 45 டிகிரி சுழலும்.

டாப்கோடர் ஓபன் 2019 சவால்: பையை ஆறு துண்டுகளாக வெட்டுங்கள்

[மூல]

பதிவு செய்த பயனர்கள் மட்டுமே கணக்கெடுப்பில் பங்கேற்க முடியும். உள்நுழையவும், தயவு செய்து.

நான் பிரச்சனையை தீர்த்தேன்

  • 10 நிமிடங்களுக்குள்

  • 10-XNUM நிமிடங்கள்

  • 30-XNUM நிமிடங்கள்

  • 1-2 மணிநேரம்

  • 2 மணி நேரத்திற்கும் மேலாக

  • மற்ற

42 பயனர்கள் வாக்களித்தனர். 47 பயனர்கள் வாக்களிக்கவில்லை.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்