ã¿ã€ãã©ã€ã¿ãŒã«ç¿ã眮ããŠãåžžã«èª€ã£ãŠããŒãããããšãé
ããæ©ãããæŠäºãšå¹³åããã¿ãŽã©ã¹ã®äœåã®ã³ã¬ã¯ã·ã§ã³ããããŠä»èªãã§ããèšäºãå°å·ããããšã¯èª°ããç¥ã£ãŠããŸãã

é©ãã¹ãäºå®ã§ãããããã«è峿·±ãã®ã¯ãç¹å®ã®ããã¹ããå
¥åããã®ã«ã©ããããæéããããããçè§£ããããšããããšã§ãã äœåãªãã©ã¡ãŒã¿ãŒïŒç¿ã«ããã¿ã€ãã³ã°ã®é床ïŒãé§åãããªãããã«ã質åã«å¯Ÿããçããæ¢ããŸããããŒã¹ãããŒã¯ã¯å¹³åã§äœåããããŸããã æååãabcãã®æ¹ããaaaãããã¯ããã«ç°¡åã«å
¥åã§ããããšã¯æããã§ããïŒ ãã®æçš¿ã¯ãã®åé¡ã解決ããããšã«å°å¿µããŠããŸãã éäžã§ã颿°ã®ãã¬ãã£ãã¯ã¹ãšãã®ããããã£ã«ã€ããŠèª¬æããŸãã
ãµã«ãç¹å®ã®ããã¹ãã®å
¥åã«è²»ããæéã¯ãã©ã³ãã 倿°ã§ããããšãæããã§ãã ãããã£ãŠãåœŒå¥³ã®æ°åŠçãªæåŸ
ã«ã€ããŠå°ããããšã¯è«ççã§ãã
åé¡ã®æ£åŒãªå£°æ
倧æåã®ã©ãã³æåïŒ "a"-"z"ïŒã§æ§æãããæååsãäžããããŸãã ããããèŠã€ããå¿
èŠããããŸãã ãã¹ãŠã®æåãå¹³çã«å
¥åãããå ŽåïŒç¢ºç
1/26 ïŒãæååså
šäœãå
¥åãããåã«ãã©ã³ãã ãªããŒã¹ãããŒã¯ã®åæ°ãåŸ
æ©ããŸãã
決å®ã³ãŒãããããªãæ©èœãããã®PiïŒïŒé¢æ°ãäœã§ããããçè§£ããã«ã¯ãèšäºå
šäœãèªãå¿
èŠããããŸã:(ã
string s; //, int n = s.length(); vector<int> p = Pi(s); vector<long double> pow(n+1); pow[0] = 1; int i; for (i = 1; i <= n; i++) { pow[i] = pow[i-1]*26; } long double ans = 0; for (i = n; i>0; i = p[i-1]) { ans += pow[i]; } cout << ans;
ãã¬ãã£ãã¯ã¹æ©èœ
ãã®æ©èœã¯ãåé¡ã®è§£æ±ºã«åœ¹ç«ã¡ãŸãã 颿°ãã¬ãã£ãã¯ã¹ã¯ãæååå
ã®éšåæååãèŠã€ããæåãªã¢ã«ãŽãªãºã ïŒ
KMPã¢ã«ãŽãªãºã ïŒã®ããã«ãDãKnutãšM. PrattïŒããã³D. Morrisã«é¡äŒŒïŒã«ãã£ãŠå°å
¥ãããŸããã æåå
sã®ãã¬ãã£ãã¯ã¹é¢æ°ã¯ãæé·ã®ãã€ãã£ãæååãã¬ãã£ãã¯ã¹ã®é·ããè¿ããŸããããã¯ããã®ãµãã£ãã¯ã¹ã§ããããŸãã
ãã¬ãã£ãã¯ã¹ãšãµãã£ãã¯ã¹æ«å°Ÿããããã€ãã®æåãç Žæ£ããå Žåããã¬ãã£ãã¯ã¹ã¯è¡ã®å
é ã«ãããŸããã ãããã£ãŠãè¡ãabaãã«ã¯4ã€ã®ãã¬ãã£ãã¯ã¹ããããŸããããïŒç©ºè¡ïŒããaãããabãããabaãã§ãã æ¥å°ŸèŸã¯åãã§ãããæåã¯å
é ããåé€ãããŸãã ãã ããäžéšã®æ¥å°ŸèŸãšæ¥é èŸã¯äžèŽããå ŽåããããŸãã æååãabaãã«ã¯ãããããaãããabaãã®3ã€ã®æ¥é èŸæ¥å°ŸèŸããããŸãïŒ4çªç®ã®æ¥å°ŸèŸãbaãã¯æ¥é èŸãabããšäžèŽããŸããïŒã ãµãã£ãã¯ã¹ãŸãã¯ãã¬ãã£ãã¯ã¹ã¯ãè¡å
šäœããçãå Žåã«é©åãšåŒã°ããŸã ã
æ£åŒã«èšãã°ïŒ %20%3D%20max%5C%7B%20k%20%5C%2C%7C%5C%2C%200%5Cle%20k%20%3C%20%7Cs%7C%2C%5C%2C%20pref_k(s)%20%3D%20suf_k(s)%5C%7D%20)
ããã§ã pref k ïŒsïŒã¯æååsã®é·ãkã®ãã¬ãã£ãã¯ã¹ã§ããã suf k ïŒsïŒã¯æååsã®é·ãkã®ãµãã£ãã¯ã¹ã§ãã
ILCã¢ã«ãŽãªãºã ãšä»ã®ã¢ããªã±ãŒã·ã§ã³ã®äž¡æ¹ã§ãç¹å®ã®æååã®ãã¹ãŠã®ãã¬ãã£ãã¯ã¹ã«å¯ŸããŠãã¬ãã£ãã¯ã¹æ©èœãããã«æ€èšããæ¹ãã¯ããã«äŸ¿å©ã§ãã ã¯ããæãããã§ãã-ãã¬ãã£ãã¯ã¹ããšã«ããµãã£ãã¯ã¹ã®ãµãã£ãã¯ã¹ãšäžèŽããæå€§ã®ã«ã¹ã¿ã ãã¬ãã£ãã¯ã¹ãèŠã€ããå¿
èŠããããŸãã ãããå®éã«ã¯ããã¹ãŠãç°¡åã§ãã
ãã®ãããªæ¡åŒµãã¬ãã£ãã¯ã¹é¢æ°ã¯ãåçŽãªèšç®ãããèšç®ãç°¡åãªãããäž»ã«åœ¹ç«ã¡ãŸãã
ã 以äžã®å€
s = "ababac"ã®å Žåã
kïŒ1 2 3 4 5 6
sïŒã¢ããã¯
PïŒiïŒïŒ0 0 1 2 3 0
èšç®é¢æ°ã®ãã¬ãã£ãã¯ã¹
èšç®ã³ãŒã vector<int> Pi(string s) { int n = s.length(); vector<int> p(n); p[0] = 0; for (int i = 1; i < n; i++) { int j = p[i-1]; while (j > 0 && s[i] != s[j]) { j = p[j]; } if (s[i] == s[j]) j++; p[i] = j; } return p; }
颿°ãã¬ãã£ãã¯ã¹ã®ç°¡åãªOïŒNïŒèšç®ã¯ã2ã€ã®åçŽãªèŠ³æž¬ã«åºã¥ããŠããŸãã
ïŒ1ïŒäœçœ®kã®æ¥é èŸæ¥å°ŸèŸãååŸããã«ã¯ãäœçœ®k-1ã®ããçš®ã®æ¥é èŸæ¥å°ŸèŸãåããäœçœ®kã®èšå·ã®æåŸã«è¿œå ããå¿
èŠããããŸãã
ïŒ2ïŒé·ãnã®æååsã®ãã¹ãŠã®æ¥å°ŸèŸæ¥é èŸã¯ã次ã®ããã«ååŸã§ããŸãã
次ã®å€ã0ã«ãªããŸã§ç¶ããŸãããã®ããããã£ã¯ããabacabaãè¡ã§ç¢ºèªã§ããŸãã ããã«
ãããã¯ãã¹ãŠã®ãã¬ãã£ãã¯ã¹ãšãµãã£ãã¯ã¹ïŒãabaãããaããããïŒã«å¯Ÿå¿ããŸãã ããã¯ããã¬ãã£ãã¯ã¹ã®æå€§ãµãã£ãã¯ã¹ã®é·ãã
ã æ¬¡ã®ãã¬ãã£ãã¯ã¹ãµãã£ãã¯ã¹ã¯çããªããŸãã ãã ããæåã®ãã¬ãã£ãã¯ã¹ãµãã£ãã¯ã¹ã¯è¡sã®å
é ãšæ«å°Ÿã®äž¡æ¹ã«ãããããæ¬¡ã®ãã¬ãã£ãã¯ã¹ãµãã£ãã¯ã¹ã¯æåã®ãã¬ãã£ãã¯ã¹ãµãã£ãã¯ã¹ã®äžã§æãé·ããã¬ãã£ãã¯ã¹ãµãã£ãã¯ã¹ã«ãªããŸãã
ãããã£ãŠãäœçœ®iã®é¢æ°æ¥é èŸãæ§ç¯ããã«ã¯ãåã®äœçœ®ã®é¢æ°æ¥é èŸã®å€ãããæ¥å°ŸèŸãæ°ããæåã§ç¶ããæ¥é èŸã«ãªããŸã§ç¹°ãè¿ãã ãã§ååã§ãïŒãã®ãããæ°ããæåã1ã€ã ããã§ãã¯ããå¿
èŠããããŸãïŒã ãã®ãããªã¢ã«ãŽãªãºã ã¯ç·åœ¢æéã§å®è¡ãããŸããããã¯ã颿°ã®ãã¬ãã£ãã¯ã¹ã®å€ãæ¯åæå€§1å¢å ããããã nåä»¥äžæžå°ããããšã¯ã§ããªãããããã¹ããããã«ãŒããåèšnå以äžã§å®è¡ãããããšãæå³ããŸãã
KMPã¹ããŒããã·ã³
åé¡ã解決ããããã«å¿
èŠãªæ¬¡ã®æ°åŠçãªããžã§ã¯ãã¯ãç¹å®ã®æåå
sã§çµããè¡ãåãå
¥ããæéç¶æ
ãã·ã³ã§ãã ãã®ãªãŒãããã³ã¯ãããŸãç¥ãããŠããªãå¥ã®Knuth-Moriss-Prattã¢ã«ãŽãªãºã ã®ä¿®æ£ã§äœ¿çšãããŸãã ãã®ããŒãžã§ã³ã®ã¢ã«ãŽãªãºã ã§ã¯ãç¹å®ã®è¡ïŒãã³ãã¬ãŒãïŒã§çµãããã¹ãŠã®è¡ãåãå
¥ããç¶æ
ãã·ã³ãæ§ç¯ãããŸãã æ¬¡ã«ãããã¹ãæååããã·ã³ã«éä¿¡ãããŸãã ãã·ã³ãæž¡ãããããã¹ããåãå
¥ãããã³ã«ããã³ãã¬ãŒãã®æ¬¡ã®åºçŸãæ€åºãããŸãã ã¿ã€ãã©ã€ã¿ãŒã®èåŸã«ããç¿ã®åé¡ã解決ããã®ã«åœ¹ç«ã€ã®ã¯ãã®ãã·ã³ã§ãã
æéç¶æ
ãã·ã³ãšã¯ã¹ããŒããã·ã³ã¯ãããçš®ã®å
éšç¶æ
ãæã€ããã¯ã¹ãšããŠæ³åããã®ãæãç°¡åãªæ°åŠçãªããžã§ã¯ãã§ãã æåã¯ãããã¯ã¹ã¯åæç¶æ
ã§ãã ããã¯ã¹ã«ã¯ãäžåºŠã«1æåãã€è¡ãå
¥åã§ããŸãã åã·ã³ãã«ã®åŸãçŸåšã®ç¶æ
ãšå
¥åãããã·ã³ãã«ã«å¿ããŠãããã¯ã¹ã®ç¶æ
ãå€ãããŸãã ãŸããäžéšã®ç¶æ
ã¯è¯å¥œã§ãïŒæ°åŠçšèªã¯æçµç¶æ
ã§ã ïŒã 圌ãã¯ããã®æååãæåããšã«äžããåŸããã·ã³ãè¯å¥œãªç¶æ
ã«ããå ŽåããªãŒãããã³ã¯æååãåãå
¥ãããšèšããŸãã
å®å®è¹ã決å®ããã«ã¯ãåæç¶æ
ãè¯å¥œãªç¶æ
ãããã³é·ç§»é¢æ°ã決å®ããå¿
èŠããããŸã-ç¶æ
ãšã·ã³ãã«ããšã«ããªãŒãããã³ãå
¥ãæ°ããç¶æ
ãæå®ããå¿
èŠããããŸãã ãªãŒãããã³ãå®å
šãªæ¹åã®ã°ã©ããšããŠæç»ãããšäŸ¿å©ã§ãããã®å Žåãé ç¹ã¯ç¶æ
ã§ãããåãšããžã«1ã€ã®ã·ã³ãã«ã®ã¿ãæžã蟌ãŸããŸãã åé ç¹ã«ã¯ãåã·ã³ãã«ã«æ£ç¢ºã«1ã€ã®ãšããžãå¿
èŠã§ãã æ¬¡ã«ãè¡ãåŠçããã«ã¯ããã®è¡ã®æåããšããžã«æ²¿ã£ãŠç§»åããã ãã§ãã ãã¹ãæçµç¶æ
ã§çµäºããå Žåããã·ã³ã¯ãã®ãããªæååãååŸããŸãã
ãã®ãªãŒãããã³ãäœæããã«ã¯ããã§ã«ç¥ã£ãŠãããã¬ãã£ãã¯ã¹é¢æ°ã䜿çšããŸãã
ãã·ã³ã«ã¯0ããnãŸã§ã®çªå·ãä»ããããn + 1ã®ç¶æ
ããããŸãã ç¶æ
kã¯ãé·ãkã®ãã¿ãŒã³ã®ãã¬ãã£ãã¯ã¹ãæã€æåŸã«å
¥åãããkæåã®äžèŽã«å¯Ÿå¿ããŸãïŒæååãabacããæ€çŽ¢ããå ŽåãæåŸã®çŸåšã®ããã¹ãã«é¢å¿ããããŸãïŒãabacãããabaãããabãããaããŸãã¯whatããã¯ã1æåã远å ããåŸã«åãçµæãåŸãã®ã«ååã§ãïŒã ç¶æ
0ã¯åæç¶æ
ã§ãç¶æ
nã¯æçµç¶æ
ã§ãã æ··ä¹±ãçããå ŽåããããŸããããšãã°ããzzzababããšããè¡ã«èªåçã«ãã£ãŒãããããababcccããšããçšèªã§ã¯ãç¶æ
2ãš4ã®äž¡æ¹ãéžæã§ããŸãããã ããå
¥åããããã¹ãã«é¢ããå¿
èŠãªæ
å ±ã倱ããªãããã«ãåžžã«æé«ã®ç¶æ
ãéžæããŸãã
KMPã¹ããŒããã·ã³ã®äŸæååãababacãã®ãã·ã³ã¯æ¬¡ã®ãšããã§ãã ããšãã°ãã¢ã«ãã¡ãããã¯ãaãããcãã®æåã®ã¿ã§æ§æãããŸãã æç¢ºã«ããããã«çµã¿åããããå¹³è¡ãªãã å®éãåãšããžã«å¯Ÿå¿ããæåã¯1ã€ã ãã§ãã åæç¶æ
ã¯0 ãæçµç¶æ
ã¯6ã§ãã

ç¶æ
0ããç¶æ
6ãžã®ãã¹ã¯ããããã©ãã»ã©å°é£ã§ãã£ãŠããæååãababacãã§çµããããšã確èªããã®ã¯ç°¡åã§ãã éã«ããã®ãããªãã¹ã¯å¿
ãç¶æ
6ã§çµäºããŸãã
ã¹ããŒããã·ã³æ§ç¯ã³ãŒã string s; // . int n = s.length(); vector< vector<int> > nxt(n+1, vector<int>(256)); // nxt[][] == vector<int> p = Pi(s); // . . nxt[0][s[0]] = 1; // 0 0. for (int i = 1; i <= n; i++) { for (int c = 0; c < 256; c++) nxt[i][c] = nxt[p[i-1]][c]; //p[] , -1 if (i < n) nxt[i][s[i]] = i+1; }
é·ç§»ã®æ§ç¯æ¹æ³ã«æ³šæããŠãã ããã ç¶æ
iããã®é·ç§»ãèšç®ããã«ã¯ã2ã€ã®ãªãã·ã§ã³ãæ€èšããŸãã æ°ããæåãs [i]ã®å Žåãé·ç§»ã¯ç¶æ
i + 1ã«ãªããŸãã ããã§ã¯ãã¹ãŠãæããã§ããiæåã«äžèŽããã£ãå Žåãæååsããæ¬¡ã®æåã远å ãããšãäžèŽã®é·ãã1å¢å ããŸãã ã·ã³ãã«ãäžèŽããªãå Žåãç¶æ
ããé·ç§»ãåã«ã³ããŒããŸã
ã ãªãã§ïŒ ãã®å Žåã®é·ç§»ã¯ãçªå·â€iã®ç¶æ
ã«æ£ç¢ºã«ãªããŸãã ãã®ãããç§»è¡åŸãå
¥åããããã¹ãã«é¢ããæ
å ±ã®äžéšãå¿ããŸãã å
ã«é²ãåã«ãããè¡ãããšãã§ããŸãã æ¶å»ã§ããæäœéã¯ãå®éã«ã¯ç¶æ
ãiã§ã¯ãªããµããããããšã§ããã
ã äžèšã®äŸã®ããã«ãããã¹ãããababããŸãã¯ãabãã§çµãããšèããããšãã§ããŸãã ãababãããã®ç§»è¡ããªãå Žåã¯ããabãããã®ç§»è¡ã䜿çšã§ããŸãã
解決ç
ããã§ã¿ã¹ã¯ã解決ããæºåãã§ããŸããã
stringã®KMPãªãŒãããã³ãæ§ç¯ããŸãã ãã¹ãŠã®æåã¯ã©ã³ãã ã«ç¿ã«ãã£ãŠå
¥åããããããã·ã³ãã«èªäœã¯éèŠã§ã¯ãªããé·ç§»ã°ã©ãã®ãšããžã®ã¿ãéèŠã§ãã åé¡ã¯æ¬¡ã®ããã«åå®åŒåã§ããŸããããããèŠã€ããŸãã ç¶æ
0ããç¶æ
nã«å°éãããŸã§ã®ã©ã³ãã ãŠã©ãŒã¯ã§é·ç§»ã®æ°ãåŸ
æ©ããŸãã
ãã®å®åŒåã§å€æ°ãå°å
¥ããããšã¯è«ççã§ãïŒ E k ã0â€kâ€n-ç¶æ
nã«éãããŸã§ã®é·ç§»ã®æ°ã®æåŸ
ã E 0ãå
ã®åé¡ã®çãã«ãªããŸãã Zãæå¹ãªæåïŒã¢ã«ãã¡ãããïŒã®ã»ããã«ããŸãã é£ç«æ¹çšåŒãäœæã§ããŸãã
)
)
æ¹çšåŒïŒ1ïŒã¯ãç¶æ
nã«å°éãããšã©ã³ãã ãŠã©ãŒã¯ã忢ããããšãæå³ããŸãã
ä»ã®ç¶æ
ã§ã¯ãäœããã®é·ç§»ãè¡ããããããåŒïŒ2ïŒã«çšèª1ãååšããŸãã 2çªç®ã®é
ã¯ããã¹ãŠã®å¯èœãªãªãã·ã§ã³ã®åèšã«ãããã®ãªãã·ã§ã³ã®ç¢ºçãæãããã®ã§ãã ãã¹ãŠã®ç¢ºçã¯åãã§ãããããã£ãŠãåèšã®ãµã€ã³ãšããŠåãåºãããŸãã
OïŒn ^ 3ïŒã«ã¯æ¢ã«åé¡ã®è§£æ±ºçããããŸããæ§ç¯ãããç·åœ¢æ¹çšåŒç³»ã¯ãã¬ãŠã¹æ³ã«ãã£ãŠè§£ãããšãã§ããŸãã ãããããã®ã·ã¹ãã ãå°ãèŠãŠã颿°ã®æ¥é èŸãããããšãèŠããŠããã°ãã€ãŸãã解決çã¯ã¯ããã«ç°¡åã§é«éã§ãã
æéç¶æ
ãã·ã³ã®æ§ç¯ãæãåºããŠãã ããã ïŒç°¡åã«ããããã«ã
ç§ã¯ã¡ããã©äœ¿çšããŸã
ïŒ ç¶æ
kããã®é·ç§»ã¯ãç¶æ
ããã®é·ç§»ãšã»ãŒäžèŽããŸã
ã é·ç§»ã®éãã¯ãã·ã³ãã«s [k-1]ã®ã¿ã§ãã ãããã£ãŠãç¶æ
kããã³ç¶æ
ã®æ¹çšåŒïŒ2ïŒã®å³èŸº
1ã€ã®çšèªã®ã¿ãç°ãªããŸãã ã®æ¹çšåŒã§
䟡å€ããã
ã®ä»£ããã«
kã®æ¹çšåŒã§ã ããã«ã nxt [k] [s [k-1]] = k + 1ã§ãã ãã®äºå®ã䜿çšããŠãæ¹çšåŒïŒ2ïŒãæžãæããããšãã§ããŸãã
)
次ã«ããã1ã€èгå¯ããå¿
èŠããããŸãã ããã£ã
ã€ãŸã ç¶æ
ã®é¢æ°æ¥é èŸãèŠã€ããã«ã¯ãåã®ç¶æ
ãã颿°æ¥é èŸãååŸããããããæ¬¡ã®ç¶æ
ã«ã€ãªããèšå·ããã©ãå¿
èŠããããŸãã
確ãã«ãç¶æ
ãèæ
®ãããš
ãããã¯æås [k-1]ã§çµããè¡ã«å¯Ÿå¿ããŸãã ãã®ããããã®ã·ã³ãã«ã«ã¯é·ç§»ããããŸãã ãã®ãããªé·ç§»ãååšããããçªå·<kãæã€æå€§ã®ç¶æ
ãèããŸãã ã·ã³ãã«s [k-1]ã®åŸã«äœããã®ãµãã£ãã¯ã¹ãä»ããå Žå
ãã®åŸãé·ç§»åã«æ¥å°ŸèŸã§ãã
ã ããã¯å³ç«¯ã®ãã®ãããªç¶æ
ã ã£ããããæå€§ãã¬ãã£ãã¯ã¹ãµãã£ãã¯ã¹ã«å¯Ÿå¿ããŸãã
ãã€ãŸãæ°åãããããšãæå³ããŸã
ã ã ããããã®é©ãã¹ãæçšãªäºå®ãåŸãã
次ã«ãïŒ3ïŒã¯æ¬¡ã®ããã«å€æãããŸãã
ãŸãã¯å¥ã®æ¹æ³ã§ïŒ
çå·ã®äž¡åŽã«ã¯è² ã®æ°ããããŸãïŒ kãå€ãã»ã©E kãå°ãããªãããšãè«ççã§ãïŒã äž¡åŽã«-1ãæããŸãã
)
ãã ããïŒ4ïŒã¯k> 0ã«å¯ŸããŠã®ã¿æå¹ã§ãã k = 0ã®å ŽåãåŒïŒ2ïŒãæç€ºçã«èšè¿°ã§ããŸãã é·ç§»ã¯ç¶æ
1ã«ã€ãªãããæ®ãã¯ãã¹ãŠç¶æ
0ã«æ»ããŸã ã
ããã§ãå·ŠåŽã®ãã¹ãŠã®å€æ°ãåéããæ¹çšåŒã«| Z |ãæããŸãã ãããŠäº€æ
ïŒ1æåã«ã¯ç©ºã§ãªããã¬ãã£ãã¯ã¹ããªãããã1æåã®ãã¬ãã£ãã¯ã¹é¢æ°ã¯åžžã«0ã§ãïŒïŒ
)
æ¹çšåŒïŒ1ïŒãïŒ4ïŒãããã³ïŒ5ïŒãç¹°ãè¿ãããšãã§ããŸããããã¯ãããããæ¹çšåŒãè§£æããã·ã¹ãã ãæ§æããããã§ãã
2çªç®ã®å·ŠåŽã®æåã®æ¹çšåŒãk = 1ã§çœ®ãæã ãæ¬¡ã«k = 2ãªã©ã§çœ®ãæããŸã ã ç§éã¯åŸãïŒ
)
ããã§ã解決çã¯ã»ãŒæºåã§ããŸãããä»ã k = nã«ã€ããŠïŒ6ïŒãæ€èšãã
ç§éã¯åŸãïŒ
ïŒ6ïŒã®ãã®å€ã
-ç§éã¯åŸãïŒ
åæ§ã«ã以äžãååŸããŸãã
ãããã£ãŠã次ã®åŒãååŸãããŸã§ç¶è¡ã§ããŸãã
ãã€ãã§ã«ãåé¡ã«å¯Ÿããçãã§ãã 瀺ã
è¡ã«kåé©çšããã颿°
ãã®åŸïŒ
)
ãããã£ãŠãOïŒnïŒã®åé¡ã®è§£æ±ºçãåŸãŸãããæååsã®é¢æ°ã®ãã¬ãã£ãã¯ã¹ãäœæãã 0ã«éãããŸã§nããç¹°ãè¿ããåæã«åºŠ| Z |ãå ç®ããŸãã ãã¬ãã£ãã¯ã¹ã®çŸåšã®é·ããšçããã ããã¯ãèšäºã®åé ã§ç€ºãããŸãã«ãã®è§£æ±ºçã§ãã
ïŒ*ïŒãèŠããšãæååãaaaãããabcããããå
¥åãé£ããçç±ãæããã«ãªããŸãããaaaãã§ã¯3çªç®ã®å埩ã®ã¿
ãŒãã§ããã2è¡ç®ã«ã¯éåžžãæ¥å°ŸèŸã«çãã空ã§ãªãæ¥é èŸã¯ãããŸããã
ããã«ãŒãã«ãªããŸãã
åè
ãã¬ãã£ãã¯ã¹é¢æ°ãšILCãã·ã³ã¯ãæååãæäœããããã®éåžžã«äŸ¿å©ãªããŒã«ã§ãã 芪æãªãèªè
ãèå³ãæã£ãŠãããªããç§ã¯ä»ã®åé¡ã®è§£æ±ºçãèŠã€ããããšãã§ããŸãã PMã®ã¿ã€ããã¹ã«ã€ããŠæããŠãã ãããããããšãã
æŽæ°ïŒ
ãŸãã HabrÃ©ã®æ°åŒãå«ãèšäºãäœæããçŽ æŽããããµãŒãã¹ïŒ https://habrahabr.ru/post/264709/ ïŒã«æè¬ããŸã ã 圌ãããªãã£ããããã®èšäºã¯ãªãã£ãã§ãããã ããã«ããã«ã€ããŠæžãã®ãå¿ããã®ã¯æ®å¿µã§ãã
第äºã«ãå€ãã®ã³ã¡ã³ããŒã¿ãŒã¯åœŒãã®çŽæã«æ··ä¹±ããŠããŸãã å®çã§ã¯ãããã¯ãã°ãã°èµ·ãããŸãã ã¯ããæåã«åãé·ãã®ããã¹ããå
¥åãã確çã¯åãã§ãã ã¯ããåãé·ãã®ããã¹ãã®åºçŸé »åºŠã¯ãç¡éã®ã©ã³ãã ããã¹ãã§åãã§ãã ããã¯ãã¹ãŠçå®ã§ããããããã®äºå®ããã æåã®è¡ãåºçŸããåã®æåæ°ã®äºæ³ãåãã«ãªããšããããšã«ã¯ãªããŸããã éããŸãåæ§ã§ããç¡éããã¹ãã®è¡ãhhããè¡ãhkããããåŸã«è¡šç€ºããããšããäºå®ãããã«ãžãã¯é»ã®åŸã«èµ€ã«çœ®ãããã¹ãã§ã¯ãããŸããã
2ã€ã®è¡ãhhããšãhkãã衚瀺ããããŸã§ãæã®æåŸ
ãæ°ããŸãããã æåŸ
å€ã¯ããã¹ãŠã®iã®åèšã§ããã€ãŸãã iæåã®æååãåããŠå
¥åãã確çã¯iã§ãã 倪åã®ãã¬ãŒãºã¯ãæåã«å
¥åããæåŸã®æåãæ€çŽ¢ã«äžèŽããããšãæå³ãïŒãã®ç¢ºçã¯äž¡æ¹ã®è¡ã§åãã§ãïŒã2çªç®ã«ãæ€çŽ¢æååãæåã®i-2æåéã§çºçããŸãã ã ãã®2çªç®ã®èŠå ã¯ãåç·ããšã«ç°ãªããŸãã è¡ãèŠã€ãããªã確çã¯ãåã«ãã®è¡ãå«ãŸããŠããªããã¹ãŠã®ããã¹ãã®æ°ãããã®é·ãã®ãã¹ãŠã®ããã¹ãã®æ°ã§å²ã£ããã®ã§ãã
ããã§éèŠãªã®ã¯ãæååãhkããå«ãŸãªãé·ãkã®è¡ãåèšk + 1 ïŒãk ... khãããk ... kchãããk ... kchchãããk ... kchchchãã...ããkch ... hãããã³ã h ... hãã ããã¯ãã·ã³ãã«ãhãã®åŸã«ã¯ãhãããååšã§ããªãããã§ãã
æååãhhããå«ãŸãªãé·ãkã®ãã¬ã€ã³ã¯ãã¯ããã«å€§ãããªããŸããã€ãŸããF k + 1-æ°åk + 1ã®äžã®ãã£ããããæ°ïŒãããã¯ãæ°å1ã1ã2ã3ã5ã8ã13ã...ã§ããåã®2ã€ã®åèšïŒã ããšãã°ã k = 2ã®å Žåã3è¡ã¯ãkkãããkchãããhkãã«ãªããŸãã ãããã®æ°å€ã¯éåžžã«æ¥éã«æé·ãããããæååãkkãã®æåŸ
å€ã®ãã¹ãŠã®çšèªã¯ã確çãé«ããªãããããã倧ãããªããŸãã
æ°åã®ã¯ãªãã¯ã§åããŠããã¹ããå°å·ãã確çã¯ãããã¹ãã®æåãšéäžã§äžåºŠãããã¹ããå°å·ããªã確çã«äŸåããããšã«æ³šæããŠãã ããã ãã®ç¢ºçã¯ãç¹å®ã®è¡ãå«ãŸãªãè¡ã®æ°ã«æ£æ¯äŸããŸããããã³ãã¬ãŒãã«ãã£ãŠç°ãªããŸãã
ç¹°ãè¿ãã«ãªããŸãããããã¯ç§ãæãã€ãããã®ã§ã¯ãªããéåžžã«çŽæçã§ã¯ãããŸããããããã¯ããç¥ãããäºå®ã§ãã ããšãã°ããã®èšäºãèŠãŠãã ããïŒã¢ãªã¹ãšããã«é¢ããã¿ã¹ã¯ãæ¢ããŠãã ãã -4段èœïŒïŒ https : //habrahabr.ru/post/279337/