2022幎3æãããã«ãç·ã³ãŒãããããã£ãŠã¿ããããšå§ããŠãæ°æ§ã§ç¶ããŠæ°Žè²ã³ãŒãã«ãªããŸããããããŸã§ã«èããããšãæžããšããŸããæžããªããšå¿ãããããã
åæïŒç§ã®ããšïŒ
ïŒAtCoderã®ããŠããŠãèªãã ããªããããã¯ã¹ãããã§ããŸãïŒ
æžãæã®èæ¯ãšãã£ãŠãç®ç
ç§ã¯ã¢ã©ãã©ãŒãEngineering Managerãšãã£ã管çè·ã®ããŒã«ãå€ãã§ãã
æ®æ®µä»äºã§ããã°ã©ã ãããŸãæžããªããã§ãããéã«ããã°ã©ãã³ã°ã®ç解床ãåºäžãããæçŸ©ããããªãããšèããŸãããããŒã¿ãµã€ãšã³ãã£ã¹ããšèšç®éã®äŒè©±ãããããšããããŸãã
ã³ã³ãã¥ãŒã¿ç§åŠç³»ã®åŠéšã»å€§åŠé¢ã«ããŸãããã§ããã§èªåããçŽ äººããšèšãã®ã¯ç¡çããããŸãããšããã€ã€ãäŸãã°ICPCã®åŒ·ã人ãåæã«ããã®ã«åšåŠæããæè¿ã«è³ããŸã§èªåèªèº«ã§ã¯ç«¶ããã¯ã»ãšãã©ãã£ãŠãŸããã§ããããªãã§ãããŒã
ãããšãã³ãŒãã£ã³ã°è©Šéšã§ããããããUnion-FindããèŠããåé¡ãåºãŸããŠãè§£æ³ã«æ°ã¥ããŠãåœæã¯ã¢ã«ãŽãªãºã ããã®å Žã§æžãäžãæºåããªãã£ããã®ã§ãæ£çåºæ¥ãŸããã§ãããä»ã§ãUnion-Findã¯è¥å¹²ãã©ãŠãã§ããã¡ãªã¿ã«ãã®åé¡ãåºããæ¹ãç§ãèŠãŠã®ã£ã°ã§åºããŠããæããè¥å¹²åŠãããæ®éã«ã³ãŒãã£ã³ã°é¢æ¥ã¯éããŸãããã ã£ããèããŠãããªãã
ãšããããã§ãã®é åã«ã¯ãã€ãåŒãç®ããèŠææèãããå è¡ããæãã ã£ãã®ã§ããã®ã§ãããæè¿ã¯ããã°ã©ãã³ã°ã³ã³ãã¹ãã以åããåãçµã¿ããããªããŸããããå®åã§ãã³ãŒãã£ã³ã°ãèŠæ±ããéžèãåœå ã§äžè¬çã«ãªã£ãŠãŸããã§ããã£ãããªã®ã§å°ããã£ãŠãããããšæãç«ã£ã次第ã§ãã
ããšããšRustãå匷ããã€ããã§ã¯ããããã§ãããæ°ã¥ãããåé¡ã¯å šéšPythonã§è§£ããŠãŸããRustã¯å¥éããã°ããŸãâŠâŠ
ç«¶ããåšãã®æžãæã®å€é·
ä»åæèããã®ã¯AtCoderã®äžã§ãABCã®ã¿ã§ãããå¹ åºãçµéšãç©ããã¿ãããªæå³ã§ã¯ä»ã®ãµã€ãã調ã¹ãæ¹ããã¿ãŒã ãšã¯æãã€ã€ãããªãç¡èŠæ°å³ã§ã
æåã®é ã¯ABCã§ãCåé¡ã§èºããŠãŸãããèšãæãããšãéå§æç¹ã§ãAãBåé¡ã¯ãããŠãé£ãªãéããã¬ãã«ããã¹ã¿ãŒãããŠãŸãïŒå¹Ÿäœã®å ¬åŒãèŠããŠãªãããšãå€ããåããããšåŒ±ãã§ãïŒãäžã®ã°ã©ãã®å€é·ã§ãããããŸãããæ°æ§ãæžããŸããããããšããšã®ç®æšã¯ãåãããã ãããšã£ãšãšç·åããã ã£ãã®ã§ãã
ã¹ãã«ã¢ããã®ããã«
ïŒãããããæ¬é¡ã§ãïŒ
äžã®äžã«ãã§ã«å€ãã®åŠç¿ã³ã³ãã³ãããããŸãã®ã§ããããŸãåºæ¬çãªããšã¯æžããªããŠããããªãŒâŠâŠãšããããšã§ãéåžžã«åã£ãæèŠã ããæžããŸãã
æè¿ã®ABCã§é«åºŠãªã¢ã«ãŽãªãºã ã®éèŠæ§ã¯é«ããªã
ãé«åºŠãªãã®å®çŸ©ãããã€ã¯ã¹ãã©ãããã¯åºãŸãã
äŸãã°ã»ã°æšããããã¯ããã«é«åºŠã«é å»¶ã»ã°æšã¿ããã®ãABCã®Eåé¡ãããã ãšãã£ãã«ïŒå šãïŒïŒãç®ã«ããããªãå°è±¡ã§ãã2-SATããC++ã®ACLã«å ¥ã£ãŠããäžæ¹ã§ãæ£çŽæ¬çªã§äžåºŠãèŠãŠãªãã§ãã宿пéãããã ãå幎匷ã ããããšããã®ããããšæããŸããåŸåïŒFã»Gã»ExïŒã®äºæ ãããããŸããã
é«åºŠãªã¢ã«ãŽãªãºã ã¯ãã®å Žã§èããé¡ã®ãã®ã§ã¯ãªããç¥ã£ãŠãããç¥ããªãããã§åè² ãã€ãããšããåŽé¢ã¯ãããŸããã¬ã¢æããã¢ã«ãŽãªãºã ã§äºåããã®ãABCçã«ã¯è¯ããšããªãã®ãããããŸãããç§ãå€§åŠæä»£ã«æãã£ããããªãå®çªå¯ãã®åºæ¬çãªã¢ã«ãŽãªãºã ããã¡ããšæžããæ¹ãå¹ããŸãïŒç§ãåŠãã ã®ã¯ããå¹²æ¯1åšä»¥äžæã ãã©âŠâŠïŒ
ãå®çªå¯ããã人ã«ãã£ãŠæããéãã®ã§ãããšãã°ç§ãæãã€ãç¯å²ã ãš
- DPïŒåçèšç»æ³ïŒ
- äºåæ¢çŽ¢ãåªå 床ãã¥ãŒã¿ããã«æšæºã©ã€ãã©ãªã«å ¥ã£ãŠãããªãã€
- 环ç©å
- äžææã¯æ°åã®åã®å ¬åŒãªã©ã髿 ¡æ°åŠã®åçš®å ¬åŒç³»çµ±
- ãã€ã¯ã¹ãã©ãããããã¯ãŒã·ã£ã«ããã€ã
- ããŸã«Union-Find
- ãªã©
ãŠãŒã¶è§£èª¬çã§ç¡çããé«åºŠãªãã€ïŒäŸãã°ãwavelet matrixã§ãè§£ãããïŒããšãã£ããã®ã¯ãããŸãããç®æšãèãããšç¡èŠããŠè¯ãã§ã
éã«èšããšãç§ã¯ãé«åºŠããšèšããã¢ã«ãŽãªãºã ãä»ã§ããŸãšãã«æ±ããŸãããããã§ãæ°Žè²ã³ãŒãããªããã§ããã ãããæå³ã§ã¯å®å¿ããŸããããâŠâŠïŒããªããã
ãè§£ããããã確å®ã«æ©ãè§£ãããã«ããã®ãå¹ã
倧éã®ïŒé«åºŠãªïŒã¢ã«ãŽãªãºã ãèŠããŠããå¿ èŠãŸã§ã¯ãªãããšãããšãäœã§å·®ãã€ãã®ãã確å®ãã»ã¹ããŒãã§ãã
AtCoder Replay (β) èŠããšãéå»ã®ã³ã³ãã¹ãã®é äœã®å€é·ãåŸãã远ããããããŸããé äœã®å€é·ããã¯ãè¿ãé äœã®äººãšæ¯ã¹ãŠãèªåãã©ãããåŸåã§é äœãäžãäžãããŠãããããèŠãããšãåºæ¥ãŸãã
å³ã§é äœãæ©ãäžãã£ãŠãããšããå Žåããã®é äœåž¯ã®ä»ã®äººãããèªåãæããã«åŒ±ãããšèããŠè¯ããšæããŸãïŒ400äœãããã§ã匱ãããšãèšããã¬ãŒããããªããããã©ã匱ãã®ã¯äºå®ïŒïŒ
äžå³ã®ç§ã®ã±ãŒã¹ãäŸã«ãšããŸããäžèšã®å³ã«ãããŠãç§ã®é äœã«ãã£ãšãé²éªšã«ãã€ãã¹ã«å¹ããŠããã®ã¯ãå€åã§ãããDåé¡ãè§£ããŠãã30:00ãããã§äžæ°ã«400äººã«æãããŠããããšãã£ãããšã§ãã
èšãæ¹ãå€ãããšãïŒAããé çªã«è§£ã人ã倿°æŽŸã§ãããšããŠïŒãDåé¡ã¯20åã§è§£ããã®ãæãŸããã£ãããšããå€å®ã«ãªãã¯ãã§ããâŠâŠã¡ãªã¿ã«ãã®åãç§ã®ABCçµéšã§ã¯é廿é«ã®åºæ¥ã ã£ãã®ã§ããæºç¹ïŒããšæãã°ããã¯ããã§æºè¶³ãªãã§ããããããŸã§äžãç®æãå Žåã¯ã匱ããšããããå·éã«åæããã®ãè¯ããã§ãïŒ
ããããããšãèããªããã³ã³ãã¹ãäžã«è§£ããéçšãæãè¿ããšããã®Dåé¡ããªãã»ã©ãè§£æ³ããç§ãæãã€ãããã§ãããå ¥åããæ®µéã§å人ã®äœæã®äžã§ããã ãã¶æéåã£ããå°è±¡ããã£ãã®ã§ããâŠâŠãå ·äœçã«ã¯ãã¢ã«ãŽãªãºã çã«ã¯ç¢ºä¿¡ã¯ããã€ã€ãäžãããããã¹ãå ¥åã«å¯ŸããŠã¯åºåãäžèŽããã现ããªä¿®æ£ãäœåºŠãããåŸã§æå ã®ãã¹ãå ¥åã§OKããã®ããšæåºããŠå³ACããæèŠããããŸãïŒããã§WA絡ããšãŸãæ²åããããŸããããã®ãšãã¯ããããããšã¯ãªãã£ãã®ã§ãããå¥è·¡ïŒïŒ
çµå±ãäžå³ãå ã«ããæ¯ãè¿ãã®çµè«ãšããŠã¯ãé ã«æããŠãããã®ãã³ãŒãã«èœãšãèœåãåãé äœåž¯ã®äººããäœãã£ãããšãªãã¯ãããã®æ¯ãè¿ãçµæã¯ç·Žç¿ã«ã掻ããã¹ãã§ãã
ä»åã®æçžŸã§ããã§ã«ç°æ§ã«æçžŸãè¯ãã®ã§ããŠïŒæ°Žè²ããã©ãïŒïŒïŒäœä»£ããã以åã®æé«ã¯ïŒïŒïŒäœãããã§ãïŒãïŒæ°Žè²äžäœã§ããïŒç§ã®äžã§ã¯å§åçã«é廿é«ã®ã§ããªãã§ãããããïŒïŒåæ©ãã£ããé»ããã©ã§ãïŒFåé¡ãå£ã§äžäœè ãè§£ããŠãŸããã§ããïŒãããã¯ããããã
ç§ã®åæ²ã®ã³ã³ãã¹ãã®çµæã«ã€ããŠã¯ãããªã£ãããšããã ãã§ãããããããåæã¯ç·åããããŸã§ã§ããã°äžäººãã€æ¯åå¿ ãèŠãã ããæ°ãããŸãã
ããšããããŸã§ãABCã®æ°Žè²ããããã ãšãããã°ã£ãŠè»æ¬ãèªãããã¯ã环ç©åã10ç§ã§æžããããã«ããããããããã¿ã€ãã®DPåé¡ã§ã®åçãäžããããæéããããã°è§£ãããšæããåé¡ããããš10åãæ©ã確å®ã«ïŒããã«ãã£åããã«ïŒè§£ããããã«ããšãã»ãããå¹ããå°è±¡ããããŸãã
åããããã®ã¹ãã«æã®äººãšæ¯ã¹ãŠæéåã£ãŠããŸãç¬éã¯èª°ã«ã§ããããšæããŸããããã®ã¯ä»æ¹ãªããšããŠãé »åºŠé¢ã§ããããã±ãŒã¹ãå°ãªãã»ãããåœç¶ã¬ãŒãã¯äŒžã³ãããã§ããåé¡ãè§£ããã³ã«ããã¡ããšãäœãæéåãããèŠå ããã¯çްããã«çè§£ããšããšãç·ãæ°Žè²ã§ã¯éåžžã«å¹æçãšæããŸãã
â» é£ããããšãæžããŠããå°è±¡ãããããããšããæ¹ã«äžå¿èª¬æããšããšãç§ãdif200ãããã§èŠåŽããæ¹ã«ã¢ããã€ã¹ããç«å Žã§ããããŸããèºãèŠå ã¯å šç¶éããŸãããåŸæäžåŸæã¯ãã®ãããã§ãããåºãŠããŠããååž°ãå³ãããã ããifã«ä¹ããæ¡ä»¶æãããŸãæŽé ãããŠãªãããªã©ãèŠãã ããæ¹åç¹ã¯ãã¯ããããããããŸããä»åã®ãæéåã£ãããšãéããŸããã©ãäžãç®æããªãèŠå åæã¯ãã®æ®µéã§ãå¯èœã£ã¡ããå¯èœã ãšããå°è±¡ãããŸãããã ã課é¡ãèªåã§èŠãã ããªãå¯èœæ§ã¯ç¢ºãã«ãããŸãããä»ã®æ¹ã«å©ããæ±ããŸããã
çæãšé·æã§ç®æšãïŒãããïŒã»ããããšã
以äžã®ãããªåé¡ãžåãçµãã¢ãããŒãã¯å€åæå¹ãšæããŸãã
- çæç®ç·ã§ã¯ããç°¡åããšæããåé¡ãããæ©ã確å®ã«è§£ããããã«ãã
- é·æç®ç·ã§ã¯ãæ°ããã¢ã«ãŽãªãºã ãè§£æ³ããã£ããç¿åŸãã
瀟äŒäººã§ç±å¿ã«åãçµãå Žåã宿 ãšããŠããããªãã®ããªãšæããŸããå¹³æ¥ã¯ç°ãè¶ãäŒæ¥ã«ç·ãæ°Žè²ãã¿ãããªãªãºã ã§ããã
AtCoder Problemsã¯åºæ¬çã«ã¯æ¯æ¥èŠãŠãŸããïŒãåžæœããŸãããïŒïŒ
äžå³ã¯ææ¥ããšã«è§£ããæé«é£æåºŠã®ããŒããããã§ããäžææã ãã¶ããã°ã£ãŠå¹³æ¥æ°Žè²ãã£ãŠããããã«èŠããŸãããå®ã¯ããªãéè©ç§°ã®æ°Žè²ïŒæã®æ°Žè²ã¯ããªãããããã®ãå€ãã®ã§ãïŒã§ãã£ãŠãæå³ã®ãããæ°Žè²ã®ç·Žç¿ãã«ã¯ãªã£ãŠãªãã®ã§ããïŒè²ãç®çåããã®ã¯è¯ããªãã§ãâŠâŠ
ãããäžã§ä»ã®çµéšè ãããã粟éžåé¡ããæç€ºããŠãããŸããç§ãåãã§äœ¿ããŸãããããããã¹ãã«ã«ã€ããŠã¯ã粟éžåé¡ãè§£ãã ãã§ã¯åå䌞ã³ãªãæ°ãããŸããæ¹åæ§ãšããŠã¯ãé·æãã«ãããæ°ã¶æåäœã§ã®ä»èŸŒã¿ãšèããã»ãããïŒç¹ã«æéé åãé£ãã瀟äŒäººç®ç·ã ãšïŒæ£ããå°è±¡ããããŸãã
äžã®ãé·æç®ç·ãã§ç¿åŸããã¢ã«ãŽãªãºã ã¯ãå€åïŒãïŒåã¯å®æŠã§ã¯åœ¹ã«ç«ããªãããäžæãããšããã³ããŒæã£ãŠãããéã«èŠãããç¶æ ã§ã誀ã£ãé©çšãããŠã¬ãŒãã«ãã€ãã¹ã«åãå¯èœæ§ããããŸãããæè£œã®ã©ã€ãã©ãªããã°ã£ãŠãããããããšããããŸãããããŒã
ã¡ãªã¿ã«ãçæããé·æãã§ç®æšãå³å¯ã«ããå¿ èŠã¯ãããŸãæããŸãããç¹ã«çæéã ãšç®æšãå³å¯ã«ãããšè² æ ã«ãªããŸãããããGrundyæ°ãã£ãšãããŒããããã®æ°è»œãã§é·æãè¯ããšæããŸããç§ã®å Žåãé å»¶ã»ã°æšã¯å幎ããã§æŸçœ®ãããŠããŸããã ã£ãŠåºãªãããã
é£æåºŠé åãåŸåã¯å·éã«å€æãã
ãããããè§£ããïŒãã¿ãããªæéã ãšå¹çã¯æªããŠãã©ã®ããããèªåãããæãã«ããããããããã§ç·Žç¿ææãå€ãã£ãŠããŸããç·Žç¿ã®ä»æ¹ãã®ãã®ã«ã€ããŠãäŸãã°ããããæ¬ãèªãã©ããšè¯ãããã§ãã
äžå³ã¯èªåãåãçµãã åé¡ã®è²ã®ååžã§ãã
å顿°æ°Žå¢ãããããŠïŒAtCoderã§1000åè§£ããŸããïŒâŠâŠãšèšããããªãç ïŒãç°ç³»ã®åé¡ããããããªãâŠâŠã®ã§ãããããŸãæå³ããªãå°è±¡ã宿Šã§å¿ ã2åãããããããšãèãããšãç·Žç¿ã§ABCã®ç°ãè§£ãçç±ã¯ïŒç§ã®å Žåã¯ïŒãããŸãããç·åã«èºã確çãé«ãã£ãææã«ç·ã®åé¡ãæèçã«å¢ãããŸãããåºæºãšããŠã¯ãç· 100åãã¿ãããªæãã AtCoder Problems ã ãš Recommendation ã®ããããã«åŸãã®ã§ãè¯ããšæããŸãã
è²ã¯æè©®åèçšåºŠããšããã®ã倧äºãäŸãã°æã®ABCã®ç·ãæ°Žè²ãããŸã ãšè¶ãããã«ãªã£ã¡ãã£ãŠãã®ããããã§ãããããŸããARCãAGCã®åé¡ãæ··ããå Žåãdifãå šç¶éãæ¹ååããŠãŸãããå žå90åãJOIç³»ã®åé¡ã«è³ã£ãŠã¯å šéšOtherãAOJã¯æ°ã«ããå ãããŸãããéã³ãªãã ãããããã¯è²éã³ã«ãšããããçå£ã«ãªããŸãããã
ä»ã®äººã®åçãèŠãŠååŒãããå Žåã«ãã£ãŠã¯åãã¹ã¿ã€ã«ã§æžããŠã¿ã
ããŸããããã§ãããããã声ãèããªãã®ã§ãããééããªãå¹ããŸãã
ç¹ã«Pythonæžãã§ããªããé ããåå ãããã£ãŠãªã段éã ãšãå šç¶éããã¥ãŒãèŠããããšãå€ãããšãC++ã ãšããããªããã§ãããPythonã ãšäžèŠäºæ«ãªæžãæ¹ã®éãã§é床ãå šãéã£ããããŸããå Žåã«ãã£ãŠã¯TLEãšACãåããããšããããŸããåºé¡è åŽãPythonãã¬ã³ããªãŒã«ããŠãããŠããå°è±¡ã§ã¯ãã£ãŠãæè¿ã®åé¡ã§ã¯ã ãã¶å°ãªãå°è±¡ã§ã¯ãããŸããã©ãã
ããäººã®æåºã§ã¯ãã³ã¡ã³ããäžå¯§ã«æžããŠããã ãã®å·®åãããããŸãããããã人ã®å®è£
ã§ã¯ sys.stdin.buffer ã䜿ã£ãŠããŠããªãã§ïŒããšæã£ããããŸã ïŒinput = sys.stdin.readlineããçç±ã¯ãªãã§ã§ããããã¿ãããªïŒã
ãªã¹ãå å 衚èšã§ã¿ãã«ã®ãªã¹ãããã£ã¡ããšã¬ã¬ã³ãã«æžããããªã¹ãïŒåã®æ¹ãå§åçã«éãïŒTLEãšACã®å¢çããŸããïŒãšããããããã®ãä»ã®äººã®ã³ãŒããèŠãŠããæ°ã¥ããŸããã宿Šã®çµæã§ç¥ããã¯ãã®ãŸãŸã¬ãŒãã«è·³ãè¿ãå¯äœçšããããŸãã®ã§ãPythnoé ãã系統ã®ãããæå³ã§ã¯ã©ãŒã§ãè¯ã話ã§äºæ ããªããæ¬çªä»¥å€ã®ã»ãã絶察ã«è¯ãã§ãã
å人çãªæèŠã ãšãC++æžãã®ãã€ãã£ãç«¶ããerãæžããé»è²ãæ©åé¡ã®è§£èª¬ãæçŽã«Pythonã«æžãäžããšå²ãšããTLEããŸãïŒãã ããµã³ãã«æ°äžæ¡ïœïŒãããããã®ããåãããããã解説ã ãšç«¯æã£ãŠããããšãå€ãå°è±¡ãããã®ã§ãããèºãããšãã«åå ãçè§£ããŠå¯Ÿçãæœãã®ã倧å€ãªã®ã§ãèŠã€ã次第ãã£ãšãã®ãããããããããããŸãã
çéã®å¹Žéœ¢å±€ãšãéå¶ãå€å°æ³åãã
ãã1ã2ã¶æã§ïŒæžããæç¹ã§ã®2022幎9æã10æé ãšãã以åã®æ¯èŒïŒåŸåãå€ãã£ãã®ã§ä»åŸæžããããããŸããããäžææã¯æ¬åœã«ã髿 ¡æ°åŠãããããšããã®ã°ããã§èŸæããèšæ¶ããããŸããæå ã«ãã£ãŒãåŒãããŠå ¬åŒãåŒã£åŒµãåºããã¿ãããªãâŠâŠ
å®éãåºé¡è ãæŽ»çºã«æŽ»åãããŠããæ¹ïŒã€ãŸãã¬ãŒããé«ãããŸãåºé¡è ãµã€ãã«ããæ¹ïŒã®åæ°ä»¥äžã髿 ¡çã倧åŠçãšããå°è±¡ã§ããããã¯ããã§ãå²ãšåœç¶ãæã¯ããäžæ¹ã§ãæ°åAããšãããæäœãããæ°åŒãã ããåºãŠããŠãåã®å ¬åŒã»åŒå€åœ¢ã§åé¡è§£ããŸããã¿ããã®ãèŠããšå°ãã¢ãããŒã·ã§ã³çã«ã€ãã€ãæã¯åŠããŸããâŠâŠããŒãšããã°ã©ãã³ã°ïŒ
ããã¯ããŠãããããããã®ã¯é¿ããããªãåŽé¢ããããŸããã§ãåºé¡è ã®å¿çããè§£èªããŠãã¡ã¿æ°å³ã®å¯ŸçãåãããšãèŠããŠãããŠãè¯ãã§ããããã圌ãã¯äœè ãããçè§£ããã®ã¯ããã®æã®åé¡è§£æ±ºã«ã¯å²ãšããå¹ããŸããåºé¡è äœæ³ã ã£ãâŠâŠãŸã§ã¯ç§ã¯ãã£ãŠãŸãããã©ã
髿 ¡æ°åŠãå€ãããã§ããã°ã髿 ¡æ°åŠã®ããŒãã·ãŒããæå ã«ãããŠããã¹ãã§ãããå ãããŠé«æ ¡æ°åŠã®åé¡ãè§£ããšãããšããã®ãæã§ããå®éãæåŸ å€DPãããã«æãåºããšã髿 ¡æ°åŠã®çµ±èšã»ç¢ºçç¥ããã«ã¯å ã«é²ããªãã§ãããããé«åºŠãªã¢ã«ãŽãªãºã ã以åã®ãããããšãããå°éã«çªãé²ããã®ã¯åœç¶ããšæããŸãã
éã«ããã®èšäºãæžããŠããæç¹ïŒ2022-10ïŒã§ã¯ãABCã®CãDåã®åé¡ãè¥å¹²JOIã®äºéžã»æ¬æŠåé¡ã«è¿ããªãã¯ãããå°è±¡ãæããªãããšããªãã§ãïŒãšã¯ããJOIããããŸã§ç§ãç¥ã£ãŠããããã§ã¯ãªãããããæ®ã©ç¥ããªãïŒïŒ
髿 ¡æ°åŠã®äºçš®ã°ããã ãšãã¹ãã³ãµãŒç®ç·ã ãšåŸ®åŠãªã¯ããªãã§ããããç§ãæ¡çšæ åœã ã£ãããç«¶ããã®åé¡ã¯ããŠããã¯ã©ãŠãåæã®ã¢ãŒããã¯ãã£è³ªåããŸãâŠâŠããªããããæ°åã®ABCã®åé¡ã¯ãã®ç¹ã ãšãšãŠãçŽåŸæããããŸãã
ãããããä»äºã®äžç¥èŸã話ã¯ããŠãããåºé¡è åŽã¯ãããããããªãã§ãããããããç¶ç¶ããã€ãã³ãé¡ã®åº§çµãæŽããã«ã¯è²ã 詊è¡é¯èª€ãã€ããã®ã§ããè§£ãåŽããããããåé¡ãã§æè忢ããŠæçŽã«åé¡ãè§£ãã®ã§ã¯ãªããŠãå€å°ã§è¯ãã®ã§èå°è£ãæ³åããæ¹ããçµæãšããŠã¯å»ºèšçãªæéãéãããããªãšæããŸãã
远èš
éå¶ãå ¬åŒã«çºä¿¡ããŠãããã®ãšããŠã¯ãããšãã°ç€Ÿé·ã®ã¢ã«ãŠã³ããšãã¯èªæã«ãããªãã§ãããããæè¿ã¯ããšã¿ãšã®çµ¡ã¿ã§AHCå¯ãã«èå³ãå¯ã£ãŠããæ°ãããŠããŠABCæ ã®ãã®èšäºã§åèã«ãªãæ å ±ã¯ãããŸããªãã§ãïŒåŒ·ããŠãããšãAHCãããé åãããšããã¡ã¿ãªèãæ¹ã¯ãããŸãïŒ
æ¯èŒçABCã»ARCãããã§æ å ±æºã«ãªãã®ã¯ããã¿ã§ããkyopro_friendsããããªãŒãšãå ¬åŒè§£èª¬ãããã£ã¡ã ãæžããŠãŸãããéå¶å ã§ã®åé¡èšå®ã®è©±ãè¯ããããŠãŸãã
ãããæžããŠããæç¹ïŒ2022-11ïŒã ãšãç¹ã«AãDãããã§åé¡åŸåã»é£æåºŠãããã£ãŠããæ§åã¯ãããŸããäžæ¹ã§Dåé¡ãããã§åºãŠããã¢ã«ãŽãªãºã ã®çš®é¡ãå¢ããŠããããã§ã¯ãªãã§ãããŸãçºä¿¡å 容ãããããšãDPã®éèŠæ§ã°ããçãäžãããªïŒãã¿ãããªæ°æã¡ãæãåã£ãŠãŸãã
ãã®æ¶æž¬ãæ£ãããã©ãããä»åŸã®ABCã®åºé¡ãã倿ãããããªãã§ãããäžæŠã¯DPãéç¹çã«ãããšç·ã»æ°Žè²ã³ãŒãã«ã¯ã ãã¶è¿ã¥ãã®ããªãšã
ç·ã»æ°Žè²èгç¹ã ãšãDPã«ã€ããŠäžèš2ã€ã§ååãããã»ã©ã®ç·Žç¿ã«ã¯ãªãã®ã§ããŸãã¯ãã£ãŠã¿ãŠã¯ãããã§ãããããç§ã¯ååãå®äºã§ããŠãªãã§ããåèãŸã§ãæè¿ã®ãåºéDPãã¯é»difåŸåã®åé¡ã§ããã
ããã£ãå¹ãã€ã¡ãŒãžã¯ãªãã£ãããå匷ã®ãªãºã ãå°å»ã¿ã«ããã®ã¯æå¹ãªæ°ããã
å€åãç§ã«ã¯ããã£ã¯æ©ããããã ãšæããŸããããã£ããã¯1å1å粟æ»ããæ¹ãå¹ãã€ã¡ãŒãžã°ãããå è¡ããŸããäžã®ãããªã宿Šã§ã®é äœã®é·ç§»ãã¿ãããªåæãããç·Žç¿èª²é¡ãç¹å®ã§ããã€ã¡ãŒãžãããŸãæãŠãŸãããâŠâŠ
ããã£ã¯ããããªããã§ãããã»ãŒæ¯æ¥ããçšåºŠæçŸ©ã®ããåé¡ïŒAåé¡ã§é£ç¶æåºã®ã³ã³ãã€ãªããšããããªããŠïŒïŒãè§£ãã®ã¯è¯ãã£ãæ°ãããŸããããã¯æ¬åœã«æ°åã®åé¡ã
è¿œèšæç«
人æ°ãåºããšé©åœã«è¿œå ãããŠãããŸããç§ã人ãªã®ã§
ACã®ã枩床æããææ¡ãã
ãè²ãã§é£æåºŠãåºåããŠè§£ããã®ãããã§ããããACã®æç¡ãã¯ãèªåããã®åé¡ãšè§£æ³ãååçè§£ããŠè§£ãããããšãã°ãã°é£åããŠããŸããã
ç§ã®å ·äœäŸããäŸãã°ä»¥äžã®åé¡ãèããŠã¿ãŸãïŒã€ãæè¿ç§ãåºäŒã£ãäŸïŒ
é»difã§ãã®ã§ãããããç§ã®ã¬ãã«ã§ããããããã£ãšè§£ãããã®ã§ã¯ãªãããã§ããã³ã³ãã¹ãæ¬çªã§ã¯ãããŸã§å šç¶å°éããŠããŸããïŒ4å®ã§çµãã£ãŠãŸãïŒãèšãæãããšãããã«ã¯æé·ã®çš®ããããïŒïŒãããããªãïŒïŒ
ã³ã³ãã¹ãåŸã解説ãèªãã§å®è£ ããŠACã¯åºæ¥ãŸãããå®è£ ã¯ãããŸã§é£ãããªãã®ã§ããã®æ®µéã§ãAtCoder Problems ã§ãé»difã®åé¡ãè§£ããããšããäºå®ã¯æ®ããŸãã
ïŒä»¥éãå ·äœçãªè§£æ³ã¯ãããŠãŒãããŸãïŒ
ãã ããACããã£ãããšã¯ããããã®æ®µéã§ã¯è§£èª¬ã«åºãŠãããå£ã¢ãžã¥ã©é¢æ°ãã«ã€ããŠã¯çè§£ããŠããŸããããã®åé¡ã®è§£èª¬ã§ã¯2éãè坿¹æ³ãæžãããŠããã®ã§ãããäžæ¹ãå£ã¢ãžã¥ã©é¢æ°ã®èå¯ãå«ããã®ãããäžã€ã¯å¥ã®çµè·¯ããã©ããã®ã§ããæçµçã«å®è£ ã¯ããªãã«ãªããç§ã¯åŸè ã®çè§£ã§å®è£ ããŠACåºããŸãããããŠãäž¡æ¹ããã£ãŠãã人ã®ACãšã®å®åå·®ã¯ã©ã®ãããã§ããããã
ãã®åé¡ã¯ãçè§£ãã§ããè§£æ³ããããã ããŸã ãã·ã§ããç§ã®å Žåã§ãããèµ€dif以äžã ãšããã¿ãããããã(ÂŽã»Ïã»ïœ)ããšãã解説ãã»ãšãã©ã«ãªããŸãããã¿ãããããªãã®ã§ã¯ãæ¬çªã©ãããç·Žç¿ã§äœæéèããŠãèªåã§è§£ãããšã¯åºæ¥ãªãã§ãããã
ãã®åé¡ã«ã€ããŠã¯ãçè§£ãã§ããªãè§£æ³ãããããšããããšã¯ããã®è§£æ³ã§ãªããšè§£ããªãåé¡ãåºãããè§£ããªãããšããåçŽãªäºå®ãæå³ããŸããAtCoder Problemsçã§å®æçã«åé¡ãè§£ããšããŠãACã§ããã仿¥ã®ãå€ãã¯çµããïŒãã§ã¯ãè¯ãç¿æ £ã«ã¯ãªããªãã§ãã
å¥ã®ïŒããå°ãç°¡åãªïŒäŸ
ãã¡ãã¯ç·difã§ãããæ°Žè²ç®æãããçãªã¬ãã«ã ãšè§£æ³ã¯æãã€ããšæããŸãã
ã§ããã®ãšãã®ç§ã®æåã®è§£æ³ã¯ä»¥äž
æèçã«ãã€ã¯ã¹ãã©æ³ãäžåã ã䜿ã£ãŠè§£ããŠããŸãïŒãããŠå·¥å€«ããŠãŸãïŒãããã¯å ¬åŒè§£èª¬çãšã¯ç°ãªããŸãã
è坿ãACãåãã®ã¯æäžãšããŠãçåãšããŠã¯ä»¥äžã®ãããªããšãæãæµ®ãã³ãŸãã
- ãã®åé¡ã§ãã€ã¯ã¹ãã©ãšã¯ãŒã·ã£ã«ããã€ãã§æ¬è³ªçã«å·®ãåºãã ããã
- ãã®åé¡ã§å·®ãåºãåºãªãã«é¢ä¿ãªããä»ã®åé¡ã§ãã€ã¯ã¹ãã©æ³ãè€æ°ååãã®ã§ã¯ãã¡ãªã±ãŒã¹ã¯ããã®ã ããããããã¯ã©ããããšãã
åœç¶ãããããçåãã®ã¯ãã§ããŠã調ã¹ãŠã¿ãã°ããã«è§£èª¬ãæžãããŠããæ¹ãããŸãïŒè§£èª¬äžã§äžã®åé¡ãèšåãããŠãŸããïŒ
å šãŠã®åé¡ã«ã€ããŠãæåã«ACåãæ®µéã§ãããšããããåæãããå¿ èŠãŸã§ã¯ãªããšã¯æããŸããç²ãã¡ãããããã
ãã ãç·Žç¿æã«ãåã«ACåã£ãŠãã®åé¡ãå¿ããŠããŸããã®ãšãACãšTLEã»WAã®å¢çãæ¢ã£ãŠã¿ããã®ãšã§ã¯ãç·Žç¿ã®ïŒè§£ããå顿°ã«å¯ŸããïŒå質ã¯èããéãããšã¯èšããããšæããŸããäœåããããšãã«ã¯ãç¹ã«ç·Žç¿æã«ã¯ãããŠæãã€ãéãã®è¿åãããŠããããšããã®ãè¯ãããããªãããªãšæããŸãã
ãããããåé¡ãè§£ãã®ãšã©ã¡ããè¯ãããã¯é£ãã話ã§ãããããã®äººã®ç¶æ³æ¬¡ç¬¬ãšæããŸããäžã€èšããã®ã¯ããããããè§£ãããã«ãªããšãæ¡å€ãµã©ããšè§£ããåé¡ã¯å¿ããŠããããšããããšãç§ã®å¥œã¿ã§ããããã§ãããè§£ãããã ãã§ãªããŠããªãè§£ãããïŒãŸããã©ãããç¶æ³ã ãšå®æŠã§è§£ããªãããšãèµ·ãåŸããïŒããèããŠãããšãèšæ¶ã®å®çãšå¿çšåã«ã¯è¯ãæ¹åã§å·®ãã€ããŠããã®ããªããšæããŸãã
Pythonã ãšãO(N)è§£æ³ã§ãNã10^6ã®æ¡æ°ã§æå®ãããŠãããšå®æ°ãªãŒããŒã§TLEãçºçããŠå°ã£ãŠããŸãããšããããšããã£ããããŸããO(N^2)ã§Nã10^3ã®ã±ãŒã¹ã®ã»ããæè¿ã®AtCoderã ãšå€ãããã§ããç·Žç¿ã®ãšãã«ãããŠããã£ãŠçœ®ããšãPythonã®ã©ãããå®è£ ãçžå¯Ÿçã«é«éãã»äœéããå ·äœçã«çè§£ã§ããããã«ãªãã®ã§ãããŒã¿ã«ã§ã®ç«¶ããåã¯å€å°ã¯äžããããªãšãæããŸãããŸãããã«ã€ããŠã¯C++䜿ãã°ããã£ãŠã®ã¯ãããŸããã©ã
ä»ã®äººã®è§£æ³ãšæ¯ã¹ã
ïŒæžããããšã§æ°ã¥ãããã ãã©äžã«ãåãè¶£æšã®æç« ãã£ããâŠâŠããå ·äœçãªäŸã«åºäŒã£ãã®ã§ãã¡ããæ®ããšããŸãïŒ
ç·Žç¿äžã«ã¯ãä»ã®äººã®è§£æ³ãšèªåã®è§£æ³ã§ã¹ããŒããæ®µéãã®å Žåããã®å®è£ ãèŠãããšããããšãè¯ãããŸããèªåã®æžãæ¹ã®ã¹ã¿ã€ã«ã«å¯ãããšãã«åãã¹ããŒãæã«ãªãã®ãããšãã£ããšãããèŠãããã«ãèªåã®ã¹ã¿ã€ã«ã«å€å°èª¿æŽããŠå®è¡ïŒæåºïŒããŠã¿ãããšããããšãããã£ã¡ã ããããŸãã
è§£ãããšæã£ãŠåè§£æ³ããããã¯åãšã¯èšããªããã©éå¹çå¯ãã®å®è£ ã«ãªã£ãŠãããããŸãç¹ã«Pythonã ãšãã¢ã«ãŽãªãºã 以å€ã®Pythonãpypy3åºæã®äºæ ã§ã¹ããŒããæ®µéãã«ãªãããšããããŸãïŒäžçšæã«ã¿ãã«ã䜿ã£ãããããšå®æ°ã®éšåã§ãã£ã¡ãé ããªã£ãããããã§ããïŒ
ã§ãã®ã§ãã©ããããšãã«é床ãå€ãããããèªåã®æžãæ¹ã§ã¯ã©ãã宿°éšåã§é ããªããããããã«ã€ããŠã®ãã»ã³ã¹ãã磚ããŠãããšã埮åŠãªãšããã§å¹ããŸãâŠâŠå¹ãããã«æããŸãã
ã»ãŒæ°Žè²difã®ä»¥äžã®åé¡ãèããŠã¿ãŸã
è§£æ³ã¯ããã£ããã§ããããšã«ããTLEãåºãåºãâŠâŠãæçµçã«ä»¥äžã§ACã§ãã
å®è¡æé: 2929 ms
å¶éæéïŒç§ã«å¯ŸããŠããã¯âŠâŠçµ¶å¯Ÿã«ãã£ãšè¯ãæžãæ¹ããããã€ã§ãã
ç§ã®äžã§ã¯ãŸãã¯ïŒã€æãã€ããŸããã
- ã©ããã§bisectåã§ããïŒããæ°ã¥ããªãã£ãïŒ
- ã©ããã§éåžžã«å¹æã®é«ãæåãçãªæäœãã§ããïŒããæ°ã¥ããªãã£ãïŒ
- åŠã«é ã宿°ã³ã¹ãã®æäœãããïŒããæ°ã¥ããªãã£ãïŒ
ãšããããã§å ¬åŒè§£èª¬ã®å®è£ ãèŠã€ã€ãå®éã«èªåã®å®è£ ãšã¹ããŒããæ¯ã¹ãŠã¿ãŸã
å®è¡æé: 1466 ms
é床ãåéãâŠâŠã ãšâŠâŠã·ã§ãã¯ã (ÂŽã»Ïã»ïœ)
çµè«ãšããŠã¯ããã¶ãã§ãããç§ã¯ã¯ãŒã·ã£ã«ããã€ãã®å¿ãçè§£ããŠãªãã£ã ãšããããšã®ããã§ããïŒå ·äœçãªèª¬æã¯é£ã°ããŸãïŒã䌌ãŠããããã§ãã¢ã«ãŽãªãºã ã®çްéšãå šç¶éãããã§ãããšããããã§ãïŒã€æãã€ãããã©ããšãéã£ãŠããŠãã¢ã«ãŽãªãºã ãååé©åã§ã¯ãªãã£ããã§ãããâŠâŠãããããæ®éã«ãŸãããã€ã ããããããŒãŒã
ãããŒãŒãâŠâŠã¯ããŠããããããããšãã¯ãã¡ããšå·®ãèªã¿åãããšã¯ãã£ãšããã»ããè¯ãããã«æããŸããæãã€ãç¯å²ã§ç§ãªãã«è§£éãããš
- ç§ã®å®è£ ã¯ã¯ãŒã·ã£ã«ããã€ããã§ã¯ãªãããïŒéã«ãŒãã®å åŽãå§åçã«éå¹çïŒãããèŽåœå·ïŒ
-
sys.stdin.bufferã¯ããŸãåããïŒç§ã䜿ããŸããïŒ - ã64ãããç¯å²ã§ã»ãŒç¡éãšèšããå€ãã®æ±ãããšã¬ã¬ã³ã
-
zip(ABC, ABC, ABC)âŠâŠãªãã»ã©ïŒã¹ããŒããšèšãããã¯ããã®èšç®éã©ãã§ãè¯ãããã€ãã€ããŠãªãæãããããªâŠâŠ
ã¢ã«ãŽãªãºã çã«ã¯ïŒçªç®ãå šãŠã§ãïŒå¿ãçè§£ããŠãªãã£ãïŒããã 仿¹ã§ãäºæ«ãªãšããã§ã®å·®åã¯çè§£ã§ããç¯å²ã§ã¯çè§£ããšãããããªãšæã£ããã¯ããŸããæãæãã¹ããšããã¯æãæããŠã宿°é床ã¢ããããã¯å®æŠã§ã¿ã€ããããããã°ãçºçãã¥ããå®è£ ã®ã»ããè¯ããã§ãããïŒç«¶ããã ããïŒããŸããããŸãçªãè©°ãããšããŸããããPythonããããïŒãã«ãªããŸããã
â» ãªããããããã³ãŒããæåºããŠã¿ããšãïŒèªåã§ãªãä»è
ã®ã³ãŒãã解説ãã³ããŒããŠããå Žåãªã©ïŒãç§ã¯è¯ã main_ref() ãšããååã§å®è£
ãèªåã®ãã®ã§ã¯ãªãããšããããããã«ããŠãŸããèªåå®è£
ãããªãããšãå°æ¥ã®èªåãèŠãŠãåããããã«ã§ãããå¯èœãªéãåèå
ãæ®ããšããŸãã
ããŸã
- æåã®ã¿ã€ãã«ãæ¯ãè¿ããã«ãªã£ãŠããã§ããæããã«ã¹ãã«ã¢ããèšäºã§ãããã£ã¡ã«ã¿ã€ãã«ã倿ŽããŸãã
- ãè¿œèšæç« ãã远å ããŸãã



