ãã®è¨äºã¯ã2024/3/2 ã«ãããã ã®ããã¤ã§éå¬ããã 2024 ICPC Asia Pacific Championship ã®åå è¨ã§ããèªåã¯ãã¼ã GoodBye2023 ã¨ã㦠Yu_212 ã shibh308 ã¨åå ãã¾ããã
Championship ã¨ã¯ ICPC ã® Regional 大ä¼ã®çµæã«ãã£ã¦æå¾ ããã Asia Pacific Regional å ¨ä½ã®å¤§ä¼ã§ãWorld Finals ã®é²åºè ãé¸æããããã«éå¬ããã¾ãããã®å¶åº¦èªä½ã¯ 2020 å¹´ããããã¾ããããæ å¢ã®å½±é¿ã§éå¬ãè¦éããç¶ããçµæä»åãåãã¦ã®éå¬ã¨ãªã£ã¦ãã¾ããèªåãã¡ã¯ãã¾ã¾ã§ã¯ World Finals ãçããã»ã©ã®å®åããããã¼ã ã§ã¯ããã¾ããã§ãããããã®å¶åº¦ã«ãã£ã¦ World Finals ã¸ã®é²åºãååç¾å®çãªãã®ã¨ãªãã¾ããããã®ãããæã ã¯çé¢ç®ã« World Finals é²åºãç®æãã¦ç·´ç¿ãç©ã¿éãã¾ããããã®è¨äºã¯ããã®ç·´ç¿ã¨å®éã® Championship ã®æ§åãè¨ããåå è¨ã¨ãªãã¾ãã
ä»ã®ãã¼ã ã¡ã¤ãã®åå è¨:

äºåæºå
ä½æ¦
3 人ã«å¤§ããªå®åå·®ããããã¼ã ã§ã¯ãªãã£ãã®ã§ãäºåã«å½¹å²åæ ãè¨ãããã¨ã¯ãã¾ããã§ããããã ããã¼ã å ã§ä¸çªç«¶æããã°ã©ãã³ã°ãå¾æãªã®ã¯ Yu_212 ã ã£ããããYu_212 ã®é ãã§ããéãåããããã¨ãæèããç«ã¡åããå¿ããã¾ããããã®ãããã©ã¤ãã©ãªã®åçµã¯ä¸»ã« shibh308 ããshibh308 ããããã¨ããã£ãå ´åã¯èªåãæ å½ãããã¨ã«ãªã£ã¦ãã¾ããã
ã¾ããååã«ã¤ãã¦ã¯äºãç´°ãã決ãã¦ããã¾ãããChampionship ã§ã¯æ¨ªæµã®ããã«åºç¤ã ãé£æ度é ã¨ãã£ããã¨ããªããããªãããåºç¤ã«è¤æ°ååé¡ãèªãã§ãããã¨ã«ãªãããã§ããèªå㨠shibh308 ãæ¯è¼çè±èªãèªãã®ãå¾æã ã£ãããåé¡ãèªããã¨ã«æ³¨åãããã®éã«PC ã®ã»ããã¢ããã Yu_212 ã«è¡ã£ã¦ããããã¨ã¨ãã¾ããã

ã¾ããåé¡æ°ãå¤ãåé¡ã®ææ¡ãã§ããªããã¨ãå¤ãã£ããããåé¡ã®ç°¡åãªæ¦è¦ã¨èª°ãèªãã ããè¨ãã·ã¼ããä½æãã¦éç¨ãããã¨ã«ãã¾ãããä»ã«ã¯ä½æ¦ã¨ãã£ãä½æ¦ã¯äºåã«æ±ºãã¦ãã¾ããã§ãããã競æä¸ã®ç¶æ³å¤æã¯ããç¨åº¦ã·ã¹ããããã¯ã«è¡ããããã«ãã¦ãã¾ãããããã¯ãå ¨å¡ãå ¨åã§åé¡ã«åãçµãç«å ´ã§ã¡ã¿çã«ç¶æ³ã俯ç°ãã¦æ£ããå¤æãä¸ããã¨ãé£ããã¨èããããã§ããç¶æ³å¤æã®ä¾ã¨ãã¦ã¯ããåºç¤ã®ç°¡åãªåé¡ã§èª¤çãåºããã 20 å以ä¸å®è£ ãè©°ã¾ã£ãå ´åã¯åé¡ããå¼ãå¥ããããããµã³ãã«ãå¼±ãåé¡ã®å®è£ ä¸ã«æã空ãã¦ãããå± ãå ´åããã®äººããµã³ãã«ãä½æãããã¨ãã£ããã®ãããã¾ãã
ç·´ç¿
12 æã¯ææ«ã«ãã SECCON ã®æ±ºå大ä¼ã«æ³¨åãããã£ããã¨ããããæéã¯ãã£ããã®ã®ç·´ç¿ã¯ã»ã¨ãã©è¡ãã¾ããã§ããã1 æã¯ãã¼ã ã¡ã¤ãã帰çãã¦ããã®ã§ 7 æ¥ã® OUPC ãåç·´ç¿ã¨ãªãããã®å¾ããæ¬æ ¼çã«ãã¼ã ç·´ãéå§ãã¾ãããæåã®æ¹ã¯ãã¼ã ã¨ãã¦ã®åãã®ãã¹ãç®ç«ã£ããã®ã®æ¬¡ç¬¬ã«æ¸ãã15åã»ã©ç·´ç¿ãããã¡ã«ãã¼ã ã¨ãã¦ã®åãã®ãã¹ã¯ã»ã¼ãªããªã£ãã¨æã£ã¦ãã¾ããå¾ã§æ°ããã¨ãããåè¨ã§ã¯ 22 åç·´ç¿ãè¡ã£ã¦ããããã§ãã大å¦ã®ããªã³ã¿ã¯ä¸ã¶æã§ä¸äºº 200 æããå°å·ã§ããªãã®ã§ãããããã 3 人å 2 ã¶æãã«ã«ä½¿ã£ã¦ããªã足ããªãã»ã©ã®åé¡æã¨ã³ã¼ããå°å·ãããã¨ã«ãªãã¾ããã

ã¾ããæ¬çªã®ç°å¢ã å»å¹´ã® World Finals ã®ç°å¢ã¨å ¨ãåãã§ããã¨ããæ å ±ãé¸æéã®ãã£ããã§åã£ã¦ãããããããã«æ°ãã¤ãã¦ãã㯠Virtual Box ä¸ã«ã¤ã³ã¹ãã¼ã«ãã WF OS ãç¨ãã¦ç·´ç¿ãè¡ãã¾ãããWF OS ã®ã¤ã³ã¹ãã¼ã«ã«ã¯é常ã«æéãããã£ããããä¸éãã®ã»ããã¢ããã¾ã§çµããããå¾ã®ã¤ã¡ã¼ã¸ãä¿åãã¦ããããã®ã¤ã¡ã¼ã¸ãã¯ãã¼ã³ããå½¢ã§æ¯åã®ç·´ç¿ãè¡ãã¾ããããã®ããã«æ¯åç°å¢ããªã»ããããã¦ããã®ã¯ãéå§æã«æºåããæ å½ã®ãã¼ã ã¡ã¤ãã«ã¨ã£ã¦ããç·´ç¿ã¨ãªã£ãã¨æãã¾ãã

ã©ã¤ãã©ãªæ´å
Championship ã§ã¯ãWorld Finals ã¨åãããã«æã¡è¾¼ããã©ã¤ãã©ãªã®ææ°ã«å¶éãããããã§ãããä»ã¾ã§ç¨ãã¦ããã©ã¤ãã©ãªã¯ä¸¡é¢å°å·ã§30ãã¼ã¸å¼±ããã¾ããããæã¡è¾¼ãã©ã¤ãã©ãªã¯çé¢å°å·ã§25ãã¼ã¸ã«æããå¿ è¦ãããã¾ããããã£ã¦ãä»ã¾ã§æã¡è¾¼ãã§ããã©ã¤ãã©ãªããå¤§å¹ ã«åããªããã°ãªãã¾ããã
ç°å¢
PDFã®çæã¯ãä¸è¬ã«é常ã«é¢åããããã¨ãç¥ããã¦ãã¾ã[è¦åºå
¸]ããã®ããããããªããã°ãããªãã¨ã¯æãã¤ã¤é¢åã§ãªããªãæãã¤ãããã¾ããã§ããã1ææ«ãããã«æµç³ã«ããããæ´åããªãã¨éã«åããªãã¨ããé°å²æ°ãåºã¦ãã¦ãããããéãè
°ãä¸ã㦠1/22 ã®ããã£çµäºå¾ã«å¾¹å¤ãã¦å¤§æ ãæ´ãã¾ããã管ç㯠GitHub ã® Private Repository ã§è¡ããPDF ã¾ããã¯åºæ¬çã«ã¯迷路さんの方法ãåèã«ãã¾ããããã ããã®æ¹æ³ã¯TeXã«ä¾åãã¦ããããã«ç°å¢æ§ç¯ãé¢åã«ãªã£ã¦ãã¾ãããã¼ã ã¡ã¤ãããããã¨ãã«TeXã®ç°å¢æ§ç¯ãªã©ã®éå£ããªããããdocker ããã¤ã³ã¹ãã¼ã«ãã¦ããã° make ã³ãã³ãä¸çºã§ PDF ããã«ãã§ãããããªç°å¢ãæ´ãã¾ãããããããæå
㧠make pdf
ãå©ã㦠PDF ãçæããã®ã¯çµå±èªåã ãã ã£ãããã§ããä¸ä½ã©ããã¦â¦â¦
ããããã®æ´åãç¡é§è¶³ã ã£ããã¨è¨ãã¨æ±ºãã¦ãããªãã¨ã¯ãªããç°¡åã« GitHub ã® CI ã«ä¹ãããã¨ãã§ãã¾ãããããã«ãããææ°çã® PDF ã常㫠Release ãããã¦ã³ãã¼ãã§ããç°å¢ãæ´ãããã¨ãã§ãã¾ãããæ´åããçç±ã¯Pushããã¨Releaseãèµ°ãCIãããã¨ãªã¿ã¯çã«ã¢ã¬ãã¨ãããããããªãçç±ã§ããããå®ç¨çã«ãå²ã¨å½¹ã«ç«ã£ãæ°ããã¦ãã¾ããæçµçã«ãããã¯åºå ã§ã©ã¤ãã©ãªã®å 容ã確èªãããããã¼ã ã¡ã¤ããæ´æ°ã®çµæããã§ãã¯ããããã®æ段ã¨ãªã£ã¦ããããã¾ãã*1ã
ã¾ããCIãæ´ããéç¨ã§CIã®åºåã«ãããããªæ å ±ãåºããã»ãã便å©ããã ã¨ãããã¨ãããã£ãã®ã§ãåè¨ãã¼ã¸æ°ããã¼ã¸æ°ãé£ã£ã¦ããã©ã¤ãã©ãªãªã©ã®æ å ±ãåºåããããã«ãã¾ããã

ä¸èº«
ä»ã¾ã§ä½¿ç¨ãã¦ããã©ã¤ãã©ãªã beet ããã®ãã®ã ã£ããããããããã¼ã¹ã¨ãããã¨ã«ãã¾ãããã¨ããããä»æã£ã¦ããã³ã¼ãããã¹ã¦çªã£è¾¼ãã ã¨ãã 110 ãã¼ã¸ãããã«ãªã£ã¦ãã¾ã£ãããããã¼ã ã¡ã¤ãã¨ãã / ãããªãã®é¸å¥ãè¡ã£ã¦ã©ã¤ãã©ãªæ°ãæ¸ããã¦ããã¾ããããã®ã¨ãã« GitHub ã®Projectsã使ã£ã¦æ´çããã®ã§ãããããããªããªã使ããããã£ãã§ãã

ããã§ã²ã¨ã¾ã 23 ãã¼ã¸ç¨åº¦ã«ã¯åã¾ã£ãã®ã§ãããå¿ è¦ãããªã©ã¤ãã©ãªã追å ãã¦ããéç¨ã§ã¾ãè¨ãä¸ãã£ã¦ããã¾ãããçµå± 27 ãã¼ã¸ç¨åº¦ã¾ã§è¨ãä¸ããã¾ããããPDF ã®åæã«ãããã¼ã¸ã³ãå¾¹åºçã«åã£ããã空ç½ãæ¹è¡ãåã£ã¦ä¸è¡ã«æ¼ãè¾¼ãã ãããèªæãªæ¹å㧠3 ãã¼ã¸ã»ã©ãã¼ã¸æ°ãåæ¸ãããã¨ã§è§£æ±ºãã¾ããã


ãã®ãããªã¡ã¾ã¡ã¾ã¨ããä½æ¥ã¯æåã«ã©ã¤ãã©ãªã®ç°å¢ãæ´åããã®ãèªåã ã£ããããã»ã¨ãã©èªåããã£ã¦ããã貧ä¹ãããå¼ãã¦ãã¾ã£ãã¨ããæç´ããã¼ãã¦ãã¾ãããããã¯ããã¨ãã¦èªåãæºè¶³ããã©ã¤ãã©ãªãä½ããã¨ã¯ã§ããã®ã§ããã£ãã®ããªã¨ã¯æã£ã¦ãã¾ãã
ããã·ã¥
ãã¾ã¾ã§ã®ã©ã¤ãã©ãªã«ãåçµãã§ãã¯ç¨ã®ããã·ã¥ãããã¾ãããããã¼ã ã¡ã¤ããããã·ã¥ã®ä½¿ç¨ã«å¯¾ãã¦ããªãå¼·ãå対ãã¦ããããã«ä½¿ç¨ãã¦ãã¾ããã§ãããããããç·´ç¿ã§åçµãã§ãã¯ã®æéã嵩ãã ãã¨ãåçµãã¹ãç¸æ¬¡ãã ãã¨ãããä½ããã®æ¹æ³ã§ããã·ã¥ãå°å
¥ããªãã¨ãããªãã¨ãèãã¦ãã¾ããã
ãã¼ã ã¡ã¤ããããã·ã¥ã«å対ãã¦ããçç±ã¯ä¸»ã«ãC++ã§æ¸ãããããã·ã¥ããã°ã©ã ã®åçµã«æéããããããfor æãè£å®ã§åºããªã©ã§ã©ã¤ãã©ãªãå®ç§ã«åãã¦ããªãå ´åã«ããã·ã¥ãç¡å¹ã¨ãªããã¨ããçç±ã§ããããããã«ã¤ãã¦ã¯ãè¡æ¯ã«ããã·ã¥ãåºåããã·ã§ã«ã¹ã¯ãªãããæ¸ããã¨ã§è§£æ±ºããããã·ã¥ãå°å
¥ãããã¨ãã§ãã¾ããã
ããã·ã¥ã®ææ³ã¨ãã¦ã¯ãCLI ã§ç°¡åã«æ±ãã¦è»½é㪠MD5 ãç¨ãã¾ããããã ãè¡æ¯ã«ããã·ã¥å ¨ä½ãä¹ãããã¨ã¯å°åºã§ããªããããåè¡ã«ã¯ããã·ã¥ã®ãã¡ä½æåãã ãä¹ãããã¨ã«ãªãã¾ããããã·ã¥ã®æåæ°ã¯å¤ããã°å¤ãã»ã©è¡çªã®ç¢ºçã¯æ¸ãã¾ãããåæã«æ¨ªå¹ ãå æãã¦ãã¾ããã¨ã«ãªãã¾ãããªã®ã§ãåçµã§ãã¹ãããéã«ã©ã®ç¨åº¦ã¾ã§ã®ç¢ºçãªãã°è¨±å®¹ããããèããªããããã·ã¥ã®æåæ°ãé¸å®ãã¾ãããããã·ã¥ã¯ hex ã§åºåãããããã2æåã§ããã°256種é¡ã3æåã§ããã°4096種é¡ã®ç©ºéã¨ãªãã¾ããããã¯å®å ¨ã«ä¸»è¦³ã§ããã1/256 ã®è¡çªã¯å®éã«èµ·ããããã§ããã1/4096 ã§ããã°èµ·ãã£ããç¬ã話ã«ã§ããã¬ãã«ã§èµ·ãããªããã§ãããªã®ã§ãåºæ¬çã«ããã·ã¥ã¯ 3 æåã«ãããã¨ã«ãã¾ããã
ã¾ãããã®ããã·ã¥ãå®éã«éç¨ããããã«ã¯ã©ã¤ãã©ãªå´ã«ããã·ã¥ãåºåããªããã°ããã¾ãããã©ã¤ãã©ãªã®ã«ã¼ã«ã«ã¯ "Text and illustrations must be readable by a person with correctable eyesight without magnification from a distance of 1/2 meter." ã¨è¨ããã¦ããããã¾ãã«ãå°ããæåã§ã¯æã¡è¾¼ããã¨ãã§ããªãããã§ããcorrectable eyesight ã®æå³ããã¾ãåãã¾ããã§ãããããç¯æ£ãã¦å°éå¯è½ãªè¦åã®äººéã 0.5 m ããèªãããµã¤ãºãã¨è§£éãã裸ç¼ã®è¦åãããªãæªãèªåãç¯æ£å¾ã« 50 cm é¢ãã¦ä½è£ã§èªããã¨ãã§ãããµã¤ãºã«æãã¾ãããããã¯ãã£ã¦ãå¤å°ã¯æãã£ãããã6 pt ã® 3 æåãã¼ã¸ã§ã³ã¨ã9 pt ã® 2 æåãã¼ã¸ã§ã³ã® 2 é¨ãæã¡è¾¼ã¿ã¾ããã
ã¸ã£ãã¸ç°å¢ã®èª¿æ»
DOMjudge ã®èª¿æ»
ICPC ã§ã¯ãDOMjudgeã¨ãããªã¼ãã³ã½ã¼ã¹ã®ã¸ã£ãã¸ç°å¢ã使ç¨ãããã¨ãä¸è¬çã§ãããã®ã¸ã£ãã¸ã Codeforces ã AtCoder ã¨ãã£ãæ £ã親ããã ã¸ã£ãã¸ã¨éãæåããã¦ããå¯è½æ§ã«æãããããã¨ããªããããäºåã« DOMjudge ã®ã³ã¼ããå®è¡ããé¨åãèªãã§ç¥èãã¤ãã¦ãããã¨ã«ãã¾ãããâ¦â¦ã¨ããã®ã¯å»ºåã§ãå®éã®ã¨ãã㯠ICPC ç·´ç¿ã§ CTF ãªã©ã¸ã®åå ã諦ãã¦ããããã«ãã½ã³ã³æ¬²ãæºãããã¦ããªãã£ããã¨ã«ããä¸ç¨®ã®çºä½ã®ãããªãã®ã ã£ãã¨æãã¾ãã
ã¾ã㯠DOMjudgeãèªåã®PCã§åãããã¨ã«ãã¾ããããã®ãããªã½ããã¦ã§ã¢ã¯åããã«ããã¤ã¡ã¼ã¸ããã£ãã®ã§ãããå°ã調ã¹ãã¨Docker のイメージãå ¬éããã¦ããæ¯è¼çç°¡åã«åããã¾ããã

DOMjudge ã¯Webã¢ããªå´ãæ å½ãããµã¼ãã¼ï¼domserverï¼ã¨ãã¸ã£ãã¸ãæ å½ãã judgehost ã¨å¼ã°ãããµã¼ãã¼ã¨ã«åããã¦ãã¾ããjudgehost ã¯è¤æ°å°ç»é²ãããã¨ãã§ãããããç¨ãã¦å¤ãã®æåºã並åã«æããã¨ãå¯è½ã¨ãªã£ã¦ãã¾ãããããã®ãã¡ãä»åèå³ãããã®ã¯ judgehost ã®ãç¹ã«æåºããããã°ã©ã ãå®è¡ããé¨åã§ããããã¯runguard.ccã¨ããããã°ã©ã ã¨ããããå®è¡ããtestcase_run.shã¨ããã·ã§ã«ã¹ã¯ãªãããæ å½ãã¦ãã¾ã*2ã
ããããçºããã¨ãrunguard ã¯ã³ã³ãã¤ã«ããããã¤ããªã«å種å¶éãã¤ããä¸ã§å®è¡ãã¦ãããtestcase_run.sh 㯠runguard ã®å®è¡çµæãæ¸ããã program.meta ã¨ãããã¡ã¤ã«åã³ output ã解æã㦠verdict ãè¿ãã¹ã¯ãªããã§ãããã¨ãåããã¾ãã
次ã«ã runguard ãä½ããã£ã¦ãããã詳ããèªã¿ã¾ããããã®ããã°ã©ã ã¯å ç¨ãè¿°ã¹ãã¨ããããã¤ããªã«å¶éããããä¸ã§å®è¡ãããã®ã§ãããã®å¶é 㯠setrestriction ã¨ããé¢æ°ã§ä¸»ã«è¡ããã¦ãã¾ãããã®ã³ã¼ããèªãã¨ãã©ã®ãããªå¶éãããã£ã¦ãããã詳ããç解ãããã¨ãã§ãã¾ãããå¶éã®å¤ã¯ runguard ãå®è¡ããéã®ãã©ã¡ã¼ã¿ã§æå®ã§ããã®ã§ãããDOMjudge ã®æ¨æºã§æå®ããã¦ãããã©ã¡ã¼ã¿ã§ã¯ä»¥ä¸ã®ãããªå¶ç´ãããã£ã¦ããï¼ã¯ãï¼ã§ã:
- chroot ãç¨ããå¶é
- ããã°ã©ã æ¯ã«å¥ã®ã«ã¼ããã£ã¬ã¯ããªãç¨ããããã«ãã¦ãã
- ãã¡ã¤ã«ã®ãã¼ããã·ã§ã³ãç¨ããå¶é
- å®è¡ç¨ã®ã°ã«ã¼ãåã³ã¦ã¼ã¶ã¼ãç¨ãããã¨ã§ããã¡ã¤ã«ã®ä½æåã³ãã¹ã¦ã®æ¸ãè¾¼ã¿ãç¦æ¢ãã¦ãã
- rlimit ãç¨ããæ§ã
ãªå¶é
- ã¡ã¢ãªåã³ã¹ã¿ãã¯ãµã¤ãºã¯ç¡å¶éã¨ãã¦ãã
- ã¡ã¢ãªã¯ cgroup ãç¨ãã¦å¶éãã¦ãã
- ããã°ã©ã ãæ¸ãè¾¼ãããã¡ã¤ã«ãµã¤ãºã OLE ã®å¤ã¨ãã¦ãã
- æ大ã§ç¨ãããã¨ãã§ããããã»ã¹æ°ã 64 ã¨ãã¦ãã
- CPU æéã ceil(max(å®è¡æé+1, å®è¡æé*1.1)) ç§ã«å¶éãã¦ãã
- rlimit ã§ã¯ 1 ç§åä½ã§ã®æéå¶éããã¤ãããã¨ãã§ããªã
- ã¡ã¢ãªåã³ã¹ã¿ãã¯ãµã¤ãºã¯ç¡å¶éã¨ãã¦ãã
- èªããã»ã¹ã® cgroup ã¸ã®ç»é²
- 詳細ã¯å¾è¿°
ã¾ããcgroup ã¨å¼ã°ããæ©è½ãç¨ãã¦ããã°ã©ã ã使ç¨ã§ãããªã½ã¼ã¹ãã³ã³ããã¼ã«ãã¦ãã¾ããããã¯ä¸»ã«ã¡ã¢ãªã®ä½¿ç¨éãå¶éããããã«ç¨ãããã¦ãã¾ãããå®è¡ãã CPU ã®ã³ã¢ãªã©ãç´°ããæå®ãããã¨ãã§ããããã§ãããããããå®è¡ãããã³ã¢ã«ããä¸å ¬å¹³ããåé¿ããããã®æ©è½ã ã£ããããã®ã§ãããã
åã®ããæ¹ãªããåããã§ãããããããã¾ã§ã§ã¯å®è¡æéå¶éã«é¢ããå³å¯ãªå¶ç´ã¯ä¸ã¤ãåºã¦ãã¦ãã¾ãããããã¯ã詳細ãªå®è¡æéã¯å¥ã®é¨åã§ç®¡çããã¦ããããã§ãããã®ããã°ã©ã ã¯èªèº«ã fork ãããã¨ã§å®è¡éä¸ããç£è¦ç¨ã®è¦ªããã»ã¹ã¨ãã¤ããªå®è¡ç¨ã®åããã»ã¹ã«åå²ãã¦ãã¾ãã親ããã»ã¹ã®å ·ä½çãªå½¹ç®ã¯ãããã°ã©ã ã®çµäºãå¾ ã£ãå¾ã«åºåãä¿åããããã°ã©ã ã®å®è¡çµæã«é¢ããæ å ±ã解æã㦠metafile ã¨å¼ã°ãããã¡ã¤ã«ã«æ¸ãè¾¼ããã¨ã§ããå®è¡ã«ç¨ãã詳細㪠CPU æé㯠cgroup ã®æ å ±ããå¾ããã¨ãã§ãã親ããã»ã¹ã¯ãããç¨ã㦠TLE ãªã©ã®å¤å®ããã¦ããã®ã§ããã¾ããä¸ã¤ã®ããã°ã©ã ãã¸ã£ãã¸ãå æãã¦ãã¾ããã¨ãé²ããããããç¨åº¦æéãçµéããå¾ã«ããã°ã©ã ãå¼·å¶çµäºããå¦çãè¡ããã¦ãã¾ããIO å¦çãªã© CPU 以å¤ã®é¨åã§æéãããã£ã¦ããéã«èª¤ã£ã¦ããã»ã¹ãçµäºãã¦ãã¾ãã®ãé²ããããããã»ã¹ãçµäºããã¾ã§ã®æéã¯å®è¡æéå¶éããå¤å°é·ãã«ç¢ºä¿ããã¦ãã¾ãã
ããã¾ã§ã®æµããç°¡æçã«ã¾ã¨ããã¨ã以ä¸ã®éãã¨ãªãã¾ã*3ã
parse_option(); // ã³ãã³ãã©ã¤ã³ãªãã·ã§ã³ããã¼ã¹ãã open_metafile(); // å®è¡çµæãæ ¼ç´ãããã¡ã¤ã«ãä½æãã int pid = fork(); if (pid == 0) { // åããã»ã¹ã®å ´åã ãå®è¡ããã setrestrictions(); // èªããã»ã¹ã«å¶ç´ã追å ãã run_binary(); // ãã¤ããªãèµ°ããã } else { // 親ããã»ã¹ã®å ´åã ãå®è¡ããã redirect_output(); // åããã»ã¹ã®å®è¡çµæãä¿åãããã¡ã¤ã«ãä½æãã settimeraction(terminate); // timer ã®çµäºæã«ããã°ã©ã ãå¼·å¶çã«çµäº settimer(hard_limit); // timer ãè¨å®ãããã©ã«ãã§ã¯ max(TL*1.1, TL+1sec) wait(pid); // åããã»ã¹ã®å®äºãå¾ ã¤ read_program_output(); // åããã»ã¹ã®åºåãèªã¿åãããã¡ã¤ã«ã«ä¿å check_statuscode() // ã¹ãã¼ã¿ã¹ã³ã¼ããå ã« RE ããã§ã㯠output_cgroup_stats() // cgroup ã®æ å ±ãã TLE ã MLE ããã§ãã¯ããçµæã metafile ã«æ¸ã込㿠}
ãã®ãããªèª¿æ»ããã¦ããæä¸ããã®ããã°ã©ã ã«æ½å¨çãªèå¼±æ§ããããã¨ã«æ°ãä»ãã¾ãããããã¯ãfork ã®åã« open_metafile ãå®è¡ãããopen ããããã¡ã¤ã«ã run_binary ã®åã« close ããã¦ããªããã¨ã§çºçãã¦ãã¾ããLinux ã§ã¯ãfork ãå¥ããã°ã©ã ã®å®è¡ãè¡ã£ã¦ãéãã¦ãããã¡ã¤ã«ã¯åããã»ã¹ãå¥ããã°ã©ã ã«åãç¶ããã¾ãããã®ãããæ¬æ¥ãªãã°ç£è¦ããã»ã¹ããæ¸ãè¾¼ããã¨ãã§ããªã metafile ã«ã¸ã£ãã¸å¯¾è±¡ã®ããã°ã©ã ãæ¸ãè¾¼ããã¨ãã§ãã¦ãã¾ãã¾ãããããç¨ããã¨ãmetafile ãæ¹ãããã¦å®è¡çµæãå½è£ ãããã¨ãã§ãã¦ãã¾ãããã§ãã
ããããã¯ãã®èå¼±æ§ãã©ãã«ã¤ãã¦ã®è©±ããã¾ãããããã¯ãããã¹ãçªå£ãéãã¦å ±åãããçµæä¿®æ£ãããããã§ã«ãªãªã¼ã¹ããã¦ãããå
¬ç¥ã®ãã®ã¨ãªã£ã¦ãããã¨ã¯ç³ãæ·»ãã¦ããã¾ãã
çã£å ã«æãè³ã£ããã¨ã¯ãå®è¡æéå¶éãä¸ç§ç¨åº¦ä¼¸ã°ããã¨ãã§ããå¯è½æ§ã«ã¤ãã¦ã§ãããåè¿°ããéããããã°ã©ã ãå¼·å¶çµäºãããã®ã¯å®éã®å®è¡æéå¶éããå°ãé·ãæéãçµéããå¾ã§ãããã®ãããã©ãã«ãã㦠TLE ã§ãã£ãã¨ããäºå®ãè¦ãé ããã¨ãã§ããã°å®è¡æéå¶éãè¶ ãã¦å®è¡ã§ãããã§ããããããçµè«ããè¨ãã°ãããè¡ããã¨ã¯ä¸å¯è½ããã§ããããªããªãã°ãå®è¡æéå¶éãè¶ ãããã¨ã¯ãããã¿ã¼ã³ã«ãããããæååã metafile å ã«åå¨ãããã§å¤å®ããã¦ããããã¤ããã°ã©ã ãå®å ¨ã«çµäºãããå¾ã« metafile ãæ¸ãæãããã¨ãä¸å¯è½ã ã£ãããã§ãããã ãmetafile ã«ç¹å®ã®æååãæ¸ãè¾¼ããã¨ã§ãã©ããªå®è¡æéã®ããã°ã©ã ã§ã TLE ã¨ãã¦å¦çããããã¨ãã§ãããã§ããããã«ããã夢ã®(?) 1 msã§TLEãåå¾ãããã¨ãå¯è½ã¨ãªãã¾ããã
ããã°ã©ã ãå®å
¨ã«çµäºãããå¾ã« metafile ãæ¸ãæãããã¨ãä¸å¯è½ã§ããã¨ãããã¨ã¯ãæ¢åã® metafile ã®å
é ã«ã³ã³ãã³ãã追å ãããã¨ã®ã¿ãå¯è½ã§ããã¨ãããã¨ã§ããmetafile ã®ãã¼ã¹ã tag, content = line.split(": ")
ã®ããã«è¡ããã¦ãããããé常 metafile ã® 1 è¡ç®ã«ããã¡ã¢ãªä½¿ç¨éã® tag ãç ´å£ãã¦ä»»æã®ã¡ã¢ãªä½¿ç¨éã«ç½®ãæãããã¨ãã§ãããã§ãããããç¨ãããã¨ã§ãããããªãã¡ã¢ãªä½¿ç¨éï¼è² ãªã©ï¼ãç³åãããã¨ãã§ãã¾ããã
ã¾ããæ®æ®µã¯æååãå
¥ããã¨ãæ³å®ããã¦ããªãç¹æ®ãªã¿ã°ã«å¯¾ãã¦æååãæ¿å
¥ãããã¨ãå¯è½ã¨ãªãã¾ãããä¾ãã°ãéåºããã signal ã示ã tag ã«æååãå
¥ãããã¨ã§ DOMjudge ã®æåºè©³ç´°ç»é¢ã«ä»»æã®æååã表示ããããã¨ãå¯è½ã¨ãªãã¾ããããã㧠XSS ãªã©ãã§ããã°ç«æ´¾ãªèå¼±æ§ã ã£ãã®ã§ãããWebãã¬ã¼ã ã¯ã¼ã¯ãå
¥åæååãã¨ã¹ã±ã¼ããã¦ãããã¨ã«ãã XSS ãè¡ããã¨ã¯ã§ãã¾ããã§ãããä»ã«ã ReDoS ãªã©ã«ã¤ãã¦ãèãã¾ãããã metafile ãéãããæ£è¦è¡¨ç¾ã¯ã©ãã ReDoS ãè¡ããã¨ãä¸å¯è½ãªãã®ã ã£ãããã«æç«ãã¾ããã§ããã

ãã®ããã«å ¨ããã£ã¦æªç¨ãããã¨ãä¸å¯è½ãããªãã°ã§ããããæ½å¨çã«å±éºã§ã¯ãããã¨ã¯ç¢ºããªããã« DOMjudge ã®ã»ãã¥ãªãã£å ±åçªå£ãéãã¦å ±åãã¾ããããã®æ¥ã®ãã¡ã«å¯¾å¿ãã¦ä¸ãããã¨ã¦ãæé£ãã£ãã§ãã
ã¸ã£ãã¸ãµã¼ãã¼ã®èª¿æ»
競æã®10æ¥åã»ã©ã« Judge Manual ãå ¬éãããããã«ã¯å®éã«ä½¿ç¨ããã GCP ã®ã¤ã³ã¹ã¿ã³ã¹ãè¨ããã¦ãã¾ããããã®ãããå®éã«åãã¤ã³ã¹ã¿ã³ã¹ãåãã¦æ§ã ãªã³ã¼ãã®å®è¡é度ã調æ»ãã¾ãããå®è¡ããã³ã¼ã㯠unordered_map ãmap ã«è¦ç´ ã追å ããã³ã¼ãã bitset ã®ã³ã¼ããããã¦åé åè¦ç´ ã«å¯¾ã㦠xorshift ã®ãããªãã¨ãè¡ãã³ã¼ãã§ããç¹ã«å¾è äºã¤ã«ã¤ãã¦ã¯ SIMD åã®å½±é¿ããã¹ããããã£ããããpragma ã追å ããå ´åã¨ããã§ãªãå ´åããããã«ã¤ãã¦ãã¹ããã¾ãããã¾ããããããã®ã³ã¼ãã¯AtCoderããã³Codeforcesã§ãå®è¡ããæ £ã親ããã ã¸ã£ãã¸ã¨ã®é度ã®å·®ã«ã¤ãã¦ãæèã§ããããã«ãã¾ãããå®è¡çµæï¼ããªç§ï¼ã¯ä»¥ä¸ã®éãã§ã*4ããªããå®éã«å®è¡ããã³ã¼ãã¯gistã«å ¬éãã¦ãã¾ãã
unordered | ordered | vectorize | vectorize_opt | bitset | bitset_opt | |
---|---|---|---|---|---|---|
AtCoder | 323 | 1104 | - | 720 | - | 656 |
Codeforces | 732 | 1466 | 5506 | 717 | 5506 | 889 |
GCP | 491 | 1190 | 1329 | 386 | 1694 | 479 |
ãããè¦ãã¨ãSIMDåãé¢ãããªãå ´é¢ã§ã¯AtCoderã®ã¸ã£ãã¸ã¨ã»ã¼åçãSIMDåãé¢ããå ´é¢ã§ã¯2åå¼±ç¨åº¦ã®é«éåã«ãªã£ã¦ãããã¨ãåããã¾ãããã®ãããCodeforcesã§è¡ã£ã¦ããæ®æ®µã®ç·´ç¿ã®ãããªæè¦ã§æåºãã¦ãåé¡ãªããã¨ãåããã¾ããã
ãã ãããã¯ãæ¬çªã®ã¸ã£ãã¸ç°å¢ãPDFã«è¨ããã¦ããéãã§ããã°ãã®è©±ã§ããä»åã®éå¶ã¯æ¨ªæµã®ãããªæç·´ãã®æ¹ã ã§ã¯ãªããããªãããæ²è¼ããã¦ããPDFã¯ãã¾ãèããä½ããã®ãã¡ã¤ã«ãã³ãã¼ãã¦ãã¦ããã ãã¨ããå¯è½æ§ãååã«ããã¨èãã¦ãã¾ãã*5ããã®ãããæ¬å½ã«ç¤ºãããéãã®ç°å¢ã§åãã¦ããããPracticeä¸ã«ç¢ºãããããã®ã³ã¼ããäºåã«ç¨æãã¦ãããã¨ã«ãã¾ããã
æ®æ®µã§ããã° /proc/cpuinfo
ã«ç¹å®æååãå
¥ã£ã¦ãããã確ãããã³ã¼ããæ¸ãã°ååã§ãããããããä»åã¯åé
ã§è§¦ããéã chroot ã«ãã£ã¦ãã¡ã¤ã«ã«ã¢ã¯ã»ã¹ã§ããªãããã«ãªã£ã¦ããããã«ãããè¡ããã¨ã¯ã§ãã¾ããã追è¨: procfs はマウントされていましたããªã®ã§ãæ®éã« assert(WEXITSTATUS(system("grep 'XXX' /proc/cpuinfo")) == 0);
ã¨ããã°è¯ãããã§ããCPUID命令ã¨ããCPUã«é¢ããæ§ã
ãªæ
å ±ãåå¾ãããã¨ãã§ããå½ä»¤ãç¨ãã¦CPUã®ãã©ã³ãæååãåå¾ãããããäºåã«ãã§ãã¯ãã¦ãããã®ã¨çãããã©ããã確ããããããªã³ã¼ããç¨æãã¾ãããã³ã¼ãã¯ä»¥ä¸ã®ãããªå½¢ã¨ãªãã¾ããã
#include<stdio.h> #include<string.h> #include<assert.h> int a[4]; void brand_string(int eax) { if (eax == 1) { __asm__("mov $0x80000002 , %eax\n\t"); } if (eax == 2) { __asm__("mov $0x80000003 , %eax\n\t"); } if (eax == 3) { __asm__("mov $0x80000004 , %eax\n\t"); } __asm__("cpuid\n\t"); __asm__("mov %%eax, %0\n\t":"=r" (a[0])); __asm__("mov %%ebx, %0\n\t":"=r" (a[1])); __asm__("mov %%ecx, %0\n\t":"=r" (a[2])); __asm__("mov %%edx, %0\n\t":"=r" (a[3])); } void get_brand(char* buf) { int* ibuf = (int*)buf; brand_string(1); memcpy(ibuf+0, a, 16); brand_string(2); memcpy(ibuf+4, a, 16); brand_string(3); memcpy(ibuf+8, a, 16); } int main(){ char buf[12*4+1]{0}; get_brand(buf); char* expected = " Intel(R) Xeon(R) CPU @ 3.10GHz"; assert(strlen(expected) == 41); assert(strcmp(expected, buf) == 0); puts(buf); }
ãã®CPUã¯GCPã®ããã¥ã¢ã«ã«ãå ·ä½çãªã¢ãã«åã¯æ¸ããã¦ãã¾ããã§ããããCPUã®ãã©ã³ãæååãè¦ãéãã«ã¹ã¿ã ã¢ãã«ã¨ãªã£ã¦ããã®ã ã¨æãã¾ãã
ã³ã³ãã¹ã
åå°½ãã¦ããã®ã§è»½ãã«æ¸ãã¾ããä»ã®ãã¼ã ã¡ã¤ãã詳細ã«æ¸ãã¦ãããã§ããããï¼åå è¨ã¨ã¯â¦â¦ï¼ï¼
Practice
Practice Session ã¯éä¼å¼ãçµãã¦æ¼é£ãé£ã¹ãå¾ã«è¡ããã¾ãããæã ã¯äºåã« Practice ã§ãããã¨ã GitHub ã«çºãã¦ããã®ã§ãããPractice ã§ã¯ããã¥ã¡ã³ãã¨å»çå以å¤ã¯æã¡è¾¼ã¿ç¦æ¢ã¨ã®ãã¨ã ã£ãã®ã§æ¥é½äºåã®ã©ã¤ãã©ãªç¾¤ã«æ¸ãåãã¦æã¡è¾¼ããã¨ã«ãã¾ããããã³ãã¯ãªã¼ã ãã¦ã§ãããã£ãã·ã¥çã許å¯ããã¦ããããä¸æã§ããããå ã ã¨ãã¦ãããæã¡è¾¼ããã¨ã«æåãã¾ããã
ã»ãã·ã§ã³ä¸ã«æ¥æ¬ã§ãã¡ããã¡ãè²·ãè¾¼ãã§ãããèåãææ¥æã¡è¾¼ãããèããã¨ãããããå ´åã¯ä»æ¥ä¸ã«å ¥ãã¦ããå¿ è¦ãããã¨ã®ãã¨ãããã«ã«ããããä»ãã帰ãã¹ããï¼ã¨è¥å¹²ã®å§ããããã¨ãå½æ¥ã®æã¡è¾¼ã¿ã許å¯ããã¾ãããåæ§ã«åä¸ã®ã©ã¤ãã©ãªã 3 é¨ã¾ã§æã¡è¾¼ãã§è¯ãã¨è¨ãããã®ã§ãããã¯äºåã«åç¥ããã¦ããªãã£ããä¸å ¬å¹³ã ãã¨ã´ããã¨ããå°å·ãã¦ãããããã¨ã«ãªãã¾ããããã¡ããã¡ãè² è·ãããã¦ããæ°ããã¦å°ãç³ã訳ãªããªãã¾ããããã¾ãäºåã«ããããé¨åãå ¬éãã¦ããªãæ¹ãå ¬éãã¦ããªãæ¹ã ããâ¦â¦ã¨ãããã¨ã§ã
ãã°ããããã¨ã³ã¼ãé£ãé»åæ©å¨ãªã©ãæºå¸¯ãã¦å
¥ã£ã¦ãã¦ããã®ã§ããã®æ¸ãåããåªåã¯ä¸ä½ä½ã ã£ãã®ãã¨ããæ°æã¡ã«ãªãã¾ãããå¾åã¯è¨ãã°é»åæ©å¨ãæã¡è¾¼ããã®ã§ããããâ¦â¦ã
ã³ã³ãã¹ãä¸
- éå§å: 風è¹ã®è²æ°ãæ°ãã¦ãã¾ãããèªåãã¡ã¯ 12 è²ã¨ããçµè«ã«è³ãã¾ããã
- [0:00]: äºåã®ç¸è«éããYu_212 ããã½ã³ã³ã®ã»ããã¢ããããã¦ããéã«èªåãåãããshibh308ãå¾ãããåé¡ãèªã¿ã¾ãããèªãã§ããéã« shibh308 ã H ã«ç°¡åæ ãããããã¨ãããã¨ã§ Yu_212 ã«ä¼ããå®è£ ãã¦ãã¾ããã
- [-0:10]: ã¡ããã©å®è£ ãå®äºãããããã§ãèªå㨠shibh308 ãåããã¦ãã¹ã¦ã®åé¡ãèªãã¦ããç¶æ ã«ãªãã¾ãããæåºåã« shibh308 ãã³ã¼ãã¼ã±ã¼ã¹ãææãã¦ä¿®æ£ãªã©ããã¤ã¤ãæåºããã¾ããããããã®æåºã¯ WA ã¨ãªãã¾ããã
- [-0:20]: ãã®ãããªç¶æ³ã§ã¯ä»ã®äººã¨äº¤ä»£ããã¨æ±ºãã¦ãããããã³ã¼ããå°å·ãã¦èªåããããã°ããããã¨ã«ãã¾ãããå°å·ãå¾ ã£ã¦ããéã«è§£ããããªåé¡ï¼C, D, Eï¼ã Yu_212 ã«èª¬æãã説æãçµãã£ããããã®ã¿ã¤ãã³ã°ã§å°å·ãå°çãå°ãçºããå¾ã«ãã°ãããã£ãã®ã§ãYu_212 ã«ä¿®æ£ãã¦ãããã¾ããããããæåºã㦠ACã
- [-1:00]: ãã®æ®µé㧠C ã解ãããã«è¦ãã¦ãããã C ã«éä¸ãããã¨ã«ããD 㨠E ã yu_212 ã«ä»»ãã¾ããæ«ããã㨠J ã Yu_212 ã«ãã£ã¦è§£ãã¦ãã¦ãå®è£ ã Yu_212 ã shibh308 ã«ä»»ãã¦ããããªé°å²æ°ãä¼ãã£ã¦ãã¾ãããshibh308 ããããå®è£ ããä¸ã§æåºããACã
- [-1:15]: 確ããã®ããã㧠C ã¯ã»ã¼è§£ãã¦ãã¦ãæåºãããassertion 㧠RE ãåºãã¿ãããªãã¨ããã¦ããæ°ããã¾ãã
- [-1:30]: ãã®ãããã§ãã£ãæãã E ã解ããã¦ãã¾ãããCã¯ã¾ã ãã°ã£ã¦ãã¾ããæ¬å½ã« C ã§æ²¼ã«åµã£ã¦ããããèªåãã Yu_212 ã« Help ãåºããä¸æ¦ãããã°ã交代ãã¦ããã代ããã«çµæ§è§£ããã¦ãã G ãªã©ãèãããã¨ã«ãã¾ãã
- [-2:20]: ãã¤ã¬ã«è¡ã£ãã C ã®ãã°ã®ã±ã¼ã¹ããªãã¨ãªãåãã£ãã®ã§å¸°ã£ã¦å ±åããã¨ãYu_212 ãåæã«åæ§ã®ã±ã¼ã¹ãè¦ã¤ãã¦ãããããããããã¯èªåã ãã§ä¿®æ£ã§ããããªã®ã§ Yu_212 ã¯ä»ã®åé¡ã«è¡ã£ã¦ããããã¨ã«ãã¦ãä¿®æ£ãã¾ãããæåºããã ACã
- [-2:40]: ã¨ããããã¨ã¦ã解ããã¦ãã G ãèããªããä½ãããããªããªãã¨è¨ã£ã¦ããããshibh308 ã解ãããããã®ã§è§£æ³ãèãã¾ããåã£ã¦ãããã§å®è£ ã§è©°ã¾ãè¦ç´ ããã¾ããªããããªã®ã§ãã¨ããããå®è£ ãã¦ããããã¨ã«ãããåé¡ããªããªã£ãã®ã§ã解ããã¨ãã»ã¼å¿ é ã«ãªããã㪠F ãèãããã¨ã«ãã¾ãã
- [-3:00]: F ãèãã¦ããã¨ããããªãã¨ãªã解ãã¦ããããªé°å²æ°ãæ¼ã£ã¦ãã¾ãããããã¯ããã¨ãã¦è§£æ³ãç°¡åãããã®ã§ä¸å shibh308 ã«ç¢ºèªãåãã¨ãåé¡ãéä¸ã§åãéãã¦ãããã¨ã«æ°ãä»ãã¾ããæ°ãåãç´ãã¦ããä¸åº¦èããã¨ãããä¸åº¦è§£ãã¦ããããªé°å²æ°ãæ¼ã£ã¦ãã¾ãããä»åº¦ã¯åã£ã¦ãããã ã£ããããå®è£ ãè©°ãå§ãã¾ããããã®ã¿ã¤ãã³ã°ã§ K ã解ããã解ãã¦ããªãã£ãããã¦ããæ°ããã¾ãã
- [-4:00]: K ã®å®è£ ãè©°ã¾ã£ãã¿ã¤ãã³ã°ãè¦è¨ãã£ã¦ãF ã®å®è£ ãéå§ãã¾ãããã㨠2 æé㧠K 㨠F ã 2 åéããªããã°ãããªãã¨ããå¤å°ãã¼ããªç¶æ³ã ã£ããããé度ã¯æ±ããã«å®å ¨å´ã«åããå®è£ ãå¿ããã¾ãããå ·ä½çã«ã¯ãæç´è§£ã®ä¸é¨ãæ¸ãæããã° AC ãåãã解ã«ãªãã¿ã¤ãã®åé¡ã ã£ããããã¾ãæç´è§£ããæ¸ãããã®è§£ã®äºä¹ãç·å½¢ã«è½ã¨ããããªä¿®æ£ãå ããã¨ããæ¹æ³ãåãã¾ããããããããã¨ããã°ã£ãéã«ã©ã³ãã ãã¹ããåããããå®è£ ã¨ãªãã¾ããå®è£ ã§ããã®ã§æåºãã¾ãããTLEãå ¥åºåé«éåãä½æ ãæ¶ãã¦ãããã¨ã shibh308 ã«ææãããã®ã§ãããä¿®æ£ãã¾ãããããªãã TLE ã§ããããã¹ã¦ã®é¢æ°å¼ã³åºããåé¤ããvector ãçé åã«ä¿®æ£ãã¦æåºããã¨ãWA ã¨ãªãã¾ããã
- [-4:55]: K ã®ãããã°ãæåªå ã ã£ããããF ã¯å°å·ããç´ã®ä¸ã§ãããã°ãããã¨ã«ãK ã¯ããããã«ãã£ãæ°ã«ãã段éã§ãªãã£ããã assert ãç¨ãã¦ãããã°ãã¦ãã¦ããã®éã«èªåã F ãç´ã®ä¸ã§ãããã°ãã¾ãããä¸ç®æã§åç §ããé åãééãã¦ãããã¨ã«æå¾ã® 6 åãããã§æ°ãä»ãããã½ã³ã³ã 30 ç§å¥ªãåã£ã¦ä¿®æ£ããæåºããã㨠ACã
- [-5:00]: ããèªåãã§ãããã¨ã¯ãªããªãã¾ããããã¨ã¯ Yu_212 ã K ãåããã¦ããããã¨ãç¥ããªããã¿ã¤ãã¼ãçºãã¦ãã¾ããããæå¾ã¾ã§åããã«ç«¶ææéãçµäºã
çµæã¨ãã¦ã26ä½ï¼å¤§å¦å¥é ä½18ä½ï¼ã¨ããèªåãã¡ããããã°å¤±æã®çµæã«åã¾ãã¾ãããä¾å¹´ã¯ Asia ãã 16-18 ãã¼ã ç¨åº¦ã® World Finals é²åºãã¼ã ãåºããããã®ãªã®ãªã§è½ã¡ã¦ããå¯è½æ§ãæ¿åã¨ããæ績ã®ããã§ãã
ã³ã³ãã¹ãã¯ã¯ã¯ã¯è¦ç´
- æºã®é ç½®ã§æåãæ¸ãã¦ãã¾ãããèªåãã¡ã¯è¢«å®³ã被ããããªå ´æã§ã¯ãªãã£ãã®ã§ããã¾ãæå¥ã¯è¨ãã¾ããã
- åé¡ãå¾ãããèªãæ å½ã® shibh308 ã®åé¡æããæå¾ã®åé¡ãæãã¦ãã¾ããã幸ãæå¾ã¯é£ããã®æ ã§ããããããã§ç°¡åæ ã ã£ããå²ã¨æ²æ¨ãªãã¨ã«ãªã£ã¦ããã¨æãã¾ãã
- 競æä¸ã«ã·ã§ã«ã®å±¥æ´ãé¡ã£ã¦ããã Practice æã®å±¥æ´ã¾ã§é¡ãã¦ãã¾ã£ã¦æ¸æãã¾ãããCLion ã® shell ã ãå¤ãªã¨ããã«å±¥æ´ããããªã»ãããå¿ããã¿ãããªè©±ããªï¼ã¨æãã¾ãããã競æå¾ã«ç¢ºèªãã㨠.bash_history ã«æ¨æ¥ã®å±¥æ´ãæ®ã£ã¦ãã¾ããã
- åããã® Bocchi The Tech ã®å£°ãå£è¶ãã«è²«éãã¦ãã¦ãæ®éã«ã¨ããã©ããä½ãè¨ã£ã¦ãããèãããå ´é¢ãããã¾ãããå ·ä½çã«ã¯ãåé¡ç®¡çã·ã¼ããæ¸ãã¦ãã Yu_212ï¼12 åã ã¨æãè¾¼ãã§ããï¼ã 13 åãããã¨ããæ å ±ãå¾ããé«åº¦åææ°ã®è©±ããã¦ããã®ãèããã¦ãããªã©ãããã¾ããã
- æ¼é£ã®ãµã³ãã¤ãããé ã£ã¦ãã ãã£ã¦ããæ¹ããã³ã³ãã¹ãä¸ã«ã«ã³ããªã¼ãã¢ã ãæå·®ã㦠"Is this your countrie's cookie?" ã®ãããªãã¨ã話ãããã¦ããæ°ããã¾ããæ¬å½ã«ã³ã£ãããã¾ããããã¨ããããé©å½ã«è¿ãã¦ããã "Did you bring it from your country?" ã¿ãããªãã¨ã¾ã§èãã¦ãã¦ãæ®éã«ä¼è©±ããæ°ãããã â¦â¦ãã¨ããä¸åº¦ã³ã£ãããã¾ãããæ©ãä¼è©±ãçµãã£ã¦ã»ããããªé°å²æ°ãåºãã¦ããã次ã«è¡ã£ã¦ããã¾ããã
- ã©ããã®å½ã®ã³ã¼ãäºäººãé¸æã使ããã¤ã¬ã§ã¿ãã³ãå¸ããªããæ®éã«ä¼è©±ãã¦ãã¦ã³ã£ãããã¾ããã
ã³ã³ãã¹ãå¾
K ãæ¬å½ã«ãªãéããªãã£ãã®ãåãããªãã£ãã®ã§ãæåºããã³ã¼ããåçã«æ®ã£ãããã§ããã«ã«å¸°ã£ã¦ãã OCR ããã¦ã³ã¼ãã復å
ããCF ã®ãã©ã¼ã³ã³ãã¹ãã«æåºãã¦ãããã°ãããã¨ã«ãã¾ãããããã§ããããå
¥åãããªã¼ãã¼ããã¼ãã¦ãããã¨ã«æ°ãä»ããä¸åé©æâ¦â¦ã#define int long long
ãããã¨ããç¡äºéãã¾ãããæ²ãããã
ç¿æ¥ã®ã¯ã«ã¼ãºã§ã¯ Speed Star ã®æ¹ã ãæ¥æ¬ãã Technical Comittiee ãä½åã¨ãã¦é¢ãã£ã¦ããæ¹ã¨ã話ãããã¦é ãã¾ãããICPCã®æ話ãè¦å´è©±ãªã©ãããããªã話ãèããã¨ã¦ãåºæ¿çã§ãããç¹ã«èªåã¯ã¸ã£ãã¸ã·ã¹ãã å´ã®æ§æã«èå³ããã身ã ã£ãã®ã§ãå®éã®ãªãã¬ã¼ã·ã§ã³ãæ§æãã©ããªã£ã¦ãããã®è©±ãï¼ãã¡ããè¨ããç¯å²ã§ï¼èããã®ã¯ã¨ã¦ãèå³æ·±ãã£ãã§ããæã å¦çãããã㦠ICPC ã楽ãããã®ã¯ãæ¬å½ã«ãããããªæ¹ã®å°½åã®ãé°ã ã¨ããã®ãæ¹ãã¦æãã¾ããã
æ¥å¹´ã¸ã®æ±è²
å»å¹´ã¾ã§ã¯å®å ¨ã«ç«¶æããã°ã©ãã³ã°å¼éè人åã¨ããæ°æã¡ã ã£ããã§ãããã¾ã World Finals ãçãããã ãç¾å½¹ç«¶æè ã ãã¨ããæ°æã¡ã«ãªã£ãã®ã§ããããã競æããã°ã©ãã³ã°ãç¶ãããã¨æãã¾ããç®æã World Finalsï¼
*1:æå ã§ãã§ãã¯ããã»ããç°¡åã ã¨æããã§ãããã©ããâ¦â¦
*2:ä»ã«ã domserver ã¨éä¿¡ããã¦tesctase_run.sh ãå®è¡ãã judgedaemon.main.php ãé¢ç½ãã¨ããã°é¢ç½ãã§ããããã¾ãæ¬è³ªçãªæ å ±ã¯ãªãã£ãããã«ä»åã¯çç¥ãã¾ã
*3:ãªã½ã¼ã¹ã®å¾å¦çãªã©ã¯é¤ãã¦ãã¾ã
*4:AtCoderã¯ãã§ã«pragmaã¨ã»ã¼åçã®æé©åãè¡ããã¦ããããã« pragma ãªãã¯çç¥
*5:å®éã¯ã¸ã£ãã¸ã®æºåãªã©ã¯æ¨ªæµã®æ¹ã ãè¡ã£ã¦ãã ãã£ã¦ããããã§ããæ¬å½ã«ãããã¨ããããã¾ãããã®ãããPDF ãªã©ãç°å¢ã«åããã£ããã®ã¨ãªã£ã¦ãã¾ããã