ABC lessons learned3 - zettsu-t/zettsu-t.github.io GitHub Wiki
ABC 6,8åäœå¶(126..ææ°)ã®Dåé¡ãã ãããè§£ããã®ã§ãããããåŸãæèšããŸãšããŠãããŸãã
ã³ãŒãã¯ãã¡ã
ã²ãŒã çè«ãšããããã¯ã¹æ³ã§ããã
2人ã®åŸç¹å·®ã ãã«æå³ããããåŸç¹å·®ãæ£ãªãå æã®åã¡ãåŸç¹å·®ãè² ãªãåŸæã®åã¡ãåŸç¹å·®ã0ãªãåŒãåããšå®çŸ©ããããã¹ã«ç§»åãããšãã®åŸç¹ãã
- å æãªãçŽ çŽã«ãã¹ã®åŸç¹(+1ãªã+1, -1ãªã-1)
- åŸæãªãå æãåŠäœã«æãããããšèªã¿æ¿ããŠæ£è² ãå ¥ãæ¿ãã(+1ãªã-1, -1ãªã+1)
ãšããŠãå æã¯åŸç¹å·®ãæå€§åãåŸæã¯åŸç¹å·®ãæå°åããããã«ç§»åããã°ããã
ç€é¢ã®å€ã«ã¯ã¿åºããªãããã«ããã®ã ãããã¹ããäžæç§»åããå
ããã¥ãŒã§ç®¡çãããšTLEããã®ã§ããŽãŒã«ãŸã§(ãŸãã¯ã¹ã¿ãŒããã)è·é¢ã
ã³ãŒãã¯ãã¡ã
æšDPããšæã£ããããã§ã¯ãªãã£ãã®ã§è«Šããã
XORè·é¢ãåããšãã«ãæ ¹ããLCAãŸã§ã¯åŸåŸ©ããã®ã§0ã«ãªãããšãèŠæããªãã£ãããããšåããã°ãããããã®ããããç¬ç«ã«èããŠã0ãš1ã®çµãããã€ãæ°ããã°ãããã
ã³ãŒãã¯ãã¡ã
äžã®æ¡ããé çªã«æ±ºããŠããã
- æªæ±ºå®ã®æ¡ã®ãã¡ãæäžäœæ¡ãaãããŠæ®ãã®çµã¿åãããk以äžãªããæäžäœæ¡ãaãããŠæ®ãã®æ¡ã決ãã
- ããã§ãªããã°æäžäœæ¡ãbã«ããŠãkããæ®ãã®æ¡ãåãããçµã¿åãããåŒããŠãããæ®ãã®æ¡ã決ãã
- aãšbã®ã©ã¡ããäžæ¹ãæ®ã£ãŠããªããã°ãæ®ãã¯bã ããŸãã¯aã ãã«æ±ºãŸã
aãšbã®çµã¯
ã³ãŒãã¯ãã¡ã
ãªã€ã©ãŒãã¢ãŒã§ããã
æ ¹1ããDFSã§ãªã€ã©ãŒãã¢ãŒããããæ¢çŽ¢ã§èšªããé ç¹ã®é çª
ã¯ãšãª
-
$D = 0$ ã®ãšãã$U = 1$ ãªãçãã¯1ãããã§ãªããã°çãã¯0ã§ãã -
$D > 0$ ã®ãšãã$W[U] < D$ ãªãçãã¯0ã$W[U] = D$ ãªãçãã¯1ãããã§ãªããã°äžèšãæ€èšããã
é ç¹
ã³ãŒãã¯ãã¡ã
çããæŽæ°
äžå€®å€ãæ±ããã®ã§ã¯ãªããäžå€®å€
- ãã¹ãŠã®æ± ã§äžå€®å€ãè¶
ããèŠçŽ æ°ã
$rank$ 以äžãªãäžå€®å€ãäžãããã - ããããã®æ± ã§äžå€®å€ãè¶
ããèŠçŽ æ°ã
$rank - 1$ 以äžãªãäžå€®å€ãäžãããã
ãš
ã³ãŒãã¯ãã¡ã
ããŒã³ãç¡ãè¡ã¯äœãèµ·ããã1åã®ããŒã³ã§å°éå¯èœãªåã¯é«ã
2åããå¢ããªãã®ã§ãèšç®éã¯
å°éå¯èœãªåã®éåã
-
$S$ ãã$T$ ãé€ã -
$S$ ã«$(v-1, v+1) : v \in T$ ãå ãã
æçµçãª
ã³ãŒãã¯ãã¡ã
å€åããèšç®éãå°ãªãããšãèªã¿åããã
ã³ãŒãã¯ãã¡ã
åŒå°åºãã§ããã«è«Šããã解説éãå®è£ ããã
æéãã€ã¶ãå Žæã¯ã©ãã§ãããã®ã§åºçºç¹ã®ã¿ã§æéãã€ã¶ãã°ããããšããèå¯ã¯ééã£ãŠããã
ã³ãŒãã¯ãã¡ãããã£ãšç°¡æœã«å®è£ ã§ããã
ã³ãŒãã¯ãã¡ã
Union-findæšã¯æšç§»é¢ä¿ã衚çŸã§ããã
AãBã«çœ®ãæããBãCã«çœ®ãæããã°ãAã¯Cã«ãªããšããæšç§»åãæãç«ã€ããªã®ã§AããBãBããCã«çœ®ãæãããšåãã£ãŠãããªããAããCãŸãã¯CããAãžã®çœ®ãæãã¯èŠããªãããããunion-findæšã§ç®¡çãããçãã¯union-findæšã«è¿œå ããåæ°ã§ããã
ã³ãŒãã¯ãã¡ã
çŽæ°å é€åçã ãšã¯åãã£ããã©ãããŠãçããåããªãã®ã§è«Šããã
ã³ãŒãã¯ãã¡ã
ãã®çš®ã®æ°åŠåé¡ã¯æ£è§£çãäœãã®ã§ãç²ãããšå·®ãã€ãã
éå¿ã§å転ããã°ãäºã€ã®å³åœ¢ãäžèŽãããªããã¹ãŠã®ç¹ãéãªããäžæ¹ãåºå®ããã°ãå転è§ã¯ç¹ã®æ°ã ããããªããåç¹ããã®è·é¢ãäžèŽããç¹ãèŠã€ããŠ(èŠã€ãããªããªãäºã€ã®å³åœ¢ãäžèŽããªã)è§åºŠããããããã¹ãŠã®ç¹ã®åº§æšãäžèŽããããã©ãããäžéãã®å転è§ã§è©ŠããŠã¿ãã
ãã¹ãŠã®ç¹ã®åº§æšãäžèŽãããã©ãããç·åœããã§èšç®ããŠããã®ã§ãããæãªããæããã£ãã
å
é ãã
å
é ãã
ã³ãŒãã¯ãã¡ã
é ç¹æ°ãå°ãªãã°ã©ãã«ã¯ãã¯ãŒã·ã£ã«ããã€ãæ³ã䜿ããã
ã¯ãŒã·ã£ã«ããã€ãæ³ã®ã«ãŒãã¯å€ããé ã«ãçµç±å°ãåºçºå°ãå°çå°ã«ããããã®é çªãééãããšè§£ããªãã
ã¯ãŒã·ã£ã«ããã€ãæ³ã¯ãçµç±å°ã®çªå·ãæµ ãé ã«æçè·é¢ãæŽæ°ãããããã®éäžçµæãéèšããã°ãåé¡ã®çããæ±ãŸãã
ã³ãŒãã¯ãã¡ã
äºç¹éã®è·é¢ã¯ãäœåã«åŸåŸ©ããŠãèšç®çµæãå€ãããªãããšãããã
äŸãã°ãªã€ã©ãŒãã¢ãŒã¯ãè¡ããæã®éã¿
ãã®åé¡ã§ã¯ãäžåŸåŸ©ãããšè·é¢ã¯å¶æ°å¢ããã®ã§ãæçè·é¢ãå¯ãéãããã§ãäºç¹éã®è·é¢ã®å¶å¥ã¯å€ãããªãããªã®ã§äºç¹éã®ç§»åã¯å¿ ãæ ¹ãçµç±ããããšã«ããŠãæ ¹ããã®è·é¢ã®åã«ããŠããäºç¹éã®è·é¢ã®å¶å¥ã¯å€ãããªããè·é¢ãå¶æ°ãªãè¡ã§ã奿°ãªãéè·¯äžã§åºäŒãã
ã³ãŒãã¯ãã¡ã
ç€é¢ãå転ããã°çµ¶å¯Ÿå€ãå€ããã
ãšããããšã§ãç€é¢ã4åå転ããŠãå·Šäžã®é§ ã®æ¹ãé«ããšããä»®å®ã®äžã§æ±ãããDPãäžæã䜿ãããªããšãªãè§£ããšããã ãã§ã¯å®è£ ã§ããªãã®ã§ãããçè§£ããå¿ èŠãããã
ã³ãŒãã¯ãã¡ã
MSTãªãã¯ã©ã¹ã«ã«æ³ãšããã®ãçŽçãããŠããããªãã£ããé£çµæåã®æ°ãGCDã ãšããã®ã¯ãªããšãªãå¯ããŠãäºãã«çŽ ãª
ã³ãŒãã¯ãã¡ã
蟺ã®è·é¢ãçããã®ã§BFSã§è§£ãã
ãã¥ãŒã«ã¯è·é¢ãèŒãããããšã¯å¥ã«é ç¹1ããä»ã®é ç¹ãžã®è·é¢ãšãä»ã®é ç¹ã«è¡ãçµã¿åããã管çããã
- 蟺ããã©ããšæççµè·¯ã«ãªããªãé ç¹(è¿åè·¯ã®å ã«é ç¹)ã¯ãã¥ãŒã«èŒããªã
- 蟺ããã©ããšæççµè·¯ä»¥äžã«ãªãé ç¹ã«ã€ããŠã¯ããã®é ç¹ã«è¡ãæ¹æ³ã®æ°ãè¶³ã
- ã€ãŸã蟺ã®å ã®é ç¹ãæççµè·¯ã¡ããã©ã®ãšãã蟺ã®å ã®é ç¹ããã¥ãŒã«èŒããªããããã®é ç¹ã«è¡ãæ¹æ³ã®æ°ãè¶³ããããããã®åé¡ã®èã§ããã
é忬ã®å詊ãåé¡ C14ã®èŠé ã§è§£ãããããã€ã¯ã¹ãã©æ³ãªã®ã§
ã³ãŒãã¯ãã¡ã
æåã®ç¹ std::set<Num>
ãèµ€ãã¹ã std::bitset<64>
ã§æã€ãšTLEããªãã std::unordered_set<Num>
ã䜿ã£ãŠãå€ãããªãã
äžçæžãã§ãããšã¯éããªãã®ã§æ³šæããã
ã³ãŒãã¯ãã¡ã
äžé§ãå±¥ãããã
倿°ã«äžæã«åãæ°ãè¶³ãæäœã¯ãè¶³ããå€ããªãã»ãããšããŠæãŠã°ãããããã®å€æ°ãæŽæ°ããªããŠæžãããªãã»ããã®åæå€ã¯0ã§ããã
ã³ãŒãã¯ãã¡ã
å¶çŽãããèŠãã
è¡åæŒç®ã®ã³ã¹ããé«ãããŠãããªã³ã°ã¯äœ¿ããªãããã£ãŠå¥ã®æ¹æ³ãæ¢ãã
éã®é·ç§»è¡åãçŽã«æãããš
ã³ãŒãã¯ãã¡ã
èŸºã®æ°ãé ç¹ã®æ°-1ã§ããã¹ãŠé ç¹ãé£çµãªãæšã§ããã
蟺ã std::vector<std::vector<Num>>
ã§ç®¡çãããšãé ç¹ããæ¬¡ã«ãã©ãé ç¹ãäžŠã¹æ¿ãã§ãããããšã¯DFSã§èšªããã°ããããã®æ¹æ³ã¯ãªã€ã©ãŒãã¢ãŒãªã®ã§ãã¹ããããã«ããŠããã
ã³ãŒãã¯ãã¡ã
å°ããªè·é¢ãšå€§ããªè·é¢
å£ã®ç¡ããšããã«äžæ©èžã¿åºãæã®å°ããªè·é¢ã
å£ããªããã°è¡ããå Žæã®ãçŸåšå°ããã®çžå¯Ÿåº§æšã
std::vector<std::pair<Num, Num>> diffs_short {
{-1, 0}, {1, 0}, {0, -1}, {0, 1}
};
å£ãå£ããŠè¡ããå Žæã®ãçŸåšå°ããã®çžå¯Ÿåº§æšã
std::vector<std::pair<Num, Num>> diffs_long {
{-2, -1}, {-2, 0}, {-2, 1},
{-1, -2}, {-1, -1}, {-1, 0}, {-1, 1}, {-1, 2},
{0, -2}, {0, -1}, {0, 1}, {0, 2},
{1, -2}, {1, -1}, {1, 0}, {1, 1}, {1, 2},
{2, -1}, {2, 0}, {2, 1}
};
ãããããã¹ãŠã®ãã¹ããçžå¯Ÿåº§æšã§è¡ã£ãå ã«ã€ããŠãåæ¹åã®æã匵ããåŸã¯å·Šäžããå³äžãŸã§ãã€ã¯ã¹ãã©æ³ã§æçè·é¢ãæ±ãã倧ããªè·é¢ã§å²ããšçããæ±ãŸããå°ããªè·é¢ã¯ãããé·ããŠãçãã¯å€ãããªãã
å£ãå£ããŠé²ããªãããã¯ãŽãŒã«ã«åããæççµè·¯ãªã®ã§ãå£ãã2x2ã®å£ã®äžã«ã¯äžåºŠå ¥ã£ããããããåºããããªããå£ãã2x2ã®å£ã®äžã倧ããªè·é¢ã§åãããšã¯ããããªãã
å ¬åŒè§£èª¬ã«ããã°01BFSã§è§£ããŠããã®æ¹ãå®è£ ãç°¡åã§éãã
ã³ãŒãã¯ãã¡ã
ç°diffã ããAtCoder Daily Training MEDIUM 2023/11/23 18:30 start ã§è§£ããŠæããã£ãã
æå»ã§é«éã·ãã¥ã¬ãŒã·ã§ã³ãããåæå€ã¯ãã¬ãå std::set
åã®éå
ãã¬ãå
å
¬åŒè§£èª¬éãäºåšããããš
ã³ãŒãã¯ãã¡ã
蟺ã®éã¿ã®æå€§å€ã«é¢å¿ããããªãããã®èŸºããéã蟺ãé€ãã°ããã
ãšããããšã§ã軜ã蟺ããéã蟺ã«åãã£ãŠé çªã«èŸºã远å ããŠãæçµçã«æšã«ãªãããã«ããã蟺
é£çµæåã¯union-findæšã§ç®¡çããã蟺ãç¡ãé ç¹ã®é£çµæåã¯1åã§ã atcoder::dsu::size
ããããªã£ãŠããã
ã³ãŒãã¯ãã¡ã
ãšã©ãã¹ããã¹ã®ç¯©ã£ãœãããšãããã
ããã¯å
¬åŒè§£èª¬éãã§ããã
ã³ãŒãã¯ãã¡ã
N=10ãªãBitDP
ãªã®ã ããå ç®æ¹æ³ã4éããã£ãŠããå Žååãããªããšè§£ããªãã
ã³ãŒãã¯ãã¡ã
ã·ãã¥ã¬ãŒã·ã§ã³ããŠãããããããªããŠãæžãããšãããã
è²ã
- åãçã«
$I_1$ ,$I_2$ ããã -
$I_1$ ã®äžã«$J_2$ ãã€$I_2$ ã®äžã«$J_1$ ããã (1ãš2ãå ¥ãæ¿ããŠã察称ãªã®ã§åã)
ããã ãæ€åºããã°ACã§ãããè§£ã瀺ããšèšããããããããžã«ã«ãœãŒãã§ã§ãããããã
ã³ãŒãã¯ãã¡ã
äžããæŽå°ããã
楜ãããæå€§ã®ã¢ãã©ã¯ã·ã§ã³ã«ã楜ãããäºçªç®ã«ãªããŸã§ä¹ããŸãããæ¬¡ã«æ¥œãããæå€§ã ã£ãããã³æåã¯äºçªç®ã®ã¢ãã©ã¯ã·ã§ã³ã«ã楜ãããäžçªç®ã«ãªããŸã§ä¹ããŸããã以äžåæ§ã«æ¥œãããæŽå°ããŠãKåä¹ãããã¹ãŠã®ã¢ãã©ã¯ã·ã§ã³ã®æ¥œããã0ã«ãªããŸã§ä¹ãã°ããããã®ãšãæºè¶³åºŠãæå€§ã«ãªãã®ã§è²ªæ¬²æ³ã§è§£ãããKãäžéå端ã«äœã£ããšãã®åŠçã«æ°ãä»ããã
å¥è§£ãšããŠäºåæ¢çŽ¢ãããã ããå®è£ ããã
ã³ãŒãã¯ãã¡ã
Cé åã¯ã§ããã°äœ¿ããããªãã
ãã®åé¡ã®æ¬è³ªã§ã¯ãªãã®ã ããCé åã®ãµã€ãºãäžæ¡ééããããã«ãããã¡ãªãŒããŒã©ã³ãçºçããŠçµæããããããªãããžã£ããžãµãŒããREãããŸã§æ°ãä»ããªãã£ããã§ããã°ç¯å²ãã§ãã¯ä»ãã®é åã䜿ãããããããããã®åé¡ã§äºæ¬¡å é åã¯å¿ èŠãªãã
æ¬é¡ã«æ»ããš
ã³ãŒãã¯ãã¡ã
STLã®äœ¿ãããªããåãããã
åãç® std::set<Num> cuts
ãé åºä»ããŠäžŠã¹ã cuts.upper_bound(x)
ã§èŠã€ããããã¯ãšãªãåŠçããæç¹ã§åãããŠããªãããšãä¿èšŒãããŸããã®ã§ lower_bound
ã§ããã£ãã
ã³ãŒãã¯ãã¡ã
ã³ã¬ã¯ã·ã§ã³ãäºã€ã«åããã
ãã®çš®ã®åé¡ã§äœåºŠãèŠãéãããœãŒãæžéåãšãæ¿å
¥é åºãã€ããéåã®äºã€ãåããããœãŒãæžéå㯠std::multiset
ã§ãåªå
床ãã¥ãŒã§ããããæ¿å
¥é åºã¯ std::queue
ã ããã¯ãšãª3ã§ç©ºã«ããã®ã§ std::vector
ã§ããããããããªãã
ã³ãŒãã¯ãã¡ã
å®éã«ãã£ãŠã¿ãã
äœçœã®åé€ãšå転ã¯ããããé·ãã³ãŒãã«ãªãã®ã§ããããããã³ãŒãã¹ããããã«ããŠããã
ã³ãŒãã¯ãã¡ã
å¶çŽãããèŠãã
ã³ãŒãã¯ãã¡ã
éããèããã
蟺ãé€ãã®ã§ã¯ãªãã蟺ãä»ãè¶³ãããšãèãããšãunion-findæšã掻çšã§ããã
å ±é ¬ãè² ã®èŸºã¯é€ã䟡å€ããªãã®ã§æåããååšããããšã«ããããã®ãšã蟺ãå¢ããã°ãã€ãã¯å šé ç¹ãé£çµã«ãªããããã¯æå°å šåæšãæ§æããã¢ã«ãŽãªãºã ãšåãã§ããã
- 蟺
$(A_i, B_i)$ ã®$A_i, B_i$ ãé£çµãªããé£çµæåã¯å¢ããªãã®ã§èŸºãè¶³ãæå³ã¯ç¡ããããã¯èŸºãé€ãããšã®éæäœãªã®ã§ãå ±é ¬$C_i$ ãããããã - 蟺
$(A_i, B_i)$ ã®$A_i, B_i$ ãé£çµã§ãªããã°ãé£çµæåãå¢ãããå ±é ¬ã¯ããããªãã
ã³ãŒãã¯ãã¡ã
ç¹°ãè¿ãã«ãªãããå¶çŽãããèŠãã
ããçŒããšããçŒãã¯ãããã300åããé£ã¹ãªãã®ã ããã300å以äžã¯äžåŸ300åãšã¿ãªããŠæ§ããªããããããã°
ã³ãŒãã¯ãã¡ã
æ©ãããæãåããããšããšãã«ã¯å€§äºã
å顿ã®éãå®éã«å®è£
ãããšçããæ±ãŸãã
æã®èŠçŽ ãåã£ããšãã®åãšããŠåãããå€ã¯ã301éãããèããªããŠæžãã
ã³ãŒãã¯ãã¡ã
éè€ãäžæãæ°ããã
é¡æãæºããé ç¹ã®çµãæ°ãäžããã«ã¯ãæšã®é«ã(æ ¹ããèãŸã§ã®èŸºã®æ°)ã
- æ ¹ãããªããšãã¯ãé¡æãæºããé ç¹ã®çµã¯ååšããªã
- é«ãã1ã®ãšãã¯ãèããè·é¢1ã§å°éã§ããã®ã¯æ ¹ã ããèããè·é¢2ã§å°éã§ããã®ã¯æ ¹ã®å ã«ããèã ãã§ããã
- é«ãã2ã®ãšãã¯ãèããè·é¢1ã§å°éã§ããã®ã¯èã®èŠªã ããèããè·é¢2ã§å°éã§ããã®ã¯èã®å åŒãšæ ¹ãè·é¢3以äžã ãšæ ¹ã®åããåŽã«ããé ç¹ã«å°éãã
- é«ãã3ãšãã¯ãèããè·é¢1ã§å°éã§ããã®ã¯èã®èŠªã ããèããè·é¢3ã§å°éã§ããã®ã¯æ ¹ãšèã®éã«LCA(æå°å ±éç¥å )ãããé ç¹ãè·é¢3ã ãšæ ¹ã ãã§ãè·é¢4以äžã ãšæ ¹ã®åããåŽã«ããé ç¹ã«å°éããã
é«ãã2ã®ãšãèããè·é¢2ã§å°éã§ããã®ã¯æ ¹ãšèã®å
åŒãšããã®ã¯ãé«ã1ã®æšãšåãã§ãããã€ãŸãé«ãã
-
$(v,u)$ ã®çµã¿åããã¯ã$i \ne 2D$ ãªã$2 |v| \times |u|$ åã§ããã$v$ ãš$u$ ã¯æ ¹ããã®è·é¢ãç°ãªãã®ã§åºå¥ã§ããå ¥ãæ¿ãããã®ãæ°ããããã«åã«ããã -
$i = 2D$ ãªãã$v$ ãš$u$ ã¯å¯Ÿç§°ãªã®ã§$|v| \times |u|$ å ã§ããã$v$ ãš$u$ ã¯æ ¹ããã®è·é¢ãåãã§åºå¥ã§ãããå ¥ãæ¿ãããã®ãæ°ããªãããåã«ããªãããããééããããã
é«ã
ã³ãŒãã¯ãã¡ã
intã ãšãªãŒããŒãããŒããã
äœãé©åœãªé ç¹ãæ ¹ã«ããŠæšãäœãããã®ãšãåé ç¹ã«ã€ããŠåé ç¹ã®æ°(èªåèªèº«ã¯å«ããªã)ãæ°ãããã¹ãŠã®é ç¹ã®æ·±ãã®å(æ ¹ã¯0ãšãã)ãéèšããŠãããDFSã§æ±ãŸãã
æ ¹ã«ã€ããŠã¯ãã¹ãŠã®é ç¹ã®æ·±ãã®åãçãã§ãããæ ¹ã®åé ç¹
LCAã®å®è£
ããã®ãŸãŸäœ¿ããš
ã³ãŒãã¯ãã¡ã
ãããæ³ã§ããã
ãã€ãéãåºå ¥ãã€ãã³ããå®çŸ©ããŠãåäžæå»ãå§çž®ããŠããèšç®ããã
ã³ãŒãã¯ãã¡ã
åºéåã
ã»ã°ã¡ã³ãæšã«èŒãããšäžæãããããŸãå
¥åã座æšå§çž®ããã
äžè¬çã«
ã³ãŒãã¯ãã¡ã
å¶çŽãããèŠããšãå€åãçãã
åºæ¬ã¯æ°åã®
ã³ãŒãã¯ãã¡ã
ä¹ ãã¶ãã«é£ç«æ¹çšåŒã
ããé ç¹ããä»ã®é ç¹ã«è¡ãçµè·¯ã¯ãBFSã§çµè·¯ãèšé²ããªããæ±ãŸãããã£ãŠãã蟺ãäœåéãããåããã
1å以äžéã蟺ã
Rã0éãã®å Žåãããã®ã«æ³šæããã
ã³ãŒãã¯ãã¡ã
A happens before B ãšããæ¡ä»¶ã¯æå¹ã°ã©ãã§è¡šçŸã§ããã
ãã¹ãŠã®æ¡ä»¶ããæºããè§£ããããªããããããžã«ã«ãœãŒãã§è§£ãåŸããããããããžã«ã«ãœãŒãã«äžææ§ã¯ãªãããåªå 床ãã¥ãŒã䜿ããšã§ããã ãé ç¹çªå·ãæå°ã®ãã®ãã䞊ã¹ãè§£ãåŸãããã
ããããžã«ã«ãœãŒãå¯èœãšåŸªç°(ãµã€ã¯ã«)ãç¡ãããšã¯åå€ã§ãããããããžã«ã«ãœãŒãåŸã®é ç¹æ°ãå ¥åããå°ãªããã°ãããããžã«ã«ãœãŒãã§ããªãã£ããã€ãŸããµã€ã¯ã«ããã£ããšåããã
ã³ãŒãã¯ãã¡ã
èå¯ã倧å€ã
é·æ¹åœ¢ã2åãªããæå®ãããé¢ç©ä»¥äžãªã®ã ããæšªå¹ äžæ¯åºããŠããã®äžã«ä»ã®é·æ¹åœ¢ãä¹ã£ããã°ããã瞊暪ã¯äº€æããŠè©Šãã
é·æ¹åœ¢ã3åãªãããŸãäžã«äžå眮ããŠæ®ã2åããäžã«çœ®ãã°ããã瞊ã«ç©ããæšªã«ç©ããã¯ãããã詊ãã瞊暪ã¯äº€æããŠè©Šãã
ã³ãŒãã¯ãã¡ã
é å»¶ã»ã°ã¡ã³ãæšã
(
ãš )
ã +1
ãš -1
ã«èªã¿æ¿ããŠãæ¬åŒ§ã®åæ¯ãåãã°ãããã€ãŸãåºé
åºéåã¯ã»ã°ã¡ã³ãæšã§ç®¡çããã¯ãšãª1ã§ã»ã°ã¡ã³ãæšã®ããŒããå ¥ãæ¿ããããããšã¯åºéåã®æå°å€ãé å»¶ã»ã°ã¡ã³ãæšã§ç®¡çããã
- ããŒãã¯æŽæ°ãšãã
- åºéã«å¯Ÿããã¯ãšãªã¯ãåºéã®æå°å€ãè¿ããåäœå ã¯è² ã®ç¡é倧ã«ããã
- ããŒãã«å¯ŸããäœçšçŽ ã¯æŽæ°ã®å¯ç®ã«ãã
ããŒã
ã¯ãšãª2ã«å¯ŸããŠã¯ã
ã³ãŒãã¯ãã¡ã
ç¶æ é·ç§»ã¯ã°ã©ãã§è¡šçŸã§ããã
ãã®çš®ã®ããºã«ã¯ãã³ãã§ã¯ãªã空çœãåãããšèããããã¹ãŠã®ã³ãã®ç¶æ ãé·ç§»åãšé·ç§»åŸã蟺ã§çµã³ãç¶æ éã®æå°è·é¢ãçãã ããã£ãŠBFSã§æ±ãŸããC++ã§1ç§æããã
空çœã 9
ããã 123456789
ããŽãŒã«ãšããŠã 123456789
ãã 987654321
ãŸã§ã®é åãç¶²çŸ
ããããšã§ãé·ç§»å
ã®ç¶æ
ããã¹ãŠæããããšãã§ãããç¶æ
ãæ°å€ãšããŠæã£ãŠãæååãšããŠæã£ãŠãããããBFSã®æãšè·é¢ã std::vector
ã§ã¯ãªã std::map
ã§æããªããšã¡ã¢ãªãè¶³ããªãã
ã³ãŒãã¯ãã¡ã
æäžè¡ã®æ¡ä»¶ã¯äºã€ãããäºã€ç®ãå¿ãããš after_contest ãéããªãã
- å³é£ã®åã¯ã7ã§å²ã£ãäœãã1ãã€å¢ãã
- å³é£ã®åã¯ã(7ã§å²ã£ãŠããªãå ã®)å€ã1ãã€å¢ãã
æäžè¡ä»¥å€ã¯ãçŽäžã®è¡ã«7ãè¶³ããå€ã§ããã
ã³ãŒãã¯ãã¡ã
é»è»ã®åãšåŸãå¥ã®é ç¹ãšèããã
å ¬åŒã¯frontãšbackãšããäºã€ã®é ç¹é åãçšæããè»äž¡ãindexãšããŠãããé ç¹ãäžã€ã®é åã§ç®¡çãã奿°ãè»äž¡ã®å é ãå¶æ°ãšè»äž¡ã®æ«å°ŸãšããŠãããããå ¬åŒã®ããã«äžæãèããªããšifæã ããã§ã³ãŒããé·ããªãã
ã³ãŒãã¯ãã¡ã
æå°å ¬çŽæ°ã䜿ãã°ãã®åæ°ã¯è¡šçŸã§ããã
std::unique
ãªã std::set
ãªãã§éè€ãæé€ããã
ã³ãŒãã¯ãã¡ã
èå¯ã倧å€ã
é ç¹ãã蟺ãäžæ¬ããåºãªãã®ã ãããé ç¹ã®æ°ãšèŸºã®æ°ãçããããšãå¿ èŠæ¡ä»¶ã§ããããšãåããããšãããã解説ãèªããŸã§æ°ãä»ããªãã£ãã倧å€ãªã®ã¯å忡件ã§ãããããšã§ãå ¬åŒè§£èª¬ã«é·ãæç« ããããåãã£ãŠããŸãã°å®è£ ã¯7åã§ã§ããããäœæéèããŠãçããèŠããªãã£ã(ãµã€ã¯ã«æ€åºã¯é¢ä¿ãªãã£ã)ã
åå®è£ ãããã®ãèªåã®èšèã§ãŸãšãããšä»¥äžã®ããã«ãªããæ¡ä»¶ã«éè€ãå€ããå®ã¯æåŸã®æ¡ä»¶ã ã調ã¹ãã°ããã
-
$N \ne M$ ãªãåé ç¹ãã蟺ãäžæ¬ãã€ã«ã¯ã§ããªãã®ã§ã0éããäžèšã«å«ãŸããã®ã§ãæç€ºçã«èšç®ããªããŠããã - ã°ã©ãã
$G$ åã®æåã«é£çµæååè§£ããŠããã¹ãŠã®é£çµæåã以äžã®æ¡ä»¶ãæºãããªããçãã¯$2^G$ éãã- é£çµæåã¯2å以äžã®é ç¹ãå«ã(1é ç¹ãããªããã°èŸºãåºããªã)ããããäžèšã«å«ãŸããã®ã§ãæç€ºçã«èšç®ããªããŠããã
- ç¡åã°ã©ããšã¿ãªãããšãã®ãé ç¹ã®æ¬¡æ°ã®åã¯ãé ç¹æ°x2ã«çãããããããªããš1 WAããã
äžèšã®æ¡ä»¶ãæºããå Žåããªããã°ã©ããªã®ã§å¿ ããµã€ã¯ã«ã¡ããã©1ã€ååšããããµã€ã¯ã«ã®åãã¯å³åããšå·Šåãã®äºéãããããµã€ã¯ã«å€ãããµã€ã¯ã«ã«åããæã¯ãµã€ã¯ã«åŽã«åãããããªãã®ã§äžéãããã£ãŠé£çµæåã«ãããŠåãã®ä»ãæ¹ã¯å¿ ãäºéãã§ããã
ã³ãŒãã¯ãã¡ã
äºåæ¢çŽ¢ãšã瞊ã®ç©ã暪ã«ãããäž¡æ¹æãã€ãã®ã¯çµæ§å€§å€ã§ããã
æ¡ä»¶ãæºããã®ã«ã¡ããã©
éšçœ²ãããããžã§ã¯ãã«åºã人æ°ã¯ããããžã§ã¯ãã®æ°ãéšçœ²ã®äººæ°ãã©ã¡ããå°ãªãæ¹ã§ããããã£ãŠäººæ°ãå€ãéšçœ²ãã
ãããžã§ã¯ã1,2,... ã«äººãåºããè¶³ããªããã°ãã®æ¬¡ã«äººæ°ãå€ãéšçœ²ãããããžã§ã¯ã3,4,... ã«äººãåºãããšããã®ãç¹°ãè¿ãã°
äŸã«ãã£ãп޿°ã®äºåæ¢çŽ¢ã¯ãå¹
ã2ã®ãšãã倧å€ãªã®ã§ã
ã³ãŒãã¯ãã¡ã
æå®ãããå€ä»¥äžã«æ»ã£ãŠããããšãæ³åããã
std::set::lower_bound
ããã£ãŠã€ãã§ããã
- å€ã -1 ã®èŠçŽ ãå
šéšå
¥ããšããŠéå
std::set
ã§æã£ãŠãã - æ·»ãåã
$x_i$ 以äž(Nã¯0ã«ã«ãŒããã)ã§ -1 ã®èŠçŽ ã¯éåã«ããã¯ãã ããæ¢ã -
$A_h$ ã$x_i$ ããæ¥ãããšãæžãçããŠãã¯ãšãª2ã§è¿ãããŸã æžãçããŠãªããªããã¯ãšãª2ã®è¿ãå€ã¯-1ã§ããã
å ¬åŒè§£èª¬éãåºé管çãå®è£ ãããš ãããªã ãããªãã³ãŒããé·ããªãã®ã§ãã®åé¡ã§ã¯èŠããªãããä»ã®åé¡ã§ãã®çš®ã®å®è£ ãæ£ç¢ºã«ã§ããå¿ èŠã¯ããã ããã
Union-findæšãçšããŠåºéãæãããš ãããªã ãããããå®è£ éãããã
ã³ãŒãã¯ãã¡ããPythonã§ããã
ãã¡ãã®èšäº ãæ£è§£ã§ãããã ã
64-bitæŽæ°ãåãä»ããããã«ã __int128
ã䜿ããªã (æåºããã³ãŒã) ã boost::multiprecision::cpp_int
ã䜿ããªã (æåºããã³ãŒã) ãPythonãRubyã®ä»»æç²ŸåºŠæŽæ°ãªãã䜿ãã°ããããããã«ãã环ä¹ãæ±ããã³ãŒãã¯ãã£ãããããã°ããŠããã
ã³ãŒãã¯ãã¡ã
äºåæ¢çŽ¢ã«ã¯åããªããå°ºåãæ³ãªãããããã
å é ããã¿ãŠãé£ç¶ããXãæé·äœåãæ±ããããããå ¬åŒè§£èª¬ã¯çޝç©åãçšãããã£ããããè§£æ³ã§ãç§ã®å ã®è§£æ³ã¯ifæã ããã§ãã¡ããã¡ãããŠèŠã¥ãããå°ºåãæ³ãäºåæ¢çŽ¢ãšåæ§ã«ãåã«åµããŠèŠããã
ãªã®ã§çޝç©åã䜿ã£ãŠè§£ãçŽããã®ã ãã¡ãã§ããã X
ã§ã¯ãªã .
ãæ°ããã®ãããœã§ããã
-
$S$ ã®å é ããã®.
ã®åæ°ã®çޝç©åcumsum
ãåãã -
$S$ ã®$i$ æåç®ããã³ãã以åŸã§ã.
ã$k+1$ åçŸããå Žæãæ±ãããããã¯$cumsum(i-1)+k$ ãstd::lower_bound
ã§æ±ããã°åããã - è¿ã£ãŠããã€ãã¬ãŒã¿
it
ã¯.
ã$k+1$ åã«çŸããäœçœ®ã§ã該åœãããã®ããªããã°$S$ ã®æ«å°Ÿã§ãããããã¯èšãæããã°ã.
ã$k$ åçŸãããã®åŸã«X
ã0å以äžçŸãããã®çŽåŸã®äœçœ®ã§ããããã£ãŠit - (it.begin()+i)
ãã$i$ ãå§ç¹ãšããŠX
ãæå€§ã§é£ç¶ã§ããåæ°ã§ããã - ããã
$i=1..N$ ã«ã€ããŠæ±ããã
å°ºåãæ³ã§å®è£ ãããš ãããªã
ã³ãŒãã¯ãã¡ã
Union-findæšã¯èŸºãåé€ã§ããªãã
ãªã®ã§èŸºãç¡ãç¶æ ãã蟺ãä»ãå ãããé£çµæåã®æ°ã¯ã©ã€ãã©ãªããã¯çŽæ¥æ±ããããªããã以äžããæ±ãŸããåæç¶æ ã¯é ç¹ã蟺ããªãã®ã§é£çµæåã¯0åã§ããã
- é ç¹1åãå ããã1å¢ãã
- 蟺ã1æ¬å ããŠãéé£çµæåãªé ç¹ãçµãã ã1æžã
ã³ãŒãã¯ãã¡ã
Greedyã§ãããããšæã£ããgreedyãªä»¶ã§ããã
äžŠã¹æ¿ããã©ããããã§å®è£ éãå€ãããå ¬åŒè§£èª¬ã¯éåžžã«ãã£ããããŠãããã§ãªããšifæã ããã«ãªãã229-D ãšåæ§ã«ãå°ºåãæ³ã®ãããªåçŽãªã«ãŒãã§å®è£ ããæ¹æ³ãèŠãããå°ºåãæ³ã¯leftãfor eachããŠã«ãŠã³ã¿ãã€ã³ã¯ãªã¡ã³ãããæ¹ããæ¡ä»¶ã«åããšãã ãã€ãã¬ãŒã¿ãã€ã³ã¯ãªã¡ã³ãããããæžããããã ãã å®è£ ãããLeftãšrightã®äž¡æ¹ãèªç±ã«åãããšãããããã
ã³ãŒãã¯ãã¡ã
é€ç®ã®åãåºå®ããŠããã®åã«ãªããããªå²ãæ°ãèããã
ã³ãŒãã¯ãã¡ã
ã«ãŒãæ€åºã¯ããããžã«ã«ãœãŒãã§ã§ããããunion-findæšã®æ¹ãç°¡åã§ããã
æšæ§é ã€ãŸãé£çµããŠããé ç¹å士ã¯ãã©ã£ãŠããããã«ãŒããç¡ãããšããç¶æ³ã§ãé£çµæåã«ããé ç¹å士ãç絡ãããšã«ãŒãã«ãªãããšããã®ãunion-findæšã ãšç°¡åã«ç¢ºèªã§ããããããšã次æ°ã3以äžã®é ç¹ããããšé¡æãæºãããªãããšãå¿ããã«æ€åºããã
ã³ãŒãã¯ãã¡ã
座æšå§çž®ããŠã»ã°ã¡ã³ãæš
å顿ãè§£éããã®ããããããããèŠããã«é«æ©åã
221-Eãã倧å€ãªã®ã¯
ã³ãŒãã¯ãã¡ã
ååž°ãããã»ã©æ·±ããªããã°DFSã§æžããã
å
¬åŒåçã¯å³äžããå·Šäžã«åãã£ãŠã«ãŒãã§å®è£
ããŠãããå·Šäžããå³äžã«åãã£ãŠãåãããšãã§ããããã«ãŒãã§ã¯ãªãDFSã§ãè§£ãããã«ãŒãã¯å³äžããå·Šäžã«åãã£ãŠ ãã®ãã ããã㯠ãã®ãã ã«è¡ããå·Šäžããå³äžã«åãããšäžæããããªãããããš
BFSã§å®è£
ãããšãã¯ãåªå
床ãã¥ãŒã§è·é¢ãçãé ã«åŠçããåªå
床ãã¥ãŒã«åããã¹ãäºåºŠæå
¥ããªãããã« seen[y][x]
ã§ã¬ãŒããããã¬ãŒãããªããšTLEãããå®è£
㯠ãã¡ã ã ãã¡ã
ã³ãŒãã¯ãã¡ã
æåã«éèŠãªããšã ã
DPãšããŠã¯4çš®é¡çšæãããã€ãŸã
-
$x=x2 \land y=y2$ ã¯ã$x=x2 \land y \ne y2$ ,$x \ne x2 \land y=y2$ ã®åç¹ããããããäžéãã®æ¹æ³ã§è¡ãã -
$x=x2 \land y \ne y2$ ã®åç¹ãžã¯ã$x=x2 \land y=y2$ ãã$h-1$ éãã$x=x2 \land y \ne y2$ ã®åç¹ãã$h-2$ éãã$x \ne x2 \land y \ne y2$ ã®åç¹ããäžéãã®æ¹æ³ã§è¡ãã -
$x \ne x2 \land y=y2$ ã®åç¹ãžã¯ã$x=x2 \land y=y2$ ãã$w-1$ éãã$x \ne x2 \land y=y2$ ã®åç¹ãã$w-2$ éãã$x \ne x2 \land y \ne y2$ ã®åç¹ããäžéãã®æ¹æ³ã§è¡ãã -
$x \ne x2 \land y \ne y2$ ã®åç¹ãžã¯ã$x=x2 \land y \ne y2$ ãã$w-1$ éãã$x \ne x2 \land y=y2$ ã®åç¹ãã$h-1$ éãã$x \ne x2 \land y \ne y2$ ã®åç¹ãã$h+w-4$ éãã®æ¹æ³ã§è¡ãã
ã³ãŒãã¯ãã¡ã
äžé§ãå±¥ããããã€ãŸããªãã»ããã§èããã
ã³ãŒãã¯ãã¡ã
èªåã§çç®ãå®è£ ããã瞊ã®ç©ã暪ã«ããã
ãªã®ã§ä»»æç²ŸåºŠæŽæ°ã®è¶³ãç®ãšã10ã§å²ãæäœãå®è£
ããã°ãããããã10ã§å²ãæäœããã®ãŸãŸå®è£
ãããšèšç®åæ°ãæ¡æ°ã®2ä¹ã«ãªã£ãŠTLEããããªã®ã§äžäœ
ä»»æç²ŸåºŠæŽæ°ãçšããå¥è§£ãC++ãš boost::multiprecision::cpp_int
ã§å®è£
ãããTLEããã
ã³ãŒãã¯ãã¡ã
äžåºŠåå€ã«èœã¡ãã埩掻ã§ããªãã
ã®ã§ãããŸã§ã®äžäœKçªç®ãŸã§ã®å€ã std::priority_queue
ã§æã¡ãæ°ãããããšã«åå
ãåå€ã調ã¹ãŠéåãæŽæ°ããã std::multiset
ã§æã€å Žå㯠ãã ããã
ã³ãŒãã¯ãã¡ã
åè£ãå šåæããŠãããããšãããã
çå·®æ°ã¯å°ãªãã®ã§å šåæããŠããã£ããããã¯æãã€ããªãã£ãã
- ãã¹ãŠã®æ¡ã«ã€ããŠãæ°åã0以äž9以äžã«åãŸã
-
$N \geq X$ ã§ãããã€ãŸãèŸæžåŒé åºã§ä»¥äžãæãç«ã€
- äžãã
$i$ æ¡ç®ã Xãã倧ãã$X_i < c+d*(i-1)$ - äžãã
$i$ æ¡ç®ã Xãšåã$X_i = c+d*(i-1)$ ã§$i+1$ æ¡ç®ã«ã€ããŠãããã®æ¡ä»¶ãæºãã
ãšãªã
å
šåæãããš ãã¡ã ã
ã³ãŒãã¯ãã¡ã
åŸã§äžŠã¹æ¿ããã®ã ããã aaa..zzz
ãšåãæåã¯åžžã«é£ç¶ããŠåºçŸãããšèããŠå·®ãæ¯ããªãããã®ãããª
std::map
ã ãš
æ°ããã®ã¯é äžåã®æååãªã®ã§ãåãæåãäœååºãããæ±ãããäŸãã°aã3åãbã2å, cã5åãšããã
-
a
ã1åãa
ã2åãa
ã3ååºãŠãa
以å€ã®æåããªãçµã¿åããã¯1éããã€(a
,aa
,aaa
)ã -
b
ã1ååºããšããããšã¯ãa
ã®1..3åã®äžŠã³ã«b
ãå·®ã蟌ããšããããšã§ãããå·®ã蟌ãå Žæã¯a
ã®ååŸäœµããŠ4ãæã§ããã - äžè¬çã«
b
ãå«ãŸãªãé·ã$L$ ã®æååããã£ãŠã$i$ åã®b
ãå·®ã蟌ãçµã¿åããã¯ã$L$ ã®åæåãããããã®b
ãåºå¥ããªãã§äžŠã¹ãé åçµã¿åãããªã®ã§${L+i} \choose i$ éãã§ããã - ãã£ãŠ
$L$ ã$combi(L)$ éããããªãã$L$ ã®é åºãä¿ã£ããŸãŸb
ãå·®ã蟌ãçµã¿åããã¯ã$combi(L) \times {{L+i} \choose i}$ éãã§ããã - ããã空æååããæå€§é·ã®
$L$ ãããã§ã¯ç©ºæååãa
,aa
,aaa
ã«ã€ããŠæ±ããã
ããã a,b,c ã«ã€ããŠé次çã«æ±ããã
- åæå€ãšããŠã空æååã¯1éããã
- 空æååã«
a
ãå ããŠ$i$ æåã«ããçµã¿åããã¯ã$combi(empty) \times {i \choose i} = 1$ éã -
a
ããå«ãŸãªãé·ã$L$ ã®æååã«b
ãå ããŠ$i$ æåã«ããçµã¿åããã¯ã$combi(|L|) \times {L+i \choose i}$ éããããããã$L$ ã®é·ã$0..max(|L|)$ ãšãb
ã®åæ°$0..|b|$ ã®çµã¿åããã«ã€ããŠæ±ããã -
a,b
ããå«ãŸãªãé·ã$L$ ã®æååã«c
ãå ããŠ$i$ æåã«ããçµã¿åããã¯ã$combi(|L|) \times {L+i \choose i}$ éããããããã$L$ ã®é·ã$0..max(|L|)$ ãšãc
ã®åæ°$0..|b|$ ã®çµã¿åããã«ã€ããŠæ±ããã以äžåæ§ã«ããŸã å ããŠããªãæåçš®ã«å¯ŸããŠåãããšãè¡ãã - æåŸã«ç©ºæåå以å€ã®ãã¹ãŠã®çµã¿åããã®æ°ãè¶³ã
ã³ãŒãã¯ãã¡ã
æ¢çŽ¢ãããã©ããæ©ããããBFSã«ä»»ãããã
DFSã§ãã¹ã¿ãã¯ã䜿ãåããçããæ±ãŸãããBFSãã¹ãã ãããé·ç§»å ã®æ°åã¯6æ¡ãããªãã®ã§ãNãã1ãäœããã1ããNãäœãæ¹ãç°¡åã§ããã
Nãã1ãäœããšãã«
-
$i$ ã$a$ ã§å²ãåãã -
$i$ ã10以äžã§ãã -
$i$ ã®äžããäºæ¡ç®ã0ã§ã¯ãªãã$i$ ã®æäžäœæ¡ã¯0ã§ã¯ãªãããšããã®ã¯æ¡ä»¶ã§ã¯ãªãã®ã§æ³šæããã
ã³ãŒãã¯ãã¡ã
ã¯ãšãªå èªã¿
æ¬æ¥ã®èŸºãšãã¯ãšãªã§å ãã蟺ã®äž¡æ¹ãåºå¥ããã«MSTã«å ããããšããã°ãããã¯ã©ã¹ã«ã«æ³ã§éã¿ã®å°ãã蟺ããå ããŠãããã¯ãšãªã§å ããããšã«æåãã(éé£çµæåå士ãçµã¶)ãªããã®ã¯ãšãªã¯ Yes
ãè¿ããå ããããªããšã㯠No
ãšè¿ããã¯ãšãªã®èŸºã¯union-findæšã«å ããã€ãããšããã ãã§ãå®éã«å ããŠã¯ãªããªãã®ã§æ³šæããã
ã³ãŒãã¯ãã¡ã
éè€ããçµã¿åãããã§ããã§ã ãæ°ããªãã
XORã¯åçèšç»æ³ã§ããªãã®ã§ç·åœãããããªããã
- çµ1ã«ã¯ã人1ãå¿
ãããŠã人
$2..2N$ ã®èª°ãçµã - çµ2ã¯ãçµ1ã
$(1,2)$ ãªã人3ãå¿ ãããŠäºº$4..2N$ ãšçµããããã§ãªãã°çµ1ã¯$(1,i), i\ne 2$ ãªã®ã§ãçµ2ã«ã¯äºº2ãå¿ ãããŠã人$3..2N$ ã®ãã¡äºº$i$ 以å€ãšçµãã - äžè¬çã«çµ
$k$ ã«ã¯ããŸã çµãã§ããªã人ã®ãã¡æãå°ããçªå·ã®äººãåºå®ãããã以å€ã®æ®ãã®äººãšçµã
ãããDFSãã«ãŒãå®è£ ãããšããã¹ãŠã®çµã¿åãããååž°çã«æ±ããããã
ã³ãŒãã¯ãã¡ã
DPã ãã§ã¯è§£ããªãã
std::vector<Num>
ãã³ããŒããŠæ«å°Ÿã«
å ¬åŒè§£èª¬ã«ããéããå¹³åå€ãšäžå€®å€ã決ãæã¡ããŠäºåæ¢çŽ¢ããã®ã ããäœèŠçŽ ãã£ãããæ°ããªããšããã®ãå·§åŠã§ãããããã¯æãã€ããªãã£ãã
ã³ãŒãã¯ãã¡ã
è¿ãå€ã®ã€ãã¬ãŒã¿ãäœãSTLã®ä»æ§ãææ¡ããŠããã
ã€ãã¬ãŒã¿ã«ããæ¿å
¥ã¯ãæ¿å
¥ããèŠçŽ ãæãã€ãã¬ãŒã¿ãè¿ãããã£ãŠæ¿å
¥ããå Žæã®ååŸã«æ¿å
¥ããåŠçã¯ãè¿ãå€ã®ã€ãã¬ãŒã¿ãé£éãããã°ãããæ¿å
¥ã³ã¹ãã宿°ã® std::list
ã䜿ãã
ã³ãŒãã¯ãã¡ã
ããã³ã·ã£ã«
ãã€ã¯ã¹ãã©æ³ã®minãmaxã«åãæãããã after_contest_01,05.txt
ã ãTLEãããå
¬åŒè§£èª¬2ãèªåã§å®è£
ãããéããã¹ãã±ãŒã¹ãTLEããããšããããšã§èªåã§ã¯è§£ããªãã£ãã®ã§ãçµå±å
¬åŒè§£èª¬1ããã®ãŸãŸå®è£
ããã
ã³ãŒãã¯ãã¡ãã解説ã®ããã«è§£æçã«è§£ãããããªããããããè§£ãæ¹ããããããã§ãACã§ããã
åŒå€åœ¢ãåãããããšãããã
詳ãã¯å ¬åŒè§£èª¬ãåç §ãçŽèгçãªèª¬æã¯ãå ç®åšãæãæµ®ãã¹ãŠæ¡ã®ç¹°äžããèµ·ããªãæ¡ä»¶ãšã¯äœããèããã°åããã
ã³ãŒãã¯ãã¡ã
环ç©åã®äœ¿ãæ¹
环ç©åã®èŠçŽ ã«äŸåé¢ä¿ãæãããŠã°ã©ããäœããé£çµãã©ãã調ã¹ãããšããã®ãçãã ãå šãæãã€ããªãã£ãããªã®ã§å ¬åŒè§£èª¬ãèªãã§å®è£ ãããæ°Ždiff以äžã¯è§£æ³ãå šãæãã€ããªãããšãããã
ã³ãŒãã¯ãã¡ã
Min-maxæŠç¥ã§ããã
å æãäœãããŠãåŸæãæåãå°œããã°åŸæå¿ åãããã§ãªããã°å æå¿ åã§ããããããç·åœããã§æ±ããã
ã³ãŒãã¯ãã¡ã
å ¥åç¯å²ã«æ³šç®ããã
ã³ãŒãã¯ãã¡ã
éå®è£ ãããããªãédiffãè§£ããŠã¿ãã
é«ééè·¯ãé£çµãããªããç°ãªãé£çµæåãã€ãªãã®ãåŸã§ãããããã§è¡ãé£çµæåã«åããŠãããšäœåé£çµããããããŒãžãã¯ã§ç®¡çããã
- è¡
$i$ ãããšäœåé£çµã§ãããããå ¥å$D_i$ ã§ç®¡çãããé£çµãããã³ã«1æžããã - é£çµããŠããè¡ã®éå
$G_j$ ã«å«ãã$D_i > 0$ ãªè¡ã$S_j$ ã§ç®¡çãããéåã®ä»£è¡šå ã«é¢é£ä»ããã - é£çµããŠããè¡ã®éå
$G_j$ ãäœåé£çµã§ããããã$Cnt_j$ ã§ç®¡çãããéåã®ä»£è¡šå ã«é¢é£ä»ããã
ãã£ãšãé£çµãã«ããè¡ã®éå(
è¡ãé£çµãããš
ãããç¹°ãè¿ããšãé£çµã§ããè¡ãç¡ããªãããè¡ã®éåãäžã€ã«ãªãããã©ã¡ããã§ããããã¹ãŠã®è¡ãé£çµã§ãªããã°(è¡1ãå«ãé£çµæåã®å€§ããã
æ®ãã®é«ééè·¯ã®æ°èšæ ããé£çµå¯èœãªè¡å士ãé£çµæåãã©ããåããé£çµããŠãé«ééè·¯ã
æ¹éã¯å ¬åŒè§£èª¬2ãšåãã ããããå°ã軜ãå®è£ ãããããã ã
ã³ãŒãã¯ãã¡ã
ããŸã«ã¯ã¹ã¿ãã¯ã䜿ãã
ã³ãŒãã¯ãã¡ã
顿ã諊ããã«èªã¿è§£ãã
å顿ããšãŠããããããã®ã§èªè§£ã«æéãæããããèŠããã«éšåæšãèããŒãã§åé¡ããããšããããšã§ãããã€ãŸãããäºã€ã®éšåæšã«ã€ããŠãèããŒããäºãã«çŽ ãªã®ãå å«é¢ä¿ããšããããšããéãçªå·ã§è¡šçŸãããããã¯èãå·Šããå³(ãããã¯å³ããå·Š)ã«çªå·ãã€ããã°ããã®ã§ãDFSã®èšªåé ã«èããŒãã«çªå·ãã€ããã°ãããçãå®è£ ãããš ãã®ããã« ãªãã
ã³ãŒãã¯ãã¡ã
å·éã«ããŒã¯å€ãèšç®ããã
åºéã®çµãããçãã§ã¯ãªããªãå Žåãäºéãããã以äžãæ±ããŠãæå€§å€ãåããšçãã«ãªãã
- çããå
é èŠçŽ ã ãã€ãŸã
$x_1$ ã®ãšããããã空éåã§0ã¯çãã§ã¯ãªãã®ã§æ³šæã - åºéã®éäžã«ããŒã¯ãæ¥ãå Žåããããå
·äœçã«ã¯ã
$x_i < 0, base=B_{1+y_{i-1}} > 0, B_{y_{1}} < 0$ ã®ãšãã§ããããã®ãšãã¯åºéã®å é ã1çªãšããŠäœçœ®$p=base/-x$ ã«ããŒã¯$C_{y_{i-1}} + \sum_{i=1}^{p}(base+x \times i)$ ãæ¥ãããã®æ¡ä»¶å€å®ã§åºéã1ééããŠ$base=B_{y_{i-1}} > 0$ ã«ãããšWAããã
泚æç¹ãšããŠãè² ã®æ°ã®é€ç®ãé¿ããŠãæ£ã®æ°ã®é€ç®ã«ããã
ã³ãŒãã¯ãã¡ã
解説ãèªããšæ§ã ãªæ¹æ³ããã£ãŠé¢çœãã
ã¯ãšãªå
èªã¿ããããããªããã©ã¡ãã§ãè¡ãããã¯ãšãªå
èªã¿ãããªããã€STLã®ç¯å²ã§è§£ããªãã std::multiset
ãš std::multiset::upper_bound
ã䜿ãã°ããã座æšå§çž®ããŠã»ã°ã¡ã³ãæšãBITã§ãè¡ãããããã
ã³ãŒãã¯ãã¡ã
鳩ã®å·£å®ç
ç¶æ
é·ç§»ã«ãããç¶æ
㯠knot
ã2床éãããšã鳩ã®å·£å®çããèšãããã€ãŸãåæç¶æ
0
ãã knot
ãŸã§ããã knot
ãã knot
ãžã®ãµã€ã¯ã«ãåãç¶ããããšãåãããé«ã
knot
ãæ±ããããããã®åŸã¯ã
- åæç¶æ
0
ãããµã€ã¯ã«ã®æåãŸã§ - ãµã€ã¯ã«ãåãç¶ãã
- ãµã€ã¯ã«ã®éäžã§
$K$ åãå°œãã
ãŸã§ã®ããããã«ã€ããŠã远å ããã¢ã¡ãæ°ãããåæç¶æ
0
ãããµã€ã¯ã«ã®çŽç·ãŸã§ã®çޝç©åãšããµã€ã¯ã«ã®å§ç¹ããå§ç¹ã«æ»ãçŽåãŸã§ã®çޝç©åãæ±ããããšã§ã倧ããª
ãããªã³ã°ã§ãè§£ãããšæã£ããäžæãå®åŒåã§ããªãã£ããå®éå ¬åŒè§£èª¬ã«ããéãããããªã³ã°ã§ãè§£ããã
ã³ãŒãã¯ãã¡ã
ãŽãŒã«ããã¹ã¿ãŒãã«ååž°ããã ABC
å·¡åãäœåé²ãããã¯
ååž°ã®æ¹åãééãããšã©ããããããªãããšããããå
¬åŒè§£èª¬ã®ããã«ãŽãŒã«ããã¹ã¿ãŒãã«ååž°ãããšãã£ããè§£ããããããã¹ã¿ãŒããããŽãŒã«ã«ååž°ãããšãããŒãæ°ã
äžå¿ã¹ã¿ãŒããããŽãŒã«ã«ãã©ãããšãã§ããã
-
$k > 2^{60} > 10^{18}$ ãªãã$S$ ã®æåã®äžæåããæŽŸçããç³»åã§åãå°œããããããã£ãŠ$S(0)$ ã$t - 60$ åABC
ãšå·¡åããæåãèµ·ç¹ã«60åæåãããã$k$ æåç®ã§ããã -
$k < 10^{18}$ ãªãã$S$ ã®äžæååœãã$n=2^t$ åã®èãæã€ã®ã§ã$S( \lfloor k/n \rfloor)$ æåç®ãèµ·ç¹ã«$S(k \quad mod \quad n)$ æåç®ã§ããã - æ ¹ããèãŸã§ã¯ãäžæ®µéãããš
ABC
ã®å·¡åãäžæåé²ã¿ã$k$ ã®ç«ã£ãŠããããã1ã1åããããšã«ããã«å·¡åãäžæåé²ãã
ãŽãŒã«ããã¹ã¿ãŒãã«ãã©ãã³ãŒãã¯ã ãã®ããã« ã¯ããã«ç°¡æœã§ããã
ã³ãŒãã¯ãã¡ã
èŸæžé ã®æå³ãããèããã
äžæºåã«ãé·ã
- 1æåç®ã
C
ãªããA
ãŸãã¯B
ã§å§ãŸãé·ã$N-1$ ã®ä»»æã®åæãšãC
ã§å§ãŸãåæããããæ®ãã®æåãèŠãŠããã - äžè¬çã«ã
$1..(center-1)$ æåç®ã®æåã$c$ ãªãã$ord(c)-ord(A)$ çš®é¡ã®é·ã$N-1$ ã®ä»»æã®åæãšã$c$ ã§å§ãŸãåæããããããã§$ord(c)$ ã¯$c$ ã®ã¢ã¹ããŒã³ãŒãã§ããã - äžå¿ã®æåã
$c$ ãªããå°ãªããšã$ord(c)-ord(A)$ çš®é¡ã®åæã¯äœããã
ãªã®ã§äžå¿ã®æåã
- å転ããäœçœ®ããå転åã®äœçœ®ã®æåãèŸæžé ã§åŸã«æ¥ãã°åã¡ã決ãŸã
- å転ããäœçœ®ããå転åã®äœçœ®ã®æåãèŸæžé ã§åã«æ¥ãã°è² ããæ±ºãŸã
- å転ããäœçœ®ãšå転åã®äœçœ®ã®æåãåããªãæ¬¡ã®æåãæ¯ã¹ãããã¹ãŠã®æåã®çµãåããªãåã¡ã
åã¡ãªãäžå¿ã®æåã
äžèšããã£ãããŸãšããå®è£ ã ãã¡ã ã§ããã
ã³ãŒãã¯ãã¡ã
å®å
šäºåæšãªãã
ãªã®ã§ ããŒã
ã³ãŒãã¯ãã¡ã
édiffãè§£ãæããã
ã¯ãŒã·ã£ã«ããã€ãæ³ã§æçè·é¢ãæ±ããè¿åè·¯ãçŽäº€è·¯ããçããã°çŽäº€è·¯ã¯èŠããªãããããŸã§ããåãã£ããWAãåããªãã£ããå ¬åŒè§£èª¬ã«ããéããå§çµç¹ãåºå®ããŠçµç±å°ãç·åœããããã°ããã®ã ããè¿åè·¯ãšçŽäº€è·¯ã®è·é¢ãåããªãçŽäº€è·¯ã¯äžèŠãšããå¢çæ¡ä»¶ãééããã
ã¯ãŒã·ã£ã«ããã€ãæ³ã¯çµç±å°ã€ãŸããã¹ãåæã«æ±ããããšãã§ãããåœåã¯ãã®æ¹éã§è§£ããŠãããå®éãã®ããã« è§£ãã ã
ã³ãŒãã¯ãã¡ã
è»¢åæ°ãçãã«ãªãã
äžè¬è§£ã¯è»¢åæ°ã ããã®åé¡ã¯å¥çœ®æãå¶çœ®æãã ãåºå¥ã§ããã°ããã眮æã¯3éããç¶æ ã¯6éããããªãã®ã§å šéšæ°ããããã°ããã
ã³ãŒãã¯ãã¡ã
çé¢ç®ã«æ°ãäžãããšèŸããšãã¯DPã䜿ãã
std::vector<ModInt> table(n+1, 0)
ã奿°ãå¶æ°ãåãšä»ã®4åã§ãããåãšä»ã®ããŒãã«ãå
¥ãæ¿ããã®ã¯ std::swap
ã䟿å©ã§ããã std::vector<std::array<ModInt, 2>> dp(n);
ãšåãåã® next
ãæã€ãšswapãæ¥œã§ããã
ãããDPã§æŽæ°ããã
- ç§»åå
ã
$X$ ãªããåã«$X$ ãéã£ãåæ°ã奿°ãªãä»ã¯å¶æ°ãåã®åæ°ãå¶æ°ãªãä»ã®åæ°ã¯å¥æ°ã§ããããã®ããã«ç§»åå ã®åæ°ãç§»åå ã«å ããã - ç§»åå
ã
$X$ ãªããåã«$X$ ãéã£ãåæ°ã奿°ãªãä»ã奿°ãåã®åæ°ãå¶æ°ãªãä»ã®åæ°ãå¶æ°ã§ããã
ã³ãŒãã¯ãã¡ã
å°åŠçã®çç®ã§ããã
å€é åŒã®é€ç®ãçç®ããã«ã¯ãåã«10鲿°ã§ã¯ãªãå²ãç®ãšèããã°ããã
ã³ãŒãã¯ãã¡ã
å ¥ãç©ãšå ¥ãããã®ãæ··ãã
ãšèšã£ãŠããŸãã°ããã ãã ãã解説ãèªããŸã§äœãããŠãããåãããªãã£ãã235-Eãšèãæ¹ã¯åãã ã£ãã
ãã§ã³ã¬ãŒããšç®±ããŸãšããŠéé ã«äžŠã¹ãã°ãããããããã°çžŠã®é·ãã®éé ã瞊ã®é·ããçãããã°æšªã®é·ãã®éé ã瞊暪ãçãããã°ç®±ãå ã§ãã§ã³ã¬ãŒããåŸã«ãªãããã®é ã«å é ããèŠãŠããã°ããã§ã³ã¬ãŒãã®çžŠãåãŸãç®±ã¯ãããããªãèŠã€ãã£ãŠããã®ã§ã暪ãåãŸãããããã®ç®±ã«å ¥ããã°ããã
ã³ãŒãã¯ãã¡ã
é£ããèããããªãã
ã°ã©ãã«äžã€ä»¥äžã®ã«ãŒãããããªããã«ãŒãã«å°éå¯èœãªé ç¹ã®éåãçãã§ããããã ãå€ç«ããŠãããã€ãŸã蟺ãæããªãé ç¹ã¯ããããã union-findæšã§é€ããŠããããã¹ãŠã®é ç¹ããåºçºããã«ãŒããŸãã¯ã«ãŒãã«å°éå¯èœãªé ç¹ã«ãã©ãçãããããã§æ¢çŽ¢ãæã¡åããããã§è§£ãããæåã°ã©ãã®ã«ãŒãæ€åºãå®è£ ããã®ãé£ããã
å ¬åŒè§£èª¬ã®æ¹æ³ã¯ãã£ãšç°¡åã§ããããã以äžé·ç§»å ããªããã€ãŸãåºæ¬¡æ°ã0ã®é ç¹ãååž°çã«åã£ãŠããã°ãããå®è£ ãããšãããªã ã
ããäžã€ã®æ¹æ³ã¯ãã°ã©ãã匷é£çµæååè§£ããŠãé ç¹æ°ã2以äžã®åŒ·é£çµæåããå°éå¯èœãªé ç¹ãBFSã§æ±ããæ¹æ³ã§ããã匷é£çµæåããå°éã§ãããã©ããã¯ãæå¹ã°ã©ãã®åããéã«ããŠãããšBFSã§èª¿ã¹ããã(ããããã°ãµã€ã¯ã«ããæã«åãããããµã€ã¯ã«ã¯éã«ããŠããµã€ã¯ã«ã®ãŸãŸã§ãã)ãå®è£ 㯠ãã¡ã ã
ã³ãŒãã¯ãã¡ã
å€åã«æ³šæããã
æŽæ°ã®çޝä¹ãåŒã§äžããããšãã«å®çŸ©åãå€åãæ±ããããšããåé¡ã¯æ¢çŽ¢ç¯å²ãäžæãçããªããšTLEããã
å ¬åŒè§£èª¬ã¯å°ºåãæ³ãçšãããã£ãšç°¡åãªæ¹æ³ã§ãå®è£ ãããš ãã®ãã ã«ãªããäºåæ¢çŽ¢ãã©ã ãåŒã§å®è£ ãããš ãã®ãã ã«ãªãã
ã³ãŒãã¯ãã¡ã
BFSã
å§ç¹ãã1æã2æã3æ... ã§å°éå¯èœãªç¯å²ãBFSã§æ¢çŽ¢ããã°ãããæ¢çŽ¢ç¯å²ãå°œããæãçµç¹ãŸã§ã®æçæçªãåãã£ãŠããããå°éäžèœ(è·é¢ãç¡é倧)ãåããã
ãšããã®ããã¥ãŒã§å®è£ ããããã¥ãŒãé·ããªããããŠãTLE, MLE, REãèµ·ããããªã®ã§æ¢çŽ¢ç¯å²ãå¹ççã«å®è£ ããå¿ èŠãããã
- æ¢çŽ¢ç¯å²ãã€ãŸãå§ç¹ããã®æçªã¯1æãã€ããå¢ããªã
- äžåºŠèšªããå Žæã¯ãã¥ãŒã«ä¹ã£ãŠãããä¹ã£ãŠããã¯ãã ããããã¥ãŒã«èŒããªã
ãšæã£ãŠå šæ¹äœã®è¡å ãäžæ°ã«ãã¥ãŒã«èŒãããTLEããããã®ã»ãŒ6ç§æãã£ãã
æ£è§£ã¯01BFSã§ãããå®è£ ã倧å€ã§ããã以äžã®éãæ£ç¢ºã«å®è£ ããªããšACã§ããªãã
- è·é¢ãæ¹åå¥ã«ç®¡çãã
- åªå 床ãã¥ãŒã®èŸæžé æ¯èŒã¯ãè·é¢ã座æšãåãã®é ãã
- é ç¹ã蚪åãããã©ããå°ãã€ãã
- çµç¹ãèŠã€ãããããåºåããŠçµäºãã
- è·é¢ãæŽæ°ããã®ã¯ãã¥ãŒããåºããæã§ã¯ãªãããã¥ãŒã«å ¥ããæã«ãã
- å§ç¹ã«ã¯åããæ¹åããªãã®ã§ç¹å¥æ±ããã
ã³ãŒãã¯ãã¡ã
ã©ã³ã¬ã³ã°ã¹ç¬Šå·åã§ããã以äžã
ã³ãŒãã¯ãã¡ã
åºéåå²ã§ããã
é£ããèããããªãã
-
$p$ 以éã§$X$ ãåºãäœçœ®ã$p \leq X_{pos} \leq R$ ãšãã -
$p$ 以éã§$Y$ ãåºãäœçœ®ã$p \leq Y_{pos} \leq R$ ãšãã - ãã®ãããª
$X_{pos}, Y_{pos}$ ãååšããªããã°ã$p$ ã«å¯Ÿããçµã¿åããã¯ç¡ã - ãã®ãããª
$X_{pos}, Y_{pos}$ ãååšããã°ã$p$ ã«å¯ŸããŠ$R + 1 - max(X_{pos}, Y_{pos})$ åã®çµã¿åããããã
ããããå
šåºéããã³
å°ºåãæ³ã§è§£ããš std::lower_bound
ã§
ããå°ãçŽ çŽãªå®è£ ãèããã
- åºé
$[1,N]$ ãäžã€ä»¥äžã®åºé$[L,R,lows,highs]$ ã«åå²ããã$L$ ã¯åºéã®å·Šç«¯ã$R$ ã¯åºéã®å³ç«¯ã$lows$ ã¯$a_i=Y$ ãšãªã0å以äžã®äœçœ®(æé )ã$highs$ ã¯$a_i=X$ ãšãªã0å以äžã®äœçœ®(æé )ã§ãããããã¯$A$ ãå é ããèµ°æ»ãã$Y \leq a_i \leq X$ ãé£ç¶ããåºéããŸãšããã°ããã$R=-1$ ãåæå€ã«ãããšã空ã®åºéã«ã§ããã - åºéã¯
$L$ ã®æé ã«äžŠãã§ããããŸã空ã®åºé$R=-1 \lor lows.empty() \lor highs.empty()$ ãç¡èŠãããããã§ãªããã°$i \in [L,R]$ ãå é ããèµ°æ»ã$min(lows), min(highs) \geq i$ ã®äž¡æ¹ãèŠã€ãããªã$n - max(min(lows), min(highs))$ ã$i$ ã«å¯Ÿå¿ããå³ç«¯ã®åæ°ãªã®ã§ããããåèšããã - åºéå
ã®èµ°æ»ã¯
std::lower_bound
ã§ æžãã ãã å°ºåãæ³ ãèŠãããå°ºåãæ³ãªã$[lows,highs]$ ãä¿æããå¿ èŠã¯ãªãã
ã³ãŒãã¯ãã¡ã
å€åã«æ³šæããã
std::lower_bound
ã§æ€çŽ¢ã§ããã
ã³ãŒãã¯ãã¡ã
ããå®è£ ãããããã
- X軞ã«å¹³è¡ãªçŽç·ã¯ãY座æšã§ç®¡çãã
- Y軞ã«å¹³è¡ãªçŽç·ã¯ãX座æšã§ç®¡çãã
- X軞ã«ãY軞ã«ãå¹³è¡ã§ãªãçŽç·ã¯ããã®çŽç·ãéãç¹ã®çªå·ãæãå°ããé ç¹çªå·ã§ç®¡çãããXãŸãã¯Y軞ãšã®äº€ç¹ã¯æµ®åå°æ°ãªã®ã§æ£ç¢ºã«è¡šçŸã§ããªãã
çŽç·ã®åŸãã¯ä»¥äžã®éãã«ããã
- X軞ã«å¹³è¡ãªçŽç·ã¯
$(1,0)$ - Y軞ã«å¹³è¡ãªçŽç·ã¯
$(0,1)$ - X軞ã«ãY軞ã«ãå¹³è¡ã§ãªãçŽç·ã¯ãåŸãã®æå€§å ¬çŽæ°ã§å²ã£ãããšãXæ¹åãæ£ã«ãªãããã«Yã®ç¬Šå·ãé©å®å転ããã
ããã§çŽç·ã®äœçœ®ãšåŸããæ±ºãŸãã®ã§ãäºã€ã®çŽç·ãåäžãå€å®ã§ãããçŽç·ã«
å ¬åŒè§£èª¬ã¯å€ç©ã䜿ã£ãŠãããäžéã«ãŒããåãã°ããããåãçŽç·ãäºåºŠæ°ããªãããã«èšé²ããŠãããã³ãŒã㯠ãã¡ã
ADT HARDã§æ¹ããŠè§£ããããçŽç·ã®åäžå€å®ã 以äžã®ãã ã«ããã4ã€ã®æŽæ°ã䜿ã£ãŠãY軞ãšã®äº€ç¹(åç)ãæçæ°è¡šçŸãããããã§åããæ£èŠåãããšã¯ãX軞æ¹åã®åããéè² ã«ã(ããã§ãªããã°ç¬Šå·ãå転ãã)ãXæ¹åãšYæ¹åã®åãã絶察å€ã®æå€§å ¬çŽæ°ã§å²ã£ãŠäºãã«çŽ ã«ãããã®ã§ããã
- X軞ã«å¹³è¡ãªãã1, 0, 0, Y軞åçãY軞åçãšããæå³ã§ã¯ã1, 0, Y軞åç, 1 ãšããã®ãé©åãªå®è£ ã ã£ãããããã§ã¯X軞ã«å¹³è¡ãªçŽç·ãäºãã«åºå¥ã§ããã°ååã§ããã
- Y軞ã«å¹³è¡ãªãã0, 1, X軞åçã0ãY軞åçã¯ç¡ãã®ã§ãä»ã®çŽç·ãšåºå¥ã§ããäžæãªå€ãªããªãã§ãããã
- ããã§ãªããã°ãæ£èŠåããXæ¹åã®åããæ£èŠåããYæ¹åã®åããY軞åçã®åæ¯ãY軞åçã®ååã䜿ã£ãŠãY軞åçãæçæ°è¡šçŸããã
å
¬åŒè§£èª¬ã«ããããã«ãã¡ããã©
ã³ãŒãã¯ãã¡ã
èšç®éè§£æãéèŠã§ããã
çŽ æŽãªæ¹æ³ã¯ã
å
¬åŒè§£èª¬ã«ããéããäºéã«ãŒãã®èšç®éã¯å®ã¯å°ããã
ã³ãŒãã¯ãã¡ã
åŸãããèããã
å
é ã«ã¯
ãã£ãŠ
$y_i$ -
$i$ 以éã®$t=2, y \geq 0$ ãª$y$ ã®ç·å -
$i$ 以éã®$t=2, y < 0$ ãª$y$ ã®ãã¡ã$y$ ã®äžäœ$K$ åãé€ãããã®ã®ç·å
äžè¬çã«æåŸãã
$y_i$ -
$i$ 以éã®$t=2, y \geq 0$ ãª$y$ ã®ç·å -
$i$ 以éã®$t=2, y < 0$ ãª$y$ ã®ãã¡ã$y$ ã®äžäœ$K-p \geq 0$ åãé€ãããã®ã®ç·å
æåŸãã
äžèšã®1ã¯ãã®å Žã§ãããã2ã¯çޝç©ããã3㯠std::multiset
ã«
ã³ãŒãã¯ãã¡ã
ãã¯ãå€åã«æ³šæãããç¹ã«å€æ°éã®å¶çŽã¯å€§äºã
çŽ æ°è¡šãäºåæ¢çŽ¢ããŠãããããå°ºåãæ³ã§ãæ±ãŸããããã std::upper_bound
ã®æ¹ãã³ãŒãã¯ç°¡æœã§ãããçŽ æ°è¡šãæ±ããæ¹æ³ã¯é »åºãªã®ã§ã¹ããããã«ããŠããã
ã³ãŒãã¯ãã¡ã
確ççã¢ã«ãŽãªãºã
éåãæ¯èŒãããšTLEããã®ã§ãã€ãžã§ã¹ããäœããéè€ã®ç¡ãæ°åã®éå
ãããããš
Zobrist hashing ããã¡ããšå®è£ ãããã®ã ãã¡ãã
å
¬åŒè§£èª¬ã¯ã éå
-
$i=1..n$ ã«ã€ããŠã®éåã®å€§ãã$|a_1,...,a_i|$ ãæ±ããã$|b_1,...,b_j|$ ãåæ§ã - éåã®å€§ããã
$k=1..N$ ãšãªããããª$|a_1,...,a_i|=k$ ãš$|b_1,...,b_j|=k$ ã鿬¡çã«æ±ãã - éåã®å€§ããã
$k$ ã®ãšããäœã£ãã€ãŸã$a$ ,$b$ ã®ã©ã¡ããäžæ¹ã«ãããªãèŠçŽ ãããã°äžäžèŽãããã§ãªããã°äžèŽã§ããã -
$x,y$ ã«ã€ããŠã$|a_1,...,a_x|$ ãš$|b_1,...,b_y|$ ã¯åèšç®ããŠããã®ã§ãäžäžèŽãªãNo
ã§ãããããã§ãªããã°éåã®å€§ãã$k$ ã«ã€ããŠéåãäžèŽãããã©ããåèšç®ããŠããã®ã§è¿ãã