
ã就掻æŠç¥#9ãæºç¹ã¯çµ¶å¯Ÿã«çããªãSPIãšã³ãŒãã£ã³ã°ãã¹ããæçã§çªç Žãããå²ãåãããã¯ã
ããã«ã¡ã¯ã人çã©ã€ãã©ãªã§ãã
ååã®èšäºã§ããµããŒã€ã³ã¿ãŒã³ã«20瀟é£ç¶ã§èœã¡ãã®ã¯ãSPIã®ããŒããŒãç°åžžã«é«ãã£ãã ãããšãã就掻ã®ãã°ã«ã€ããŠã話ãããŸããã
ãšã¯ãããç§ä»¥éã®æ¬éžèã«é²ãã°ãçµå±ã¯ãSPIïŒé©æ§æ€æ»ïŒããšãã³ãŒãã£ã³ã°ãã¹ãããšããçèšè©Šéšã®å£ãç«ã¡ã¯ã ãããŸãã
ããã§å€ãã®å°±æŽ»çãé¥ãã®ãããå®ç§äž»çŸ©ã®çœ ãã§ãã
ååãSPIã®å¯Ÿçæ¬ãäœåšãããŠãç«¶æããã°ã©ãã³ã°ã®é£åãè§£ããããã«ãªãããšãèšå€§ãªæéãæº¶ãããŠããŸããŸãã
çµè«ããèšããŸããçèšè©Šéšã§æºç¹ãçãã®ã¯ãä»ãããããŠãã ããã
ä»åã¯ãSPI匱è ã ã£ãç§ãã任倩å ãæ±èãªã©ã®å€§æãšã³ã¿ã¡ã»ITäŒæ¥ã®Webãã¹ããé£ãªãçªç Žãããã¿ã€ãéèŠã®å²ãåãããã¯ãã解説ããŸãã
â ïž èªãåã®æ³šæç¹
â»æ¬èšäºã§ã¯ãããããããSPIããšããèšèã䜿çšããŠããŸãããå®éã®æ¡çšçŸå Žã§ã¯çæç®±ãGABãèªç€Ÿå¶äœã®ãªãªãžãã«ãã¹ããªã©æ§ã
ãªåœ¢åŒãååšããŸãã
â»ãæºç¹ãé«åŸç¹ãåãå¿
èŠã¯ãªãããšè§£èª¬ããŸãããå€è³ç³»ã³ã³ãµã«ãã£ã³ã°ãã¡ãŒã ãæ¿åºç³»æ©é¢ãªã©ã¯éã«ãæºç¹è¿ãåããŠåœããåãã®äžçã«ãªããŸããæ¬èšäºã¯ãããŸã§ãäžè¬çãªå€§æã¡ãŒã«ãŒã»ITã»ãšã³ã¿ã¡äŒæ¥ãªã©ãå¿æããæ¹åãã®æŠç¥ãšããŠãèªã¿ãã ããã
1. SPIã¯ãè¶³åãåé¿ã®ã²ãŒã ãã§ãã
SPIã¯ãäŒæ¥ããããã°ãå°é ã®è¯ãããæž¬ããšããããããæ¥µç«¯ã«åºç€åŠåãäœãåŠçã颿¥åã«åŒŸãããã®ãã£ã«ã¿ãŒïŒè¶³åãïŒãã§ãã æ¬éžèã§ã¯ãããŒããŒïŒ6ã7å²çšåºŠïŒããè¶ ããã°ãããšã¯ESãšé¢æ¥ã§å€æããããšããäŒæ¥ãå§åçã«å¢ãããããã90ç¹ãåãåªåãã¯ã³ã¹ããææªã§ãã
ç§ã¯è±èªããšã«ããèŠæã§ãããããè±èªã¯çæéã§äŒžã³ãªãããšå²ãåã£ãŠæšãŠãŸãã(â»ãããã䜿ããªãäŒç€Ÿãå€ãã§ã)ã ãããŠãå¯Ÿçæ¬ãæåããè§£ãã®ã§ã¯ãªããé »åºãã¿ãŒã³ã®æèšãã«åŸ¹ããŸããã
éèšèªã®ãã¿ãŒã³ïŒ ãæšè«ããæçç®ããå Žåã®æ°ã»ç¢ºçããªã©ãå ¬åŒãè§£ãæ¹ã®ãããŒã決ãŸã£ãŠãããã®ã ããæ°ãã¿ãŒã³å©ã蟌ãã
èšèªã®ãã¿ãŒã³ïŒ ãäºèªã®é¢ä¿ããèªå¥ã®çšæ³ããªã©ã®æ§é ãã¿ãŒã³ãæèšããã
æ¯æ¥ã³ãã³ãå匷ããããã§ã¯ãããŸãããã宿ãã¹ãåã«ãããåºãåé¡ã®è§£ãæ¹ã ããè©°ã蟌ãããšããäžå€æŒ¬ãã¬ãã«ã®å¯Ÿçã§ãã
çµæãšããŠããã®ãé©åœãªè©°ã蟌ã¿ãã§ãã任倩å ãã¯ãããšãã倧æäŒæ¥ã®æ¬éžèã®SPIã¯ééããŸãããããããå±€ã«ã¯åãŠãªãããè¶³åãã©ã€ã³ã ãã¯è¶ããããšããã©ã€ã³ãèŠæ¥µããããšããæå€§ã®æŠç¥ã§ãã
2. ã³ãŒãã£ã³ã°ãã¹ãã¯ãPaiza Bã©ã³ã¯ããšãC++ã®ãããšãåãã
æ å ±ç³»ããšã³ãžãã¢å¿æã®åŠçãæ©ãŸãããã³ãŒãã£ã³ã°ãã¹ãããããã§ããã¢ã«ãŽãªãºã ã®è¶ é£åïŒSã©ã³ã¯ïŒãè§£ããªããšå€§æã«ã¯åãããªãããšæã蟌ãã§ãã人ãå€ãã§ãããå¹»æ³ã§ãã
å®éãç§ã®Paizaã®å®çžŸã¯ãBã©ã³ã¯æ¢ãŸããã§ãããBã©ã³ã¯ãšããã®ã¯ãã1次å ã»2次å é åã®æäœãããœãŒãã¢ã«ãŽãªãºã ããšãã£ãåºç€çãªåŠçãçµã¿åãããŠæžããå 容ãã§ããã°ã¯ãªã¢ã§ããã¬ãã«ã§ããäŒæ¥åŽãã倩æçãªã³ãŒããã§ã¯ãªãããåºç€ãæ£ç¢ºã«æžãããããèŠãŠããŸãã
ããã§ããã¹ããäžå®ãªäººã®ããã«ãã¿ã€ãè¯ãçªç Žããããã®ãæåŒ·ã®èšèªéžæãšç§äŒã®ãã³ãã¬ãŒãããå ¬éããŸããäºåã®æºåãšèšèªã®ããã¯ãããã ãã§ããã¹ãã®è§£çã¹ããŒãã¯åçã«äžãããè¶³åããäœè£ã§åé¿ã§ããããã«ãªããŸãã
â æ å ±ç³»ã»ã²ãŒã æ¥çå¿æãªããC/C++ã®ãããšãåãã
倧åŠã®ææ¥ã§ãCèšèªããç¿ã£ã人ã¯å€ããšæããŸããããã¹ãã®èšèªéžæã§ã¯ãC++ããéžãã§ãã ããããã ããã¹ãŠãC++ã®é«åºŠãªãªããžã§ã¯ãæåã§æžãå¿ èŠã¯ãããŸããããããŒã¹ã®åŠçãã¡ã¢ãªç®¡çã¯ææ £ããCèšèªã§æžãããœãŒããåçé åãªã©ãèªåã§ãŽãªãŽãªæžããšé¢åãããéšåã ãC++ã®äŸ¿å©ãªæšæºããŒã«ãåŒã³åºããŠäœ¿ããã®ã§ãã
ãããŠãç§ã任倩å ãªã©ã®ã³ãŒãã£ã³ã°ãã¹ããçªç Žããããã«å®éã«äœ¿ã£ãŠããããç§äŒã®ãã³ãã¬ãŒãããå ¬éããŸãããã¹ããå§ãŸã£ããããŸããããå é ã«æžããŠããŸããã
// --- C++ã®äŸ¿å©ãªéå
· ---
#include <iostream> // å
¥åºå (cin, cout)
#include <vector> // é
å (vector)
#include <string> // æåå (string)
#include <algorithm> // äžŠã³æ¿ã (sort), æå€§æå° (max, min)
#include <map> // èŸæž (map)
#include <queue> // ãã¥ãŒ (queue)(BFS/è¿·è·¯æ¢çŽ¢ã§å¿
é )
#include <set> // éè€åé€ã»é«éæ€çŽ¢
// --- æ°åŠã»ç©ç (ã²ãŒã ç³»å¿
é ) ---
#include <cmath> // æ°åŠé¢æ° (sqrt, pow, atan2, abs)
// --- Cèšèªäºæ (念ã®ããæã£ãŠãã) ---
#include <cstdio> // scanf, printf
#include <cstdlib> // abs, atoi
#include <climits> // INT_MAX
using namespace std; // ãstd::ããçç¥ããåªæãã®ãCãšC++ã®ãããšãåãããšãäºåæºåããããã°ããã¹ãã®è§£çã¹ããŒããåçã«äžãããŸããã颿¥ã§ãC++ã®äŸ¿å©ãªæ©èœãšãCã®ã¡ã¢ãªç®¡çã®éããçè§£ããŠããããšãã匷åãªã¢ããŒã«ã«ãç¹ãããŸãã
â¡ éæ å ±ç³»ã»ååŠè ãªãè¿·ãããPythonã
ããããªãããCèšèªã®ãã€ã³ã¿ãªããŠèŠããããªãããå宣èšãé¢åããããããšã«ããæéã§ã¢ã«ãŽãªãºã ã ãæžãããããšããååŠè ãªããè¿·ãããPythonããéžãã§ãã ããã èšè¿°éãå§åçã«å°ãªããçŽæçã«æžããããã³ãŒãã£ã³ã°ãã¹ããšéåžžã«çžæ§ãè¯ãã§ããPythonãéžã¶å Žåãã以äžã®ãã³ãã¬ãŒããæåã«ã³ããããŠãããšäºæ ãé²ããŸãã
# --- Pythonã®äŸ¿å©ãªéå
·ç®± ---
import sys
import math
from collections import deque, defaultdict
import itertools
import heapq
# å
¥åã®é«éåãâ»Pythonã¯æšæºå
¥åãé
ãã®ã§å¿
é
input = sys.stdin.readlinePythonã®å¯äžã®åŒ±ç¹ã¯ãå®è¡é床ã®é ããã§ããæ®éã« input() ã倧éã«äœ¿ããšã¿ã€ã ã¢ãŠãããå±éºããããããå¿ ã sys.stdin.readline ã«çœ®ãæããããŸããªããæžããŠãããŸãããã
3. æµ®ããæéãã颿¥å®ãšæ®ŽãåãæŠåšãã«æè³ãã
SPIãšã³ãŒãã£ã³ã°ãã¹ãããæäœéã®å²ãåããã§ééããããããã§æµ®ããèšå€§ãªæéãäœã«äœ¿ãã®ãïŒ
çãã¯æç¢ºã§ããã颿¥å®ãšçŽæ¥æ®ŽãåããæŠåšãã磚ãããšã«å šæ¯ãããŠãã ããã
éå»ã®ã³ãŒããæŽçããGitHubã«è©³çްãªãREADMEïŒãªããããäœã£ãããã©ãã§èºãããïŒããæžãã
çæAIã䜿ã£ãŠãèªåå²ããåæãã颿¥å®ã®ã©ããªæ·±æãã«ããã¬ãªãã䟡å€èгã®è»žããèšèªåããã
ãããã¯ãSPIã®ç¹æ°ã10ç¹äžãããããããšã³ãžãã¢ããã©ã³ããŒã®éžèã«ãããŠ100åã®åšåãçºæ®ããŸãã
ãããã«
çèšè©Šéšã¯ã就掻ãšããã²ãŒã ã®ãåãªãå ¥å Žåžãã«éããŸããã
SPIã¯ãæºç¹ãã§ã¯ãªããè¶³åãåé¿ããçãã
ã³ãŒãã£ã³ã°ãã¹ãã¯ã倩æããç®æããããBã©ã³ã¯ã®åºç€ããšã説æåãã§åè² ããã
ãã®ãå²ãåãããã§ãã人ã ãããéããã就掻æéã®ãªãœãŒã¹ãã颿¥ããšããæ¬åœã®æŠå Žã«éäžãããããšãã§ããŸãã
ããŠãå ¥å Žåžãæã«å ¥ããããããã人éçžæã®çŽæ¥å¯Ÿæ±ºã§ãã
次åã¯ãç§ã颿¥å®ãä»ã®å°±æŽ»çãã³ã³ãããŒã«ããèªåã«æå©ãªç¶æ³ãäœãåºããã°ã«ãŒããã£ã¹ã«ãã·ã§ã³ãšé¢æ¥ã®çŸå Žã³ã³ãããŒã«è¡ããå±ãããŸãããæ¥œãã¿ã«ïŒ