టాప్‌కోడర్ ఓపెన్ 2019 ఛాలెంజ్: పైను ఆరు ముక్కలుగా కత్తిరించండి

టాప్‌కోడర్ ఓపెన్ 2019 ఛాలెంజ్: పైను ఆరు ముక్కలుగా కత్తిరించండి
అడుగుజాడల్లో "మాది గెలిచింది: టాప్‌కోడర్ ఓపెన్ 2019" నేను అల్గారిథమ్ ట్రాక్ నుండి సమస్యలను ప్రచురిస్తాను (క్లాసికల్ స్పోర్ట్స్ ప్రోగ్రామింగ్. ఒకటిన్నర గంటల్లో మీరు జావా, సి#, సి++ లేదా పైథాన్‌లో మూడు సమస్యలను పరిష్కరించాలి.)

1. ఆరు కోసం పై

సమస్య యొక్క ప్రకటన

కాల పరిమితి 4 సెకన్లు.

మీకు పై ఉంది. పై నుండి చూసినప్పుడు, కేక్ (కచ్చితంగా) కుంభాకార బహుభుజి ఆకారాన్ని కలిగి ఉంటుంది. మీకు X మరియు Y పూర్ణాంకాలలోని శీర్షాల కోఆర్డినేట్‌లు ఇవ్వబడ్డాయి.

మీకు ఐదుగురు స్నేహితులు ఉన్నారు. మీరు పైను సమాన విస్తీర్ణంలో ఆరు ముక్కలుగా విభజించాలనుకుంటున్నారు (కానీ అదే ఆకారం అవసరం లేదు). అయితే, ఎవరైనా దీన్ని ఐదు కట్‌లలో చేయగలరు, కానీ ఒక ప్రో మాత్రమే దీన్ని మూడు కట్‌లలో చేయగలరు.

పైను ఆరు సమాన భాగాలుగా విభజించే ఒక పాయింట్ ద్వారా సరళ రేఖలలో మూడు కోతలను కనుగొనండి. ప్రింట్ {x, y, d1, d2, d3}, ఇక్కడ (x, y) అనేది మూడు కట్‌ల యొక్క సాధారణ బిందువు మరియు d1, d2, d3 అనేవి రేడియన్‌లలో కట్‌ల దిశ కోణాలు.

నిర్వచనంతరగతి: CakeForSix
పద్ధతి: కట్
పారామితులు: int[], int[] రిటర్న్స్: డబుల్[] పద్ధతి సంతకం: డబుల్[] కట్(int[] x, int[] y)
(మీ పద్ధతి పబ్లిక్ అని నిర్ధారించుకోండి)

గమనికలు

  • x-అక్షం వెంట సానుకూల దిశ 0 (రేడియన్‌లు), y-అక్షం వెంట సానుకూల దిశ pi/2 (రేడియన్‌లు).
  • d దిశలో కట్ ఏదైనా పూర్ణాంకం k కోసం pi*k+d దిశలో కట్ వలె ఉంటుంది.
  • మీరు ఏవైనా దిశలను అవుట్‌పుట్ చేయవచ్చు, అవి [0, pi) నుండి ఉండవలసిన అవసరం లేదు.
  • గ్రేడర్ మీ ఆరు కేక్ ముక్కల వైశాల్యాన్ని డబుల్స్‌లో లెక్కిస్తారు. వాటి మధ్య సాపేక్ష లేదా సంపూర్ణ వ్యత్యాసం 10^(-4) కంటే తక్కువగా ఉంటే సమాధానం అంగీకరించబడుతుంది.
  • మరింత ఖచ్చితంగా చెప్పాలంటే, గ్రేడర్ ద్వారా లెక్కించబడిన మీ ఆరు ప్రాంతాలలో X మరియు Y లు అతి చిన్నవి మరియు పెద్దవిగా ఉండనివ్వండి. 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[] రిటర్న్స్: డబుల్[] పద్ధతి సంతకం: డబుల్[] కట్(int[] x, int[] y)
(మీ పద్ధతి పబ్లిక్ అని నిర్ధారించుకోండి)

గమనికలు
— x అక్షం వెంట సానుకూల దిశ 0 (రేడియన్లు), y అక్షం వెంట సానుకూల దిశ pi/2 (రేడియన్లు).
— ఏదైనా పూర్ణాంకం k కోసం pi*k+d దిశలో కట్ చేసిన విధంగానే 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-30 నిమిషాలు

  • 30-60 నిమిషాలు

  • 1-2 గంటలు

  • 2 గంటల కంటే ఎక్కువ

  • ఇతర

42 మంది వినియోగదారులు ఓటు వేశారు. 47 మంది వినియోగదారులు దూరంగా ఉన్నారు.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి