ABC lessons learned4 - zettsu-t/zettsu-t.github.io GitHub Wiki
ABC 6,8åäœå¶(126..ææ°)ã®Dåé¡ãã ãããè§£ããã®ã§ãããããåŸãæèšããŸãšããŠãããŸãã
ã³ãŒãã¯ãã¡ã
n鲿°è¡šèšãšã¯ãã°ãã°ãã®æ¡ãéããŠæ°ã衚瀺ããæ¹æ³ã§ããã
Nimæ°ã¯2鲿°ã®ããããã®æ¡ãç¬ç«ã«æ±ããã®ãåçã§ãããåãåçã2鲿°ä»¥å€ã§ãã§ããã100鲿°ãå°å ¥ãããšã10鲿°2æ¡ãã²ãšãããã«ã§ããŠã297éã(0ã¯ãããç¡ãã«çžåœãã)ã®æ°ã衚çŸã§ããã2鲿°ã®è€æ°ãããããŸãšããã°äžæãããã®ã§ã¯ãšæã£ãŠã300å以äžã«æžããªãã£ãã®ã¯ã¡ãã£ãšæããã
ã³ãŒãã¯ãã¡ã
äºéãèãã
ããã§ã¯
-
$[i, (i+1)mod N]$ ã«é€ãããããã$[(i+1)mod N, (i+2)mod N]$ ã«é€ããããŠããããªããŠããã -
$[i, (i+1)mod N]$ ã«é€ããããªããã°ã$[(i+1)mod N, (i+2)mod N]$ ã«é€ããããªããã°ãªããªã
ããšãåãããããããªããšåç©
-
$[0, 1]$ ã«é€ãããããšããé€ãããã/ãããªãã®åæå€ã¯$(INF, A_0)$ -
$[0, 1]$ ã«é€ããããªããšããé€ãããã/ãããªãã®åæå€ã¯$(0, INF)$ ã§ãæåŸã«$A_{N-1}$ ãè¶³ã
ã³ãŒãã¯ãã¡ã
å é€åçã䜿ããã
3ã€ã®æ°ãç°ãªãçµãæ°ããã®ã¯å€§å€ã ãã3ã€ã®ãã¡2ã€ã®æ°ãåãçµã3ã€ãšãåãçµãæ°ããã®ã¯å®¹æã§ãããå ¬åŒè§£èª¬éãã«æ°ãäžããŠããããã³ãŒã㯠ãã¡ã
ã³ãŒãã¯ãã¡ã
åºæ¬ãã€ã¯ã¹ãã©æ³
ãã€ã¯ã¹ãã©æ³ã§è§£ãã°ããã®ã ãã以äžã®å¶çŽãå ããã
- ãã€ãéããé ç¹ããåºãŠãã蟺=æ¢ã«ããéè·¯ã ãç§»åå¯èœã§ãã
- ãã€ããšéã£ãŠã次ã®é ç¹ã«è¡ãããã©ããã¯ã蟺ãããããšãã€ã蟺ã®å ã«å°éããæ¹æ³ããŸã ãªãããšã§ãããããã¯union-findæšã§ç®¡çã§ããã®ã ããå®ã¯ãã€ã¯ã¹ãã©æ³ãªãäœãããªããŠããããªãã
ããããã°éœåž1ããä»ã®éœåžãžã®ãã¹ã¯å¿ ãæšã«ãªããåŸã¯èŸºã蟺çªå·ã«éç®ããŠåºåããã
ã³ãŒãã¯ãã¡ã
ãããã³ç¬Šå·å
åãåºãããã³ã®ãã¡ãçããã®2ã€ããã£ã€ããŠãåãåºãåãšèããããã£ã€ãããã³ãäžå¡ãšã¿ãªãããã¯ãçããã®2ã€ããã£ã€ããããããéé ã«è¡ããšãããã³ç¬Šå·åã§ãåãåºãåã®ãã³ã®é·ãã®åãã³ã¹ãã§ããã®ãšãã³ã¹ããæå°ã«ãªãã
ã³ãŒãã¯ãã¡ã
ãã¯ãå é€åçã䜿ããã
æŽæ°ãAã§å²ã£ãäœããšBã§å²ã£ãäœãã¯ãAãšBã®æå°å ¬åæ°ã®åšæã§æ±ãŸããã®ã§æ±ããããšæãã°æ±ãŸãã倧å€ç ©éã§ãããå é€åçã䜿ã£ãŠãAãŸãã¯Bã®åæ°ãAããã³Bã®åæ°ãæ°ãããšãã£ããçµããããã®ããã«å®è£ ããã³ãŒãã ãã¡ã
ã³ãŒãã¯ãã¡ã
环ç©åã§DPã®èšç®éãæžããã
çŽ çŽã«DPãããšTLEããã®ã§ã环ç©åã䜿ã£ãŠ
ã³ãŒãã¯ãã¡ã
å ¬åŒè§£èª¬ã®æåã®æ¹ã«ããæ¹æ³ãšã¯ããªãç°ãªãã
å
¬åŒè§£èª¬ã¯è²ã
ãããã2çªç®ã®æ¹æ³ãå®è£
ãããš ãã¡ã ã®ããã«ãªãã
ã³ãŒãã¯ãã¡ã
å顿ãããèªãã
é ç¹ã®æ¬¡æ°ã3以äžã§
ã³ãŒãã¯ãã¡ã
Qã倧ããã®ã§ã环ç©åãå¿ èŠãšè§£ãã
Aãæé ã«äžŠã³æ¿ããŠãçãã¯å€ãããªãã®ã§äžŠã³æ¿ããããããããš std::lower_bound
ããåãããåŸã¯çޝç©åã䜿ã£ãŠçããæ±ãã(å¹
ãèŠçŽ æ°ãé«ãã
ã³ãŒãã¯ãã¡ã
std::map::[]
ã«ãçšå¿ã
std::map::[]
ã¯ããŒã«å¯Ÿå¿ããèŠçŽ ããªããã°ããã©ã«ãã³ã³ã¹ãã©ã¯ã¿ã§èŠçŽ ãäœã£ãŠç»é²ããããªã®ã§ããŒã«å¯Ÿå¿ããèŠçŽ ããªããã°0ãè¶³ãã®ãã += aMap[key]
ã«ãããšãã©ãã©ã飿³é
åã®èŠçŽ ãå¢ããŠTLEããã std::find(key)
ã§ããŒã«å¯Ÿå¿ããèŠçŽ ã®æç¡ã調ã¹ãŠãèŠçŽ ããªããã°è¶³ããªãããã«ããŠé£æ³é
åã®èŠçŽ ãå¢ããªãããã«ããã
ããŠæ¬é¡ã§ãããã
$A_2 = S_1 - A_1$ $A_3 = S_2 - A_2 = S_2 - S_1 + A_1$ $A_4 = S_3 - S_2 + S_1 - A_1$
ãã£ãŠ
ããããã
å ¬åŒè§£èª¬éãå®è£ ãããšç°¡æœãª ã³ãŒã ã«ãªããåŒå±éãéèŠã§ããã
ã³ãŒãã¯ãã¡ã
åºéãšããã°ãããæ³ã
ãšããããšã§åºéã®çޝç©åãåããæ£ã®çޝç©åãç¶ãåºéãå䜵ãã环ç©åã0ã«ãªã£ããšããã§å¥ã®åºéã«åãåããã°ãããã©ã³ã¬ã³ã°ã¹ç¬Šå·åãšäŒŒãŠããã
ã³ãŒãã¯ãã¡ã
ã«ãŒãæ€åº
人éå«ããªé¢ä¿ã«ã«ãŒããããå Žåãäžã€ã®é¢ä¿ã¯å«ããªãŸãŸè§£æ±ºã§ãããæ®ãã®é¢ä¿ã¯é©åãªé çªã«ãã£ã³ãã£ãé ãããšã§è§£æ±ºã§ããããã£ãŠã«ãŒãäžã§æãäœãäžæºåºŠãããã®ã«ãŒãã®æãäœãäžæºåºŠã«ãªããã«ãŒã以å€ã¯é©åãªé çªã§ãã£ã³ãã£ãé ãããšã§äžæºåºŠã0ã«ã§ããã
ãã£ãŠã«ãŒãæ€åºãè¡ããããããã®ã«ãŒãã®æäœäžæºåºŠãè¶³ããšçããæ±ãŸããã«ãŒãå€ã«ãã£ãŠãã€ãã«ãŒãã«ãã©ãçãé ç¹ã¯ãæ¢ã«èšªåããã«ãŒãã«åºåã£ããæ¢çŽ¢ãæã¡åãããšã§ãåãã«ãŒããäºåºŠæ°ããªãã
æåã°ã©ãã®åŒ·é£çµæååè§£ã䜿ããšç°¡æœã«æžãããã³ãŒã㯠ãã¡ã ã
ã³ãŒãã¯ãã¡ã
é ç¹ãå°ãªãã°ã©ãã¯ã¯ãŒã·ã£ã«ããã€ãæ³ã
ãšããããšã§ã¯ãŒã·ã£ã«ããã€ãæ³ã§è§£ãããæäœã§äœåèšç·Žãè¡ãå¿ èŠãããããè·é¢ãšå®çŸ©ããè·é¢ã®åãsumã§ã¯ãªãmaxã«ãããšãã©ã®çµç±å°ãéã£ããã§æçè·é¢ãæ±ããããšãã§ãããå ¬åŒè§£èª¬ã«ãããåãããªãã£ã(è§£çå±¥æŽã«ã¯èªåã§è§£ããªãã£ããšãã)ã
äºåæ¢çŽ¢ã§ãè§£ããããã ããäžéã
ã³ãŒãã¯ãã¡ã
DFSã§ã¯ãªãDP
DFSã§è§£ããããªæ°ãããããDFSã ãšWAãTLEã«ãªãããªã®ã§ç©ºæååããçŽ çŽã«DPãããã³ã¹ããšã
- åæç¶æ
ã¯ç©ºæååã«çžåœããã©ã®ã³ã¹ãã«ã€ããŠã
$9..1$ ã®åºçŸåæ°ã¯ãã¹ãŠ0åãšããã - é
ãDPã§æ°åãäžã€å ããæã®ã³ã¹ããæ±ãããã³ã¹ãã
$N$ ãã倧ãããã°é·ç§»ããªããã³ã¹ãã$N$ 以äžãªã$9..1$ ã®åºçŸåæ°ã«ã€ããŠèŸæžé ã§å€§ããªãã®ã«å·®ãæ¿ããã - èŸæžé ãšã¯ã
$9..1$ ã®åºçŸåæ°ã®åã€ãŸãæ¡æ°ã倧ããããæ¡æ°ãåãã§$9,8,...,1$ ã®åºçŸåæ°ãèŸæžé ã«å€§ããããšã§ãããããã¯åºçŸåæ°ãç¹°ãè¿ããŠæ¡ã«å±éããã°åããããªã®ã§åºçŸåæ°ã¯$9..1$ ãšããŠã$1..9$ ãšã¯ããªãã£ãã
ã³ãŒãã¯ãã¡ã
æ®æ©ã€ã¶ããæãåºãã
ããã¹ããŒãžããå ã«é²ãŸããã®ã¹ããŒãžãè§£ãç¶ããæ¹ããã¹ããŒãžã®ç¹°ãè¿ãåæ°ã«å¯ŸããŠå¿ èŠãªæéãæžããšããããšã§ãããä»ã®ã¹ããŒãžããå ã«é²ãå¿ èŠã¯ãªããããã§ãªããã°å ã®ã¹ããŒãžã«é²ã¿ãåã®ã¹ããŒãžã«æ»ã£ãŠãããããšã¯äœããªã(åã®ã¹ããŒãžãä»ã®ã¹ããŒãžãã¹ããŒãªãŒæ åã¯ã¿ãªããŠããã®ã ãã)ããããå šã¹ããŒãžè©Šãã°è§£ãã
ã³ãŒãã¯ãã¡ã
ãµã€ã¯ã«æ€åº
ç®±ã«éã
-
$rem = 0$ ãªãã$W$ ãäžçš®é¡ãã€$n$ åè©°ãããšããäœæ¥ãæ¯åè¡ã -
$rem > 0$ ãªãã$W$ ãäžçš®é¡ãã€$n$ åè©°ããŠã æ®ã$rem$ 以äžã®éããç®±ã«è©°ããã$W_i$ ã®$i$ ã«å¿ããŠã$rem$ 以äžãªãããã«$p$ åè©°ããŠã ãã®åŸ$(i+p) \quad mod \quad N$ çªç®ããè©°ãããšããããšãããµã€ã¯ã«ãèŠã€ãããŸã§æŽæ°ããã
ã³ãŒãããããã«ããã®ã ãã¡ã ãå¿
ã
ã³ãŒãã¯ãã¡ã
æšç§»å¯èœãšããã°union-findæš
äºã€ã®åãéãªã£ãŠãããã©ããã®å€å®ã¯ãä»¥åæžããéãã§ããã
ã³ãŒãã¯ãã¡ã
ããæ°ãç¡ããªã£ãŠå°ããã
-
$a_i$ ãçŽ æ°$p$ ã«ã€ããŠçŽæ°$p^e (e>0)$ ãæã€ãšã㊠- ãã¹ãŠã®
$a_j \in S \setminus a_i$ ã«ã€ããŠ$a_j = n * p_i^q$ ãªã$0 \leq q < e$
ãæãç«ã€ããã㯠std::lower_bound(e)
ãæåŸã®èŠçŽ ãåŠãã§åããã
ã³ãŒãã¯ãã¡ã
ããŸã«ã¯äœ¿ãã¹ããŒããã€ã³ã¿ã
ã«ãŒãã®å±±ã std::set<Num>
ã§æã¡ãå±±ã®äžçªã®çªå·ãããŒãšããŠé£æ³é
åã«å
¥ããããã®ãšãçŽ ã®ã³ã³ããã§ã¯ãªãã¹ããŒããã€ã³ã¿çµç±ã«ãããšãå±±ã«éããã«ãŒããå€ãã£ããšã std::move
ã§ç§»ãããã ãŒãã§ã¯ãªãå±±ãã³ããŒããŠåé€ã ãšæéãæãããããããªã(ã ãŒãã®ã³ã¹ãã¯placeholderã®ãã€ã³ã¿ã ããããããªãã)ã
ã³ãŒãã¯ãã¡ã
é å»¶ã»ã°ã¡ã³ãæšã®åºçªã§ããã
å€ã
衚ãäœã£ããã
- å€ã
$l$ ãšãªã$A_j,B_j$ ã®$j$ ãéå$U$ ã«å ¥ãããéå$U$ ã®èŠçŽ æ°ã§éè€ã¯æ°ããªãã - éåã®å€§ãã
$|U| = M$ ãªã以äžã®éãã«ããã- æ°å
$S=(l, ..., r)$ ã¯é·ã$k=r-l+1$ ã®è¯ãæ°åã§ããã$S$ ãè¯ãæ°åãªãèŠçŽ$A_p,B_p : l < p \leq M$ ã远å ããéåããããã¯ãè¯ãæ°åãäœããã - ãã£ãŠ
$f(r-l+1, ..., M-l)$ ã«1ã远å ãããããã¯é å»¶ã»ã°ã¡ã³ãæšã®åºéå¯ç®ã§ã§ããããããã¯ã»ã°ã¡ã³ãæšãšãããæ³ã§ãããã -
$l$ ã1å ããŠåæ§ã«å°ºåãæ³ãç¹°ãè¿ãã
- æ°å
- éåã®å€§ãã
$|U| < M$ ãªãã$r < M$ ã®ç¯å²ã§$r$ ã«1ãå ããã
é
å»¶ã»ã°ã¡ã³ãæšã®æ·»ãå
ã³ãŒãã¯ãã¡ã
äºæ¬¡å DPã
å ¬åŒè§£èª¬éããiåç®ãŸã§ã³ã€ã³ãã¹ãè¡ããçŸåšã®ã«ãŠã³ã¿ãjã§ããããšããDPãäœãã°ããã
ã³ãŒãã¯ãã¡ã
ãããæäœã¯ç¬ç«ã
åæ¡ã®ãããæäœã¯ç¬ç«ãªã®ã§ããããå¥ã«èãããæäœ
-
$x XOR a$ ã¯ã$a=0$ ãªã$x$ ã®ãŸãŸ (keep)ãããã§ãªããã°$x$ ã®ãããå転 (flip) -
$x AND a$ ã¯ã$a=1$ ãªã$x$ ã®ãŸãŸ (keep)ãããã§ãªããã°0 (reset) -
$x OR a$ ã¯ã$a=0$ ãªã$x$ ã®ãŸãŸ (keep)ãããã§ãªããã°1 (set)
æäœã®çޝç©ã keep, reset, set, flip ã«çœ®ãæããããšãã§ããã
æäœå/æäœåŸ | keep | flip | reset | set |
---|---|---|---|---|
keep | keep | flip | reset | set |
flip | flip | keep | reset | set |
reset | reset | set | reset | set |
set | set | reset | reset | set |
ã³ãŒãã¯ãã¡ã
ã»ã°ã¡ã³ãæšãäºæ¬èŠãã
å
·äœçã«ã¯è»¢åããŠããèŠçŽ
åé¡ã¯
èŠçŽ ãäžäœäœçªç®ãã
ã³ãŒãã¯ãã¡ã
äžæ¬¡å DPã
å ¬åŒè§£èª¬éããå é jé ããké éžãã ç·åãiã§å²ã£ãäœãremã«ãªãããšããDPãäœãã°ããã
ã³ãŒãã¯ãã¡ã
äžæ¬¡å DPã
å ¬åŒè§£èª¬éãã ããèšç·Žããªããšç°¡æœãªã³ãŒããéãçãæ£ç¢ºã«æããããã«ãªããªãã
ã³ãŒãã¯ãã¡ã
äžæ¬¡å DP + 环ç©å
åçèšç»æ³ãªã®ã ãããã¹1ãããã¹Nãæ±ãããšçããåºãªãããã¹Nãããã¹1ãæ±ãããšçããæ±ãŸãã
ã³ãŒãã¯ãã¡ã
è»¢åæ°ã
atcoderãç°ãªãäžæåãã€ãããªãã®ã§ãa..rã®åºçŸé åºã§è»¢åæ°ãæ°ããã°ããã
ã³ãŒãã¯ãã¡ã
è¶ é ç¹
ã¯ãšãªãå
èªã¿ããŠãæåŸã®ã¯ãšãªããé ã«é»ç·ãã€ãªããšunion-findæšã䜿ãããåæç¶æ
ã§ããããã®é£çµæåã«ã€ããŠãéœåžãããã€ãããæ°ããããã㯠atcoder::dsu::groups()
ã§é£çµæåãäžã€ãã€åŸãŠãçºé»æä»¥å€ãæ°ãããçºé»æã¯åäžèŠã§ããã®ã§ãã¹ãŠäžã€ã®é ç¹ã«ãŸãšããŠæ§ããªã(ããã¯æ°ãä»ããªãã£ã)ãè¶
é ç¹ã䜿ãã³ãŒã㯠ãã¡ã
éœåžã«é»æ°ãéã£ãŠãããã©ããã¯ãé£çµæåã®éœåžã®æ°ã€ãŸãçºé»æä»¥å€ã®æ°ãšã黿°ãéã£ãŠãããã©ããããé£çµæåã®leaderã«æãããã°ãããããšã¯ã¯ãšãªã®éé ã«å°ç¹ãçµã³ãç°ãªãé£çµæåãçµãã ãæ°ããªé£çµæåã®éœåžãæ°ããŠãæ°ããleaderã«æãããã䜵ããŠé»æ°ãéã£ãŠããéœåžãå¢ããã
- åäžé£çµæåã®å°ç¹å士ãçµãã å Žåã¯ã黿°ãéãéœåžã¯å¢ããªã
- 黿°ãéã£ãŠããéœåžå士ãçµãã å Žåã¯ã黿°ãéãéœåžã¯å¢ããªã
- 黿°ãéã£ãŠããªãéœåžå士ãçµãã å Žåã¯ã黿°ãéãéœåžã¯å¢ããªã
- 黿°ãéã£ãŠããéœåžãšã黿°ãéã£ãŠããªãéœåžãçµãã å Žåã黿°ãéã£ãŠããªãã£ãéœåžã®æ°ã ã黿°ãæ°ãã«éã
ã³ãŒãã¯ãã¡ã
环ç©åãããã°éšååã¯æ±ãŸãã
ããšã¯ãstd::lower_bound
ã§æ¢ãã°ããã
å°ºåãæ³ã䜿ããš
ã³ãŒãã¯ãã¡ã
äžæ¬¡å DP
çŸåšã®åº§æšããçžå¯Ÿåº§æš std::unordered_set<Num>
ã§ç®¡çãããšé害ç©ã®ãã座æšãã©ããåããã飿³é
åã®ããŒã¯
ã³ãŒãã¯ãã¡ã
åŒãäºæ¬¡å DPã
ããæå» t ã« å Žæ i ã«å± ããã§DPãããä» i ã«å± ãããã«ã¯ j æéã«å± ããã(åºçºããªãã°ãªããªã)ç¯å²ãéãããã®ã§ããããåºã«åŒãDPããã°ããã
ã³ãŒãã¯ãã¡ã
ãããšããã©ã
ã©ãŠã³ã1ã€ãŸã
ã³ãŒãã¯ãã¡ã
ç°ç¶ç·ãšæç·
ãŸãå
šäœãäžã€ã®èŒªãã€ãŸã次æ°ã1以äžã®é ç¹ãååšããªããšãã¯çã㯠No
ã§ããã茪ãªãããé ç¹ããå¥ã®é ç¹ã«è¡ãã®ã«ãå³åããšå·Šåãã®äž¡æ¹ãããããã ã
ãŸãunion-findæšã§é£çµæåã«åè§£ãããé£çµæåã«ã€ããŠç¡åã°ã©ãã®ãµã€ã¯ã«æ€åºãããã ãã¡ãã®èšäº ãåèã«ããã
- é£çµæåã«ãµã€ã¯ã«ããªããã°ãé£çµæåã®ã©ã®é ç¹ãããå¥ã®é ç¹ã«è¡ãæ¹æ³ã¯äžæã§ããããã®é£çµæåã§union-findæšãåæ§æããã
- é£çµæåã«ãµã€ã¯ã«ãããã°ããµã€ã¯ã«å€ãããµã€ã¯ã«ãŸã§ãããããæç·ããç°ç¶ç·ã®åé ç¹ã«ã€ããŠãããé ç¹ããå¥ã®é ç¹ã«è¡ãæ¹æ³ã¯äžæã§ãããã€ãŸãæç·(端ã¯ç°ç¶ç·ã®é ç¹ã§ããã)ãäžã€ã®é£çµæåãšããããã«union-findæšãåæ§æãããããã¯åé ç¹ããBFSããã°æ±ãŸãã
åæ§æããunion-findæšã«ã€ããŠãã¯ãšãªã® Yes
ãããã§ãªãã° No
ã§ããããªããã°ã©ããç¥ããªãã£ãã®ã§äžè¬è§£ãåºããã
ãªããã°ã©ããã€ãŸããµã€ã¯ã«ã¯äžã€ã«éãããµã€ã¯ã«ããæšãçããŠããããšãåãã£ãŠããã°ããµã€ã¯ã«ããæšãDFSããŠããããã®æšãunion-findæšã®é£çµæåã«ãããå®è£ 㯠ãã¡ã
ã³ãŒãã¯ãã¡ã
çæ¯æ°åã®å ¬åŒã£ãœãã
çæ¯æ°åã®å
¬åŒ
æåŸã®äžé ã¯çޝç©åããæ±ãŸãã
ã³ãŒãã¯ãã¡ã
æ»ã蟌ã¿ã»ãŒã
3768 msã§ããããACããããTLEåé¿ã®æ¹æ³ãèŠããå°ã工倫ããŠã 2437 msæããã
çŸæç¹ã§ã³ã¹ãã®æãå®ãé ç¹ãåã£ãŠããããšããgreedyã§è§£ããããªã®ã§åªå 床ãã¥ãŒã䜿ã£ãŠé ç¹ãã³ã¹ããäœãé ã«äžŠã¹ãã°ãããé ç¹ãåãã»ã©ã³ã¹ãã¯äœããªãããã®çµæåãé ç¹ãåªå 床ãã¥ãŒã«äœåºŠãèŒãããšããããããã®ãšãã¯äžåºŠåã£ãé ç¹ã¯äºåºŠåããªããã°ããã
TLEãåé¿ããã«ã¯ãåã£ãé ç¹ã®é£ã®é ç¹ã®ã³ã¹ããåèšç®ããã®ã§ã¯ãªããåã£ãé ç¹åã ãã³ã¹ããåŒããã€ãŸãå·®åæŽæ°ããã
ã³ãŒãã¯ãã¡ã
ãããããããšã¯ååž°ã«ãããããã
æååã®é£æºãDFSã§ååž°ããã°è§£ããããTLEããªããå ¬åŒè§£èª¬éãå®è£ ãç°¡æœã«ããã®ã ãã¡ã
ã³ãŒãã¯ãã¡ã
ããšäžæ©è¶³ããªã
X
ã®æ°
åé¡ã¯
ã³ãŒãã¯ãã¡ã
é£çµæåãšããã°ãunion-findã
ãšããããšã§ããã¹ã®é£çµé¢ä¿ãunion-findã«ç»é²ããã°ããã
ã³ãŒãã¯ãã¡ã
質ååæ°ãåºå®ããããªããWAããã
è¡(y座æš)ã«ã€ããŠã
-
$h-1$ åã«ãŒã¯ãããã°ã質åããååã®ã©ããã®è¡ã«ã¯ã«ãŒã¯ããªãã®ã§ãããæ¢ã - ããã§ãªããã°æ®ãååã®è¡ã®ãã©ããã®è¡ã«ã¯ã«ãŒã¯ããªãã®ã§æ¢ã
ãããç¹°ãè¿ããšãã«ãŒã¯ã®ç¡ãè¡ã1ã€ã«çµã蟌ãããåãåæ§ã
ããŠè³ªååæ°ã®äžéã¯20åã ããã©ãããããã for(Num i{0}; i<10; ++i) {}
ãããšWAã for(;;) {}
ãããšACãããåå ãåãããªãã®ã ãã質ååæ°ã®äžéãè¶
ããããšã¯ãžã£ããžãµãŒãã«å€æãããŠ(-1ãè¿ã)å®è£
ããªããã°ããã
ã³ãŒãã¯ãã¡ã
ã³ãŒãã¯ãã¡ã
Min-maxæŠç¥ã§ããã
æ®ã
- ä»
$A_i$ åã®ç³ãæã«å ¥ããæ®ãã¯$p = i - A_i$ ã«ãªã - çžæãæåãå°œãããªããçžæã¯æ¬¡ã®æçªã§
$score(p)$ åã®ç³ãåã - åãããŠèªåãåãç³ã®ç·æ°ã¯
$A_i + p - score(p)$ åã§ãã
ããããŠæ®ã
ã³ãŒãã¯ãã¡ã
æŽå°
ãããããš
-
$B_i * W_i$ åã®ããããé£ã¹ãŠããŸã$k$ åãè¶ ããªããªãã$B_i * W_i$ åé£ã¹ãŠ$i$ ã1å¢ãã - ããã§ãªããªã
$B_i * W_i$ åã®ããããé£ã¹ãŠããéäžã«ã环èš$k$ å以äžã®ããããé£ã¹ãããšã«ãªãã$B_{i-1} * W_{i-1}$ åãŸã§$c$ åé£ã¹ãã®ãªãæ®ã$d = k-c > 0$ åãªã®ã§ã$d / W_i$ åãŸãã¯$1 + d / W_i$ åé£ã¹ããé£ã¹ãŠããéäžã«çޝèš$k$ åã®ãããã«ãªããšããã§æ¢ããã
ã©ã®ããã§é£ã¹ãã®ãæ¢ãããèããã
-
$A_j \leq B_{i-1}$ ãªãããã«ãããã¯æ®ããªãã®ã§0åã -
$A_j > B_{i-1}$ ãªã-
$d \quad mod \quad W_i = 0$ ãªãå šéšã®ããããã£ã¡ãé£ã¹ãŠã$A_j - d / W_i$ å -
$r = d \quad mod \quad W_i > 0$ ãªãã$A_j > B_{i-1}$ ãšãªãå é $r$ åã¯$A_j - d / W_i - 1$ åããã以éã¯$A_j - d / W_i$ å
-
å ¬åŒè§£èª¬2ã¯åªå 床ãã¥ãŒãçšããããããå ¥ã£ãåæ°ãåããããè€æ°ãããªãã2ã€ç®ä»¥éã®ããã¯åã«ç¡èŠããã端æ°åŠçãäžæãããã解説éãã®å®è£ ãšããã倿°å以å€ã¯ã»ãŒã³ãŒãäŸãã®ãŸãŸãªã®ã ãã¡ãã§ããã
ã³ãŒãã¯ãã¡ã
2æ¥æãã£ãŠè§£ããã
åŠäœã«ãMSTãã¯ã©ã¹ã«ã«æ³ã§è§£ãåé¡ã§ãããç©ºæž¯ãšæž¯ãã©ããããã課é¡ã ãã空枯ã建èšãã/ããªããæž¯ã建èšãã/ããªãã®éœå4éããç·åœããããã°ããã
ã¯ã©ã¹ã«ã«æ³ãªã®ã§ãéè·¯ãç©ºæž¯ãæž¯ã
- éè·¯ã«ã€ããŠã¯ããã€ãã®ã¯ã©ã¹ã«ã«æ³éãã
$from, to$ ãæªé£çµãªãé£çµããŠã³ã¹ããæã - 空枯ã«ã€ããŠã¯ãæåã«åºçŸããå³¶ã
$Xfst$ ãšããäºçªç®ä»¥éã«åºçŸããå³¶ã«ã€ããŠ$from, Xfst$ ãæªé£çµãªãé£çµããŠã³ã¹ããæããæåã®å³¶ã®ã³ã¹ãã¯ã空枯ã建èšããå³¶ã2ã€ä»¥äžããã°æãããã ã空枯ã建èšããªããšæ±ºãããäžå建èšããªãã - 枯ãåæ§ã§ãããç©ºæž¯ãšæž¯ã¯ç¬ç«ã§ããã
ãã¹ãŠã®èŸºãèŒããŠããã¹ãŠã®å³¶ãäžã€ã®é£çµæåã«ãªã£ããããã®ã³ã¹ããåè£ã«ãããããã®ãããªã³ã¹ãåè£ã®æå°å€ãçãã§ããããã¹ãŠã®å³¶ã«ç©ºæž¯ã枯ã建èšãããšããè§£ãããã®ã§ãçãã¯æéã§ããã
å ¬åŒè§£èª¬ã¯ãæåã«ç©ºæž¯/枯ã建èšããå³¶ã§ã¯ãªããè¶ é ç¹ãçšããŠããã空枯ã建èšãã/ããªããæž¯ã建èšãã/ããªãã®éœå4éãã¯ãè¶ é ç¹ãå³¶ãšçµã¶ãã©ããã«å¯Ÿå¿ãããè¶ é ç¹ã§æžããªãããš ã³ãŒã ãçããªãã
ã³ãŒãã¯ãã¡ã
Cåé¡ãšããŠã¯ããªããããããã
- éè€ããŠããå·»ã¯ãäžã€ãæ®ããŠãã¹ãŠå£²ã£ãŠãã
- Nå·»ããå ã¯èªããªãã®ã§ãã¹ãŠå£²ã£ãŠãã
- æã£ãŠããªãå·»ã®ãã¡æå°ã®ãã®ãè²·ã
- æã£ãŠããå·»ã¯è²·ããªã
éè€ããŠããå·»ã1åãŸãã¯0åã®ãšãã®å®è£ ãåããã©ããªã£ãŠããŸã£ããå ¬åŒè§£èª¬ãèªãã§ã³ãŒããæ¹åãããš ãããªã
ã³ãŒãã¯ãã¡ã
éšååã§ããã
ã³ãŒãã¯ãã¡ã
ããçš®ã®DP
ããã ãã®è©±ã ããéã®é·ãã std::vector<Num>
ãšããŠéã®çªå·ãããŒã«ãã¹ããšãããããã€ãã®çã§ std::map<std::pair<Num, Num>, Num>
ãšããŠéã®å§çµç«¯ãããŒã«ããããã«ãå§çµç«¯ãåãéãè€æ°ãããšãã«äžæãçããæ±ããããªãã£ãã
ã³ãŒãã¯ãã¡ã
ååå šåæãŸã§ã¯åãã£ããåãå£ãééããã
å·Šäž
察è§ç·ã«ã€ããŠ
ã³ãŒãã¯ãã¡ã
ãã¹ãå°ãªãã®ã§ç¶²çŸ ããã
400x400ãã¹ãããªãã®ã§ãè¡ããå Žæãé ç¹ãè¡ãæ¹æ³ã蟺ã§çµãã ã°ã©ããæ§ç¯ããŠãæå°è·é¢ãæ±ããã°ãããã°ã©ããšåæã«æå°è·é¢ãæ±ããæ¹ãããããéããBFSã«ããå®è£ 㯠ãã¡ã
ã³ãŒãã¯ãã¡ã
èšç®éè§£æã
çŽ ã§å®è£
ãããšèšç®éã
ãªããªãæ¯åã®æäœã§
ããšã¯ããããã®
ã³ãŒãã¯ãã¡ã
å£ã®äœçœ®ãäºåæ¢çŽ¢ããã®ããçªå µãå°å ¥ããŠæ¡ä»¶åå²ãæžããã®ãã以åèŠããããªæ°ãããã
ã³ãŒãã¯ãã¡ã
ããŒãžã§ã³ç®¡çã·ã¹ãã ã®ãã©ã³ããšå·®åæŽæ°ã«èšãæããã
- æåã®ããŒãžã§ã³ã¯
$v=0$ ã§ãäžèº«ã¯ç©ºåã§ãã -
ADD
ã¯ãæåŸã®ããŒãžã§ã³$v$ ã«ãã$A$ ã®æ«å°Ÿã«$x$ ã远å ããããŒãžã§ã³$v+1$ ãäœã -
DELETE
ã¯ãæåŸã®ããŒãžã§ã³ã«$v$ ã®ãã$A$ ã®æ«å°Ÿã(ããããã°)åé€ããããŒãžã§ã³$v+1$ ãäœã -
SAVE
ã¯ãæåŸã®ããŒãžã§ã³ã«$v$ ãšåãå 容ãããããŒãžã§ã³$v+1$ ãäœãã䜵ããŠããŒãã«ããŒãžã§ã³ãæžãçã$note[y] = v+1$ ãšãããããŒãžã§ã³ãSubversionãŠããªé£çªãªããããŒãã¯(æåŸã®ããŒãžã§ã³äžã€ã ãä¿æãã)ã¿ã°ã§ããã -
LOAD
ã¯ãããŒãžã§ã³$note[y]$ (ãªããã°0) ãšåãå 容ãããããŒãžã§ã³$v+1$ ãäœã
ãã®ããã«ãããšãããŒãžã§ã³ -1
)ãåŸããããæ«å°Ÿã ãåããã°ããã®ã§ãã¹ã¿ãã¯æäœãšåæ§ã§èšç®éã¯
å ¬åŒè§£èª¬2ã®äœè«ã«ãä»åã®æäœã¯GitãšæžããŠãã£ããããŸãã«ç§ãæã£ãããšã§ããã
ã³ãŒãã¯ãã¡ã
ç¬ç«ã«èãããã倿°ãåããã
x座æšãšy座æšã¯ç¬ç«ãªã®ã§å¥ã
ã«èãããããããã° std::set
ã§åãããéšååãå
šåæããã°ãã(åãããå€ã®çš®é¡ãå°ãªããªã std::vector
ã®æ¹ãæ¿å
¥ã³ã¹ã
ã³ãŒãã¯ãã¡ã
BitDPã§TSP
ããã¯å®è£ äŸãããèŠãŠè§£æããªããšè§£ããªãã£ããGreedyã£ãœãè§£ãæ¹ã§ãå ¥åäŸã ãã¯è§£ããŠããŸããããã§ã¯å®çã§ããªãã
- äºæ¬¡å
ãŠãŒã¯ãªããè·é¢ã¯
std::hypot
ã§æ±ãŸã - ããããæ°ããã®ã¯
__builtin_popcount
ã§æ±ãŸããäžäœãããã ãåãåºããªãã·ããããã°ããã -
1<<i
ã¯ãªãŒããŒãããŒãæããããã®åé¡ãªãintã«åãŸãã®ã§åé¡ãªãã - åæå€ã¯äžæç§»åããåŸã«ããã
-
$1..N$ é ç¹ãŸã§ãç§»åããããšãã$1..2^N$ ããããã¿ãŒã³ã§ ãã®é ã« åŠçããããããåãããªãã£ããããããã°ãåæãé ç¹$i$ ã®ãšããé ç¹$i$ ããã®ç§»åå ãç¶²çŸ ã§ããã
è§£ããªãã£ã 180-E ããäœãåŠãã§ããªãã®ã¯åçã
ã³ãŒãã¯ãã¡ã
ååž°ã®æ·±ããèããŠDFSããã
ååž°ã®æ·±ãã¯å¯Ÿæ°ãªãŒããŒãªã®ã§ãDFSããŠãã¹ã¿ãã¯ã¯ããµããªãããã£ãŠã¡ã¢åããªããååž°ãããšçããæ±ãŸãã
ã³ãŒãã¯ãã¡ã
確çã·ãã¥ã¬ãŒã·ã§ã³
ã³ãŒãã¯ãã¡ã
å·Šããèããã
- æäœæ°
$counts[0..M]$ , æåŸã®æäœ$lefts[0..M]$ ãDPããã$counts[] = undef, counts[0] = 0, lefts[] = - \infty, lefts[0] = 0$ ãšããã - åã®ç¶æ
$from = 0..M$ ãããå$to = from + a_i \leq M$ ã«ç§»ãããã ã$counts[from] = undef$ ãŸãã¯$to > M$ ã®å Žåã¯ç§»ããªããããã«ã$lefts$ ã®é£ã$i$ ãªã($lefts[from] + 1 = i$ ãªã)æäœåæ°ã¯å¢ãããããã§ãªããã°æäœåæ°ã1åå¢ããã - ãã£ãŠ
$counts[to] = min(counts[to], counts[from] + (lefts[from] + 1 < i))$ ã§ããã$lefts[to]$ ã¯$to,from$ ã®ãã¡$min$ ã§éžãã æ¹ã®æ·»ãåã§ããã
ãããç¹°ãè¿ããšã
ã³ãŒãã¯ãã¡ã
æå€§å ¬çŽæ°ã
- 2ãš3ã§å²ãåã£ãããšæ®ã£ãæ°(1ã§ããã)ãæ®ã£ãæ°ãäžäžèŽãªã -1 ã
- ãã¹ãŠã®
$a_i$ ã2ãš3ã§å²ããæå°åæ°(0åã§ããã)
ã§ããã
ã³ãŒãã¯ãã¡ã
åšåã§ã¯ãªããåšå寞åãèããã
å§ç¹ããäžäžå·Šå³ã«äžæé²ã¿ãå§ç¹ã®é£ãŸã§æ»ã£ãŠããçµè·¯ããããã©ããèããã°ãããå§ç¹ã®äžæå 以å€ã§ãå§ç¹ã«é£æ¥ãããã¹ã«æ»ã£ãŠãããã°é¡æãæºãããå§ç¹ããäžæé²ãæ¹æ³ã¯äžäžå·Šå³ã®4éããªã®ã§ç·åœããããã°ãããå®è£ 㯠ãã¡ãã
BFSã§å®è£ ããããå§ç¹ããã®çµè·¯é·ã枬ã£ãããšãŠãé·ãã³ãŒãã«ãªã£ããé¡æãæºãããªãçµè·¯é·ã¯å¿ ã4以äžã«ãªãã®ã§ãçµè·¯é·ã枬ãå¿ èŠã¯ãªãã£ããå ¬åŒè§£èª¬ã«ããã°ãunion-findæšã䜿ã£ãŠå°éå¯èœãã©ããã ã倿ããã°ããã£ãšçã ã³ãŒã ã«ãªããã»ã³ããã«ã€ãŸãç€é¢ãé害ç©ã§å²ã£ãŠãããšç«¯ã®åº§æšã®æ±ããæ¥œã«ãªãã
ã³ãŒãã¯ãã¡ã
ã»ã°ã¡ã³ãæšãäºæ¬èŠãã
ç»å Žããç©ãå€ãã®ã§æŽçããã
-
$A_{1..N}$ ãæé ã«äžŠã¹ãæã®é äœã$order_{1..N}$ ãšãããåãå€ã«ã€ããŠã¯$A$ ã®æ·»ãåé ã«ããã -
$A_{1..N}$ ãæé ã«äžŠã¹æ¿ãããã®ã$B_{1..N}$ ãšãããäžèšããã$B_{1..N}$ ã«å¯Ÿå¿ãã$order_{1..N}$ ã¯$1..N$ ã§ããã -
$i={1..N}$ ã«ã€ããŠã$B_i \times (2i-1)$ ãé ã«ã»ã°ã¡ã³ãæš$values$ ã«èŒãããä¿æ°ã®æå³ã¯åŸè¿°ããã -
$i={1..N}$ ã«ã€ããŠã$1$ ãé ã«ã»ã°ã¡ã³ãæš$exists$ ã«èŒãããããã¯$values$ ã«å€ãèŒã£ãŠãããšããæå³ã§ããã
ãããããš
ãã
-
$p$ çªç®ãã倧ããèŠçŽ$values.prod(p+1,N)$ ãæãã$p$ ãæããšãã®å€ã®2åååãæžããããã¯çޝç©åã®å·®åãåãæãã§ããã -
$p$ çªç®ã¡ããã©ã®èŠçŽ$values.get(p)$ ãæãã$p$ ãæããšãã®å€ã®$exists.prod(1,p-1)$ åãã€ãŸã$A_K$ ããå°ããå€ã®æ°ãæããåã ããååãæžãã -
$values.set(p,0)$ ,$exists.set(p,0)$ ããŠã$A_{K}$ ããªãã£ãããšã«ããã
ããã
é å»¶ã»ã°ã¡ã³ãæšã§ã è§£ãã ã
ã³ãŒãã¯ãã¡ã
äœããæ»ã£ãŠããã®ã¯äœåºŠç®ãã§ããã
mod M ãé£ç¶ãã(Nã¯0ã«ã«ãŒããã)ãªãããŒãã«ã«çœ®ããã®ã§ããã®ãã㪠run ãæ±ãããRun以å€ã®ã«ãŒãã®ç·æ°ãææã«æ®ãã®ã§ããã®ç·åãæ±ãããã³ãŒãããããã«ãããã®ã ãã¡ã
ã³ãŒãã¯ãã¡ã
BFSã¯ãã¥ãŒã®å é ã«è¿œå ããããšãããã
é ç¹ãŸã§ã®è·é¢ãBFSã§æ±ããã°ããããã¹ã€ããã奿°åæŒãããå¶æ°åæŒãããã§ãé ç¹ãŸã§ã®è·é¢ãäºéãæãŠã°ãããæ±ããã®ã¯ç§»åããåæ°ãªã®ã§ãé ç¹éã®ç¶æ é·ç§»ã«å¯ŸããŠç§»åã¯è·é¢1ãã¹ã€ãããæŒãã®ã¯è·é¢0ãå ãããæçµçã«é ç¹Nã®äºéãã®è·é¢ã®çãæ¹ãçããã°ããã
èªåã®å®è£ ã2 WAs, 1 TLEãªã®ã§å ¬åŒè§£èª¬ãèªãã§å®è£ ãçŽããã1 TLEãããBFSã¯äžè¬ã«åŸã§èšªããé ç¹ããã¥ãŒã®æ«å°Ÿã«å ããããããã§ã¯ã¹ã€ãããæŒããŠãšãã®è·é¢0ã§é·ç§»ããå ã®é ç¹ããã¥ãŒã®å é ã«å ããªããã°ãªããªãã
ã³ãŒãã¯ãã¡ã
ãã£ãã·ã¥ã®ç¡å¹åãŸãã¯ããŒãžã§ã³ç®¡çãæãåºãã
ã¯ãšãª1ã¯ãæ¢ã«æ°åã«ããèŠçŽ ãç¡å¹åããŠ
ã³ãŒãã¯ãã¡ã
ãšã¬ã¬ã³ããªè§£æ³ãããã€ãããããæçŽã«è§£ããã
å·Šäžã ãå¡ãã€ã¶ããç¶æ
ãåæç¶æ
ãšããŠãããæ°å
std::map::size()
ã¯ããŒã®æ°ãè¿ãã®ã§ãèŠããæ°åã®æ°ã§ããã std::map::erase(A)
ã§ããŒããšåé€ãããšæ°ããã«æžããã³ãŒãããããã«ãããã®ã ãã¡ã
ã³ãŒãã¯ãã¡ã
ã²ãŒã æš
çžæãè² ããæåæãäžã€ã§ãããã°åã¡ãäžã€ããªããã°è² ãããšããæ±ºå®æšãDFSããã°ãããå ¬åŒè§£æ³ã§ã¯DPãšæžããŠããããå®è³ªçã«ã¯åãã§ããã
ããã ãã ãš 99_after_contest.txt
ã ãTLEãããããæå c
ã§å§ãŸã c
ã§çµããæååã2åãã£ããã«ãŒãããã ãã§å
æåŸæã®æ¡ä»¶ã¯å€ãããªãã®ã§ãŸãšããŠåé€ããã
ã²ãŒã æšå šäœã®å æå¿ å/åŸæå¿ åãšããµãã²ãŒã æšã®å æå¿ å/åŸæå¿ åããã£ã¡ãã«ãªãã®ã§ãæŽçããã³ãŒãããã¡ã
ã³ãŒãã¯ãã¡ã
宿°é¢æ°ã¯çŽ çŽã«æ¢çŽ¢ããã°ããã
äžã«åžã§ãããã€ãŸã埮åãåžžã«æ£ã§ããããšã¯åããã®ã§ãäžåæ¢çŽ¢ã§æ±ãŸãã
ã³ãŒãã¯ãã¡ã
è»æ¬ããã
ãããã¿ã ãããäžæ¬æããããããã§å
¥ãéãã¯ãã®ãã®ãè¡ãã€ãå
ã«è¡ãã¯ãã ã£ããšèšããããªã®ã§ãã®ããšãèšé²ãã€ã€ãã¿ã ããã
- åæç¶æ
ã¯
$B_1=1, B_2=2, ..., B_N=N$ -
$k$ æ¬ç®ãæãããšã-
$B_{A_k} = 1$ ãªã$B_{A_k+1}$ ã«è¡ãã¯ããš$X_k$ ã«èšé²ãã -
$B_{A_k+1} = 1$ ãªã$B_{A_k}$ ã«è¡ãã¯ããš$X_k$ ã«èšé²ãã - ã©ã¡ãã§ããªããã°ãã®ãŸãŸãªã®ã§
$X_k=0$ ãšèšé²ãã
-
- ãµã€ãã®ãã¿ã ãããšåããã
$swap(B_{A_k}, B_{A_{k+1}})$ ããã
ãã¿ã ããã®æçµç¶æ
ã«ãããŠ
ã³ãŒãã¯ãã¡ã
ADT(2024/5/14 17:30 start)ã§åããŠèŠãã®ã§ãè§£ããããšãªããªãšæãã€ã€åãçµãã ã20å46ç§ã§è§£ããŠããŸã£ããédiffããã®æéã§è§£ããã®ã¯ããããåããŠã§ã¯ãªããã
ããŒãžãã¯ãšunion-findæšã®åããæã§ããã
ã¯ãšãª1ã¯ããŒãžãã¯ã§éåãå䜵ãããéåãã®ãã®ã®å䜵
-
$Y$ ã空ãªãäœãããªã -
$X$ ã空ãªã$Y$ ãšäº€æãããstd::swap
ã䜿ããšé«éã«äº€æã§ããã -
$X,Y$ ãšã空ã§ã¯ãªãã$|X| \geq |Y|$ ãªã$Y$ ã®äžèº«ã$X$ ã«ããŒãžããŠã$Y$ ã空ã«ãã -
$X,Y$ ãšã空ã§ã¯ãªãã$|X| < |Y|$ ãªã$X$ ã®äžèº«ã$Y$ ã«ããŒãžããŠã$X,Y$ ã亀æããŠã$Y$ ã空ã«ãã
ãã®åŸ
ã¯ãšãª2ã¯
ã¯ãšãª3ã¯ããŒã«
Union-findæšã ãããã°éåãã®ãã®ã®å䜵ã¯èŠããªãããšã«åŸããæ°ãä»ãããæ¹è¯ç㯠ãã¡ã ã
ã³ãŒãã¯ãã¡ã
è§£æçã«æ±ããããããã ããè¿·ã£ããæ±ºãæã¡ããã
ã³ãŒãã¯ãã¡ã
æåŸ å€ã®å æ³æ§ã«ããæŒžååŒ
ãªã®ã ãåŒã®æå³ãçè§£ã§ããªããŸãŸACã§ããŠããããªãããšããæ°æã¡ã§ããã
å®è³ªçã«ã¯å ¬åŒè§£æ³2ãç§ãé ãDPã§å®è£ ãããã®ã§ãããèŠããã«ãã¡ãŒãžãäžããããã®æ»æåæ°ã®æåŸ å€ãDPã§æ±ãããå ¬åŒè§£èª¬éãåŒãDPãªã以äžã®éãã§ããã
ã³ãŒãã¯ãã¡ã
äžæ¬¡å DPã
äœãã§åé¡ããã®ãå®çªã§ãããiåç®ãŸã§ããjåç®ãŸã§éžãã§ãç·åã®äœããremã«ãªããããªçµã®ç·åãæŽæ°ããã
ã³ãŒãã¯ãã¡ã
埩掻è ã»ãã
ããéåã®äžäœ std::set
ã®èŠçŽ ã
std::set::rbegin
ã¯ç©ºã§ãªããã°æå€§ã®èŠçŽ ãæããæå€§ã®
ããŠã¹ã©ã€ãã£ã³ã°ãŠã£ã³ããŠ
ããã§çŽè¿ã®äžäœ
-
$i - m \leq 1$ ãªã$S$ ã«$i - m \leq 1$ çªç®ã®èŠçŽ ãããã°æšãŠã - ãã®ãšã
$S$ ã®åèšãæŽæ°ãã - ããã«
$U$ ã®æå°å€ãã€æ·»ãåã$i - m$ ãã倧ãããã®ãéžã¶ãããã§æ·»ãåã$i - m$ 以äžã®èŠçŽ ãèŠã€ããã$U$ ããæšãŠãªããšTLEããã
-
$|S| < K$ ãªãå¿ ã$S$ ã«$A_i$ ãå ãã -
$|S| = K$ ãªã$S$ ã®æå€§èŠçŽ ã$U$ ã«ç§»åããããã®ãšã$S$ ã®åèšãæŽæ°ããã
åŸã¯
ã³ãŒãã¯ãã¡ã
ããŸã«ã¯äœ¿ãã¹ããŒããã€ã³ã¿
-
$i$ ãããç®ã«ã€ããŠãæšæ§é ã®åå²ã0ã®ã¿ã§ããã°ã$x$ ã®ããã$i$ ã0ã«åºå®ããŠ$M$ ã®ããã$i$ ã0ã«ã§ããã0ã«åå²ããŠ$M_{i-1,0}$ ãæ±ãã$M_i = M_{i-1,0}$ ã§ããã -
$i$ ãããç®ã«ã€ããŠãæšæ§é ã®åå²ã1ã®ã¿ã§ããã°ã$x$ ã®ããã$i$ ã1ã«åºå®ããŠ$M$ ã®ããã$i$ ã0ã«ã§ããã1ã«åå²ããŠ$M_{i-1,1}$ ã®æå°å€ãæ±ãã$M_i = M_{i-1,1}$ ã§ããã - ããã§ãªããã°
$M$ ã®ããã$i$ ã¯0ãŸãã¯1ã®äž¡æ¹ãåãããã®ã§ã$M$ ã®æå€§å€ãšãã芳ç¹ããã¯$M$ ã®ãããã®$i$ ãç«ã£ãŠãããšèããŠããããã®åæã§ã$i-1$ ãããç®ã«ã€ããŠ0ã«ããå Žåãš1ã«ããå Žåã®$M$ ã®æå°å€ãéžã¶ããã®ãšã$M_i = min(M_{i-1,0}, M_{i-1,1}) + 2^i$ ã§ããã -
$i < 0$ ãããç®ã¯$M = 0$ ãšèãã
ãããååž°ããã°ã
ã³ãŒãã¯ãã¡ã
äºéšã°ã©ãã§ãªãã°ã©ãã«ãäœèšãªèŸºãè¶³ããŠãäºéšã°ã©ãã§ã¯ãªãã
é£çµæååè§£ã¯äŸã«ãã£ãŠunion-findæšã§ãããäºéšã°ã©ããã©ããã¯ãé£çµæåãBFSã§å®éã«åœ©è²ããã°åããã圩è²ã§ããªããªã蟺ãè¶³ããŠããã¯ãäºéšã°ã©ãã§ã¯ãªãã
ãã£ãŠé¡æãæºãããã®åæ°ã¯ããã¹ãŠã®é ç¹ã®çµã¿åããã®æ°ããããã§ã«é£çµãããŠããé ç¹éãšãäºéšã°ã©ãã®åãè²å士ãçµã¶èŸºãé€ããå®è£ ããŸãšãããš ãã®ãã ã«ãªãã
ã³ãŒãã¯ãã¡ã
AtCoder Daily Training HARD 2023/11/28 15:30 start ã®ããŒãã£ã«ã³ã³ãã¹ãã§åºé¡ããããåºæ¬çãªè§£æ³ãæãã€ããããããããééããŠèªåã§ã¯ACã§ããªãã£ãã
- ãã§ã€ãº1ã§
$N$ ãã倧ããªæ°ãåºããšãWAã§ã¯ãªãTLEããããããåãããªãã£ãã - å
¬åŒè§£èª¬2ã®æ¹æ³ãåããšãã¯ã
$L$ ã®æå°å€ã1ã«ããã0ã«ãããæ±ºããªããšãããªãã0ã«ãããšåºéããŸãããã©ããã®å€å®ã§ãå³åºéã®å§ãŸãã$2^i$ ã«ã§ããŠäŸ¿å©ã§ããã
å ¬åŒè§£èª¬1ã¯sparse tableãçšããŠåºéã®äžŠã¹æ¹ãç°ãªãããå®è³ªçã«ã¯åãã§ãããå®è£ 㯠ãã¡ã ã
ã³ãŒãã¯ãã¡ã
æ¬åŒ§ãšèšãã°ãããã·ã¥ããŠã³ãªãŒãããã³ãšã¹ã¿ãã¯ã§ããã
æ¬åŒ§ãšäœµããŠãæ¬åŒ§éã®ããŒã«ãã¹ã¿ãã¯ã«ç©ãã°ãã¹ã¿ãã¯ããæ¬åŒ§ãåãåºããæã«éãæ¬åŒ§ãšéãæ¬åŒ§ã«å¯Ÿå¿ããããŒã«ãåãåºããã
ã³ãŒãã¯ãã¡ã
äžä¹æ ¹ãªã®ã§
-
$q \leq 10^6$ ãæ±ºãæã¡ããŠæ±ãŸã$p$ ã¯ã$p$ ãæŽæ°ãã©ãã調ã¹ãã°åãã -
$q > 10^6$ ãªã$p < 10^6$ ãªã®ã§ã$p \leq 10^6$ ãæ±ºãæã¡ããŠæ±ãã$q$ ã¯$q$ ãæŽæ°ãã©ãã調ã¹ãã°åãã - äž¡è
ã§æ±ãŸã
$p, q$ ãéãªã£ãŠããŠã(äžçå·ãéã«çµããšãããªã)ãéè€ãåŸããé€ãã°ãã
å ¬åŒè§£èª¬ã¯ãã£ãšäœç³»çã§ããã
ã³ãŒãã¯ãã¡ã
ç°¡åãªåé¡ã ãšæã£ãããå顿ãããèªãã
åçŽãã¹æ°ã®åèšã¯ãDFSã§åãç¹ãäºåºŠèŸ¿ããªããã¹ãæ°ãäžããã°æ±ãŸããé·ã0ã®ãã¹ãæ°ããã®ã§ãããç¹ã«å°éããããã¹ã1ã€å¢ãããããããå ã«å°éå¯èœãªãã¹ã®æ°ãå ããã°ãããåé ç¹ã®æ¬¡æ°ã¯10以äžããšããã®ã¯DFSã®å®è£ äžç¹ã«äœ¿ãéã¯ç¡ã(å šæ¢çŽ¢ããŠãèšç®éãå°ãªããšããããšããã)ã
è§£çã¯æå€§1000000ãªã®ã§ãéäžã§ãã¹æ°ã®åèšã1000000以äžã«ãªã£ããæ¢çŽ¢ãæã¡åããæã¡åããªããšTLEããã
ã³ãŒãã¯ãã¡ã
ããŒãªã³ã°ããã·ã¥ã¯çµåã§ããã
æååã®æ£é ãšéé ã«ã€ããŠããŒãªã³ã°ããã·ã¥ãæ±ããã
éé ã®
åŸã¯å
é ãã -1
ã§ããã
ã³ãŒãã¯ãã¡ã
å¯èœãã©ãã倿ããã ããªããæé ãæ±ããå¿ èŠã¯ãªãã
ååã®å€æŽé¢ä¿ã«åŸªç°åç §ããªããã°ãäŸåé¢ä¿ã®é£éã®å ã«ããç©ããé ã«åŠçããã°ããããªã®ã§ãµã€ã¯ã«ãããã調ã¹ãã ãã§ãããUnion-findãç°¡åã§ãSCCã䜿ããšãã£ãš ç°¡å ã§ããã
ã³ãŒãã¯ãã¡ã
äžè¬æ§ã倱ããªã
äžé±éã
çãã¯
ã³ãŒãã¯ãã¡ã
å ¥åã®ç¯å²ããã確ãããã
ã¡ããã©
ã³ãŒãã¯ãã¡ã
ã¯ãŒã·ã£ã«ããã€ãæ³ã§ã¯ããã
ã®ã ãããåç£ã®äŸ¡å€ãé£ãããã¯ãŒã·ã£ã«ããã€ãæ³ã®æŽæ°åŒã§ã
- è·é¢ãçããªããªããçµç±ããŠãåç£ãè²·ããè·é¢ãçããªãã
- è·é¢ãåããªããçµç±ããŠãåç£ãè²·ããè·é¢ã¯å€ãããªãã
ã®ã¯æãã€ããåé¡ã¯ãããªãããã«æ«å®çãªãåç£ã®åèšäŸ¡å€ã衚çŸããããšã§
- åæç¶æ ã¯ãå°çå°ã®ãåç£ã®äŸ¡å€ã«ãã
- çããåºåããæç¹ã§ãåºçºå°ã®ãåç£ã®äŸ¡å€ãè¶³ã
ã®ãæãã€ããªãã
ã³ãŒãã¯ãã¡ã
å ¬åŒè§£èª¬éããäžåœå°äœå®çã®ç·Žç¿ã§ããã
äºãã«çãªé€æ°
æåŸã«
ã³ãŒãã¯ãã¡ã
äžèŽé¢ä¿ã¯å調æžå°ã
ãããããæååã«ãããããªãæåã®çµãå ãããããããããªãæååã«ãªãããã£ãŠæåã®çµãå ããŠããã°ãæååãããããããã©ããã¯é次çã«åããã
ã³ãŒãã¯ãã¡ã
èŸæžé ã§æ¯èŒããã
å
é ãã»ãŒäžèŽããæååã¯ãæååãèŸæžé ã§æ¯èŒãããšã¿ã€ãããäŸãã° ab < abc < abd ã«ãªã(å
¬åŒè§£èª¬ã®äºçªç®ã«èª¬æããã)ãã¿ãŒã²ãã
èšç®éãåé¡ã«ãªããNåã®æååã«ã€ã㊠for(i in 1:N)
ã§LCPãæ±ãããšTLEããããªã®ã§
-
{str, index}
ããœãŒãããŠãæååãäœçªç®ã ã£ããä¿æããç¶æ ã§æååããœãŒãã - ãœãŒãããæååã®å é ããé çªã«LCPãæ±ããŠ
- å
index
ã«ã€ããŠLCPãèšé²ãã
ãšTLEããçããæ±ãŸãããšããã®ãåãããªãã£ããæåãšæåŸã®æååã«æ°ãä»ããŠå®è£ ãããš ãã¡ã
ããäžã€ã®æ¹æ³ã¯ãTrieæšã§æ±ºãŸãåãäœãããšã§ãããæ±ºãŸãåã®æšæ§é ã«ãããŠãèã«æãè¿ãåå²ç¹ãŸãã¯ãèã«æãè¿ã
ã³ãŒãã¯ãã¡ã
äžå€éã«æ³šç®ããã
ã³ãŒãã¯ãã¡ã
äžæ¬¡å DPã
å°éå¯èœãã©ããã ãäŒæ¬ããã°ããã
ã³ãŒãã¯ãã¡ã
蟺ãå°ãªã
ã®ã§äºäººã®äœçœ®
ã³ãŒãã¯ãã¡ã
äœãã§åé¡ããã
ã³ãŒãã¯ãã¡ã
环ç©å¯äžåºŠã
ããäºãæã®æåã®çµããäœåã®åæã«å«ãŸããããšãã环ç©å¯äžåºŠãèããã
ãŸãåæã«ããããã«å€æŽããå¿
èŠã®ããèŠçŽ ã®çµã«ã€ããŠãçµã®æ°ã®æå€§å€ãæ±ããã
åãèŠçŽ ãäºã€ããã°å€æŽäžèŠãªã®ã§ãã®ãããªçµãšãçµãäœåã®åæã«å¯äžãããæ°ãããããèŠçŽ
å·Šäœçœã®æ¹ãå°ãããšããŠãäœåã®åæã«å¯äžãããã¯ãäœçœ®
æåŸã«ãåæã«ããããã«å€æŽããå¿ èŠã®ããèŠçŽ ã®çµã®æå€§å€ããã倿ŽããªããŠããçµã®æ°ãåŒããšçããæ±ãŸãã
ã³ãŒãã¯ãã¡ã
äžæ¬¡å DPã
é£ã®ã«ãŒããšåããã®ãéžã¶ããšãããã®ããªãã®ãã ãã§ã衚ã®ã¿ãè£ã®ã¿ã衚è£äž¡æ¹ã®ã©ãã«ãããæ±ºãŸãããããåºã«åãããçµã¿åããæ°ãDPã§äŒæ¬ããã
ã³ãŒãã¯ãã¡ã
ããããžã«ã«ãœãŒãã
ããããžã«ã«ãœãŒãå¯èœã§ããããã€æ¬¡ã«éžã¶é ç¹ãäžæ(out degreeã1以äž)ãªãé¡æãæºããã
ã³ãŒãã¯ãã¡ã
ååŸãããã©ã
ã¹ã¿ãŒã(éœåž1)ããåéœåžãšããŽãŒã«(éœåžN)ããåéœåžãžã®æçè·é¢ã¯DPã§æ±ãŸãããã£ãŠéœåž
ã³ãŒãã¯ãã¡ã
Union-findæšã
é£çµæåã®ä»£è¡šããŒããåããã°ãããã«å±ããŠããé ç¹ãšèŸºãåããã
ã³ãŒãã¯ãã¡ã
ååž°ç
解説ç¡ãã§ã¯è§£ããªãã£ããããé ç¹ããå°éå¯èœãªé ç¹ã«ã¯ãã¹ãŠèŸºã匵ãããã
ã³ãŒãã¯ãã¡ã
äžåæ¢çŽ¢
æ£äžè§åœ¢ãé·æ¹åœ¢ã«æ¥ããŠãããšããŠãè§åºŠãå€ããã°æå€§å€ãåãããé·æ¹åœ¢ã瞊é·(ãããã¯æšªé·)ã«åºå®ãããšããçãæ¹ã®é·ãã¯åäœ1ã«åºå®ãããšããè§åºŠã¯60床ãŸã§ãšã工倫ããã
ã³ãŒãã¯ãã¡ã
次æ°ã«æ³šæããã
é£çµæååè§£ããŠãã«ãŒããªããã¹ãŠã®é ç¹ã®æ¬¡æ°ã2ãªã®ã§åãããæ¬¡æ°1ãèŠã€ããã°ã«ãŒãã§ã¯ãªããåèŠã§è§£ããªãã£ãã®ã§å®è£ ãããã®ã ãã¡ã
ã³ãŒãã¯ãã¡ã
挞ååŒãè¡å衚çŸããŠãããªã³ã°ãããšè§£ãããããäžã€ã®æ¹æ³ã¯ã __int128
ãçšããŠ
-
$A-1$ ã®ãšãã¯ãã®åŒã¯äœ¿ããªãã®ã§ç¹å¥æ±ããã -
$A^X \quad mod \quad M \equiv 0$ ã®ãšãã¯ååãè² ã«ãªããªãããã«ãã
æåŸã«
static_cast<Num>(((sum_a + nm * (a - 1) - 1) / (a - 1)) % nm)
ã³ãŒãã¯ãã¡ã
解説ç¡ãã§ã¯è§£ããªãã£ãã
- 2鲿°,
$b$ 鲿°ã$b-1$ 鲿°ã¯æããã«è©²åœãããéè€ããŠæ°ããªãããæ³šæããã - 2æ¡ã«ã€ããŠã¯ã
$b$ 鲿³ã§0ãŸãã¯1ã ãã®æ¡ããæãæ°ã€ãŸã$10, 11$ ãç·åœããããŠããããã§è¡šçŸã§ãããã©ãã調ã¹ããåºæ°ã¯ã ããã$b$ ã®2乿 ¹ä»è¿ãªã®ã§ç·åœããã§èª¿ã¹ããããèããã$11$ ã¯$b-1$ 鲿°ã ã£ãã - 3æ¡ã«ã€ããŠãåæ§ã«ã
$b$ 鲿³ã§0ãŸãã¯1ã ãã®æ¡ããæãæ°ã€ãŸã$100, 101, 110, 1111$ ãç·åœããããŠããããã§è¡šçŸã§ãããã©ãã調ã¹ããåºæ°ã¯ã ããã$b$ ã®3乿 ¹ä»è¿ãªã®ã§ç·åœããã§èª¿ã¹ãã - 4æ¡ä»¥äžã«ã€ããŠã¯
$b=2..32000$ ã«ã€ããŠã0ãŸãã¯1ã ãã®æ¡ã§è¡šçŸã§ãããã©ãã調ã¹ãã$b$ 鲿³è¡šèšãå®éã«äœãã°åããã
ã³ãŒãã¯ãã¡ã
std::setã¯äŸ¿å©ã
åªå
床ãããéå(std::priority_queue
, std::set
)ã§ç®¡çãããç·åœ¢æéã§ãè§£ãããããã
ã³ãŒãã¯ãã¡ã
ãã£ãã«ãªãEåé¡è¶diffã§ããã
äœãã«ãããè§£ããã®ã§å¿ããŠãããå°ºåãæ³ã§è§£ããããããã«æžãçŽããš ãã®ãã ã«ãªãã
ã³ãŒãã¯ãã¡ã
å°ããããã«ããã³ãŒãã ãã¡ã ãéååã«è§£ããã®ã ããèŠããã«äºåæ¢çŽ¢åé¡ã«çœ®ãæãããšè§£ããã
æ¿åºŠã«ã¯å æ³æ§ãæãç«ããªããã€ãŸã
ã³ãŒãã¯ãã¡ã
ãªã€ã©ãŒãã¢ãŒãšã»ã°ã¡ã³ãæšã§è§£ããã
ã³ãŒãã¯ãã¡ã
å¶å¥ã«æ³šç®ããã
å¬ããå=åºçŸåæ°ãå¶æ°ã§ãããæ°åã¯10éããæ°åã®åºçŸåæ°ã奿°ãå¶æ°ã¯
ã³ãŒãã¯ãã¡ã
å²ãåããªããã°ãå²ãåãããŸã§è¶³ãã°ããã
ã³ãŒãã¯ãã¡ã
é£ããèããããªãã
ãµã€ã¯ã«ãããæãã«åãç¶ããããšãå¯èœãã©ããèããããµã€ã¯ã«ã«è³ãæã¯äžåé¢ä¿ãªãã
-
$i$ ããµã€ã¯ã«ã«ãããªãã髿©åã¯ãµã€ã¯ã«äžã®é©åãªå§ç¹ãããµã€ã¯ã«ãåãç¶ããŠ$i$ ã«éããããšãã§ãããéæšåã$K_i$ ã«äœãéžãŒãããããæ¢ããããšã¯ã§ããªãã -
$i$ ããµã€ã¯ã«å€ã«ãããªããéæšåã¯ãµã€ã¯ã«ã«éããåå倧ããª$K_i$ ãæå®ããŠãšããã$K_i=N$ ã«ããã°ã髿©åã¯ãµã€ã¯ã«ã«å ¥ãããµã€ã¯ã«å€ã®$i$ ã§æ¢ãŸãããšã¯ã§ããªãã
ãµã€ã¯ã«ã¯äžã€ãšã¯éããªãã®ã§ãé£çµæååè§£ããŠããããã®æå¹ã°ã©ãã«ã€ããŠãµã€ã¯ã«ãæ±ããããµã€ã¯ã«ã®é ç¹æ°ã®ç·åãã髿©åãåã€åæ°ã§ããã
匷é£çµæååè§£(SCC: Strongly Connected Component)ã䜿ããšç°¡æœã« å®è£ ã§ããã以äžã®ããã«è¡ãã
- èªå·±ã«ãŒãã¯ãµã€ã¯ã«ã«ãããšã¿ãªã
- 匷é£çµæååè§£ããé ç¹çŸ€ã§ãèŠçŽ æ°ã1ã®ãã®ã¯ãµã€ã¯ã«ã§ã¯ãªã(ãã ãèªå·±ã«ãŒãã¯äžèšã®éã)ãèŠçŽ æ°ã2以äžãªããµã€ã¯ã«ã§ããã
ã³ãŒãã¯ãã¡ã
ãŠãŒã¯ãªããã®äºé€æ³ã§ããã
ãŠãŒã¯ãªããã®äºé€æ³ã§äœåå²ã£ãããæ°ããã
ã³ãŒãã¯ãã¡ã
std::set
ãš std::priority_queue
ã®äœ¿ãã©ããã§ããã
ãŸãäœãè²·ããªã=åèš0åãåæç¶æ ãšããããã®ç¶æ ããããçŒãã1åè²·ã£ããšãã®åèšéé¡ããNçš®é¡ã«å¯ŸããŠæ±ãããæ±ããåèšéé¡ã«å¯ŸããŠããã¯ã远å ã®ããçŒãã1åè²·ã£ããšãã®åèšéé¡ãæ±ããããšããã®ãç¹°ãè¿ããåèšéé¡ããœãŒãæžã®ç¶æ ã§ç®¡çããŠãK+1å(åèš0åãããã®ã§)ä»¥äžæ±ãŸã£ããç¹°ãè¿ãã®ãæ¢ããã
- åèšéé¡ãæäœé¡ãã䞊ã¹ããã®ã
std::set
ã§ç®¡çãããåèšéé¡ãåãããçŒãã®çµã¿åããã¯1çš®é¡ããšããã®ãéœåããæ±ããã - ããçŒãã1çš®é¡è²·ãåã®éé¡ã¯
std::priority_queue
ã«åºãå ¥ãããŠç®¡çãã -
std::priority_queue
ããåãåºããéé¡ãstd::set
ã«æ¿å ¥ãã - ããçŒãã1çš®é¡è²·ã£ãåŸã®éé¡ã
std::priority_queue
ã«åºãå ¥ãããŠç®¡çããããã ãstd::set
ã«ãã§ã«ããéé¡ã¯ç¡èŠããã - ããçŒãã1çš®é¡è²·ã£ãåŸã®éé¡ãæäœéé¡ãã K+1 çš®é¡æ±ãŸã£ãŠããæ¡ä»¶ã¯ã
std::set
ã®èŠçŽ æ°ãK+1以äžãã€ãããçŒãã1çš®é¡è²·ã£ãåŸã®éé¡ããã¹ãŠstd::set
ã®æå€§éé¡ãè¶ ããæã§ããããã®ãšãã¯std::set
ã®å°ããæ¹ããæ°ããŠK+1çªç®ã®èŠçŽ ãæŽæ°ãããããšã¯ææ©ãªãããã§ããã
äžèšã®æŽæ°ãæã¡åã£ãã std::set
ãå
é ããã¿ãŠãK+1ã®èŠçŽ ãåºåããã
ã³ãŒãã¯ãã¡ã
mod M æŒç®ãè¡ãã
Qã®å€§ããããã
- ã¯ãšãª1ã¯ã
$S$ ã10åããŠ$x$ è¶³ããŠãã mod - ã¯ãšãª2ã¯ã å é ã®æ°å * 10ã®æ¡æ°ä¹ ãåŒããŠãã mod
- ã¯ãšãª3ã¯ã mod ã§ç®¡çããŠãã
$S$ ãåºåãã
ã³ãŒãã¯ãã¡ã
確çã·ãã¥ã¬ãŒã·ã§ã³åã³
ABC 275-Eãšã»ãšãã©åãã§ãããéãã¯ãå æããŽãŒã«ã«ãã©ãçãã確çã«ãåŸæã (1-æ¢ã«ãŽãŒã«ããŠãã確ç) ãæããããšã§ãããä»åã¯åŒãDPã«ããã
ã³ãŒãã¯ãã¡ã
å®ã¯é³©ã®å·£åç
ãŸããã¹ãŠã®é0ã®ãã¹ã«ã€ããŠçããæ±ãããè¡ã®ç·å+åã®ç·å-ãã¹ã®å€ã«ã€ããŠæå€§å€ãæ±ããã
次ã«ãè¡ã®ç·åãæå€§ã®è¡(è€æ°ãããããããªã)ãšãåã®ç·åãæå€§ã®å(è€æ°ãããããããªã)ã®çµã¿åãããå
šæ¢çŽ¢ãããäœãå
šæ¢çŽ¢ããããšèšãã°ãè¡ãšåã®äº€ç¹ã«0ã®ãã¹ããããã©ããã§ããããã®ãŸãŸã ãš
亀ç¹ã«0ã®ãã¹ããããªãè¡ã®ç·å+åã®ç·åãçãããªããã°æåã«æ±ããè¡ã®ç·å+åã®ç·å-ãã¹ã®å€ã«ã€ããŠæå€§å€ãçãã§ãããäœåãªåŠçãçããŠç°¡æœã«ããã®ã ãã¡ã
ã³ãŒãã¯ãã¡ã
äºåæ¢çŽ¢ã§ããã
çãã«åŸã£ãŠè§£ã®åè£ãååã«çµãã°ã20åã§è§£ãäžæã«ãªãã¯ãã§ãããäžç¹ã«ã€ããŠãžã£ããžã«è³ªåããŠã
- ãžã£ããžã0ãè¿ãããåŸåã«å€åç¹ããããååã¯å šéš0ãããããªãããåŸåã«ã¯0ãã1ã«å€ããå Žæãå°ãªããšãäžãæããã
- ãžã£ããžã1ãè¿ãããåŸåã«å€åç¹ããããåŸåã¯å šéš1ãããããªãããååã«ã¯0ãã1ã«å€ããå Žæãå°ãªããšãäžãæããã
ã³ãŒãã¯ãã¡ã
std::optional
é ç¹ã®è²ãçœ/é»/åãããªããšããã®ãã std::vector<std::optional<bool>>
ã§ç®¡çããã
åé ç¹ããä»ã®é ç¹ãžã®è·é¢ãBFSã§æ±ããã
ãã®åŸã次ã«é ç¹ No
ãšåºåããŠçµãããå¡ãããªãç¹ã«äœãããç¶ããã
ãããããšçœãå¡ããªããã°ãªããªãé ç¹ãšãçœãå¡ãå¿
èŠããªãé ç¹ãåããããã¹ãŠçœãå¡ããèšãæããã°çœãå¡ãå¿
èŠããªãé ç¹ããªããã° No
ãšåºåãããããã§ãªããã°çœãå¡ããªããã°ãªããªãé ç¹ã 0
ãçœãå¡ãå¿
èŠããªãé ç¹ã 1
ãšããŠåºåããã
ã³ãŒãã¯ãã¡ã
环ä¹ã®åé¡ã¯ãæ¢çŽ¢ç¯å²ã®çµãæ¹ã課é¡ã§ããã
- çŽ æ°
$a$ ã$a^5 \leq N$ ãŸã§å šæ¢çŽ¢ãã - çŽ æ°
$b (> a)$ ã$a^2 \times b^3 \leq N$ ãŸã§å šæ¢çŽ¢ãã - çŽ æ°
$c$ ã®äžéãšäžéãäºåæ¢çŽ¢ãããäžéã¯$b+1$ ãäžéã¯$n / (a \times a \times b)$
çŽ æ°ãã®ãã®ãæ¢çŽ¢ãããããäœçªç®ã«å°ããçŽ æ°ãã€ã³ããã¯ã¹ã std::upper_bound
ã§æ±ããæ¹ãç°¡åã§ããã
å
¬åŒè§£èª¬ã«ããéãã
ã³ãŒãã¯ãã¡ã
äžæ¬¡å DP
äžæ¬¡å
DPãããã ã¢ããã«æ±ãããªãã
-
$x$ ãèšããŸããŠã$dp[i+1][0..i][0..i]$ ãäœã -
$y$ ãèšããŸããŠã$dp[0..i+1][i+1][0..i]$ ãäœã -
$z$ ãèšããŸããŠã$dp[0..i+1][0..i+1][i+1]$ ãäœã
ãšãããšã
- ç®ã2:
$2^{x-1}3^y5^z$ ãã$2^x3^y5^z$ - ç®ã3:
$2^{x}3^{y-1}5^z$ ãã$2^x3^y5^z$ - ç®ã4:
$2^{x-2}3^y5^z$ ãã$2^x3^y5^z$ - ç®ã5:
$2^x3^y5^{z-1}$ ãã$2^x3^y5^z$ - ç®ã6:
$2^{x-1}3^{y-1}5^z$ ãã$2^x3^y5^z$
åå倧ããª
å ¬åŒè§£èª¬ã¯ã¡ã¢åååž°ã䜿ã£ãã¯ããã«ç°¡æœãªã³ãŒãã§ãããå®è£ ãããš ãã¡ã