ABC lessons learned2 - zettsu-t/zettsu-t.github.io GitHub Wiki
ABC 6,8åäœå¶(126..ææ°)ã®Dåé¡ãã ãããè§£ããã®ã§ãããããåŸãæèšããŸãšããŠãããŸãã
ã³ãŒãã¯ãã¡ã
ãã¹ãé ç¹ãã¿ãªããŠããããã¹ããä»ã®ãã¹ãžã®æçè·é¢ãæ±ããã126-Dãšåæ§ã«BFSã§æ±ãŸããæšã§ã¯ãªãã®ã§ãæ¢ç¥ã®æçè·é¢ã§ã¯ãªããã¹ã¯ç§»åããªã(ç§»åãããšç¡éã«ãŒãã«ãªã)ã
ã³ãŒãã¯ãã¡ã
çµã¿åããç·æ°ãšçޝç©åãäžæã貯ããã
- 䞡端ãéžãã§æ®ã
$k-2$ åéžã¶ - å
é (1çªç®)ãšæåŸã®å(n-1çªç®)ãéžãã§æåŸ(nçªç®)ã¯éžã°ãªããä»ã
$k-2$ åéžã¶ã - å
é (1çªç®)ãšæåŸã®åã®å(n-2çªç®)ãéžãã§ãã以åŸã¯éžã°ãªããä»ã
$k-2$ åéžã¶ã
... ãšããæ¹æ³ãèãããèŠããã«æåãšæåŸã®èŠçŽ ã®æ·»ãåã®å·®(å¹
-1)ã
æåãšæåŸã®èŠçŽ ã®æ·»ãåã®å·®ã
ãã£ãŠæ·»ãåã®å¹
ã
ã³ãŒãã¯ãã¡ã
äºç¹ãéãæå°ã®åãŸãã¯äžç¹ãéãæå°ã®åã®ãã¡ãã©ã¡ããå°ããæ¹ã§ãããããåã®äžå¿ãšååŸã決ãããšãã«ãä»ã®é ç¹ãåãŸã£ãŠãããã©ããã¯ç·åœããã§åããã
äºç¹ãéãæå°ã®åã«ã€ããŠã¯ãäžç¹ãåã®äžå¿ã«ããã°ããã座æšãããããã2åããè·é¢ã®äºä¹ã§æ¯èŒãããšãèšç®èª€å·®ãç¡ããªãã
äžç¹ãéãæå°ã®åã«ã€ããŠã¯ã倿¥åã®äžå¿ãå ¬åŒã§æ±ããã忝ã0ã®ãšããç¹å¥æ±ããããäžå¿ã®åº§æšã¯æŽæ°ã«ãªããªãã®ã§ãäžå¿ããä»ã®åº§æšã®è·é¢ãæ¯èŒãããšãã¯èš±å®¹èª€å·®ãæãããã
ã³ãŒãã¯ãã¡ã
Nã200000ãšèªãã§ãããããæ¢çŽ¢ããããæ°ãäžããæ¹ãæ©ãå®è£ ã§ããããšåã¥ãã
å
é ãšæ«å°Ÿã®çµã¯9x9=81éããããªãã®ã§ã
ã³ãŒãã¯ãã¡ã
ææããæã«éèŠã
std::lcm()
ã䜿ããšãªãŒããŒãããŒããã®ã§ã
ããã§
ã³ãŒãã¯ãã¡ã
äžæãç¶æ é·ç§»ããŸãšããã°ãç¶æ æ°ãææ°ã«ãªãã®ãé²ããã
ã¢ã³ã¹ã¿ãŒãã©ãããé çªã§æ»æããŠããäœåã0ã«ãªããŸã§ã®äœåã®æžãæ¹ã¯åãããšããããšãéèŠã§ããããã£ãŠäœåã®æžãæ¹ã®çµè·¯ã¯äžéãã ã(2ã§ç¹°ãè¿ãå²ã)ã§ãããäœåã®ã¢ã³ã¹ã¿ãŒãäœäœãããã ãæ°ããã°æ»æåæ°ã«ãªãã
ã³ãŒãã¯ãã¡ã
Greedyã ãšæã£ããDPã ã£ãã
ãšããããšã§DPã§è§£ãããã®ãšãã
ã³ãŒãã¯ãã¡ã
é å»¶è©äŸ¡ãããæ³
è§£ãæ¹ã¯è€æ°ããããé
å»¶è©äŸ¡ãããæ³ãåããããããã¢ã³ã¹ã¿ãŒã®åº§æš
ã³ãŒãã¯ãã¡ã
æåŸ å€ã®å æ³æ§ã䜿ãã
飿¥ããKåã®ãµã€ã³ããšããã®ã§ããµã€ã³ãKåã®æåŸ å€ã¯ããµã€ã³ãã1åå ããŠK+1åã«ãªã£ãããæåŸã«å ãããµã€ã³ãã®æåŸ å€ãæžãããæåŸ å€ã®å æ³æ§ãããããæãç«ã€ãç§»åå¹³åã®æ±ãæ¹ãšäžç·ã§ããã
ã³ãŒãã¯ãã¡ã
æ¡ãäžããèŠãããäžããèŠããã
äžã®æ¡ããèŠãã®ãæ£è§£ã§ãããããããããäžã®æ¡ããèŠãŠãè§£ããã®ãããããªãããç§ã«ã¯è§£ããªãã£ããå
¬åŒè§£èª¬ãèŠããšååž°ã§è§£ãããšè§£ãããããå°ãèªã¿è§£ããšä»¥äžã®ããã«ãªããæ°åå
-
$k=0$ ãªã$a=b=c=d=0$ ã®1éã -
$k<4$ ã€ãŸã$k$ ã$abcd$ ããçããããªã0éã
ãç¹å¥æ±ããããæ¬¡ã«äžã®æ¡
-
$d=0$ ãã€$inCarry=1$ ãªããäžã®æ¡$...$ ãžã®ç¹°ãäžãããããããã€äžã®æ¡$c$ ããã®ç¹°ãäžãããå¿ ãèµ·ãã($outCarry=1$ )ããã以å€ã§ãäžã®æ¡ããã®ç¹°ãäžãããèµ·ãããã©ããã¯ç¶æ³æ¬¡ç¬¬ã§ãã($outCarry=0$ )ã -
$inCarry=1$ ãªã$d$ ã1åŒããã€ãŸã$d:=(d+9) mod 10$ ã«ããã
ããã§
-
$d$ ããããã®æ¡ã¯0ãšããããšã«ããŠã$k$ ãæ¶è²»ããªãããã®çµã¿åããã®æ°ã¯ãæ«å°Ÿãåé€ããæ°åã®äžŠã³ãç¹°ãäžãããé0ã®æ°åã®æ°ããããã$(abc, outCarry, k)$ ã®å Žåã«ã€ããŠæ±ãããã®ã§ãã(ãªã®ã§ååž°çå®çŸ©ã§ãã)ã -
$d>0$ ãªããã®æ¡ã¯é0ã®å€$1..d$ ã®ããããã«ããŠã$k$ ã1æ¶è²»ããããã®çµã¿åããã®æ°ã¯ãåæ§ã«$(abc, outCarry, k-1)$ ã®å Žåã«ã€ããŠæ±ãããã®ã$d$ åããå€ã§ããã -
$d<9$ ãªããã®æ¡ã¯é0ã®å€$d+1..9$ ã®ããããã«ããŠã$k$ ã1æ¶è²»ããããã®çµã¿åããã®æ°ã¯ãåæ§ã«$(abc, 1, k-1)$ ã®å Žåã«ã€ããŠæ±ãããã®ã$9-d$ åããå€ã§ãããäžã®æ¡ããç¹°ãäžããããªããšã$d$ ãã倧ããªæ°åããã®æ¡ã«èšå®ã§ããªãã
ååž°åŒã³åºãã§åŒæ°ã§äœåºŠãåŒã³åºãããšã«åããŠã¡ã¢åãããšãããååž°ãšã¡ã¢åããããã®ããŒã¯ã
ã³ãŒãã¯ãã¡ã
åã§è§£ããã
åããçŽäº€åº§æšç³»(åã¯Xãå¢ããæ¹åã«å³ãè¡ã¯Yãå¢ããæ¹åã«äž)ãšãããç©åœ¢é å
ç©åœ¢é å
环ç©å
å®ã¯äºæ¬¡å 环ç©åã§è§£ãããããããã©ããã£ãŠé«éåããã®ãããããªãã
ã³ãŒãã¯ãã¡ã
å°ã£ããäºåæ¢çŽ¢ã
äºæ°ãæžããçµæããæ£ããŒããè² ã®äžéãã«åããŠã
ã³ãŒãã¯ãã¡ã
154-EãšäŒŒãŠããã
åºæ¬çã«ã¯154-Eãšåæ§ãªã®ã ããå
¥åã倧ããã®ã§DFSã¯äœ¿ãããBFSãããšTLEããããªã®ã§åçŽã«ã¡ã¢åããªããã«ãŒããããã¡ã¢åããã®ã¯ã(äžããäœæ¡ç®ãŸã§ã«ãäžã®æ¡ããç¹°äžãããã£ããã©ãã) ã®ãšã䜿ãçŽå¹£ã®æå°ææ°
154-Eã®ç¹°ãäžãããšåæ§ã«ãããæ¡
-
$d:=d+inCarry$ ã«ã€ã㊠-
$d<10$ ãªããã®å Žã§$d$ æçŽå¹£ãæã -
$d>0$ ãªãäžã®æ¡ããåããŠãé£ãããããããšã«ããŠ$10-d$ æçŽå¹£ãæã
æäžäœæ¡ãç¹°ãäžãã£ããšããèæ
®ããå¿
èŠããã(ããããªããš91ã®çãã3ã§ãªã2ã«ãªã£ãŠããŸã)ããã®ããã«ã¯ã
ã³ãŒãã¯ãã¡ã
äºé å®çã«å¯Ÿããåºæ¬çãªç¥èãåãããããããšãããªã³ã°ã®äœ¿ãã©ããã§ããã
Nãã0..Néãéžã¶çµã¿åããã®ç·åã¯
nã
ãããŸã§ããã
ã³ãŒãã¯ãã¡ã
kåã®ãèåãn人ã«åããã
èªåã§ã¯è§£ããããã¡ãã®è§£èª¬ãçšããããã®è§£èª¬éãå®è£ ããã°ããã
解説äžã
ã³ãŒãã¯ãã¡ã
Union-findæšãç¥ã£ãŠãããšè§£ãããç¥ããªããšè§£ããªããå®è£ ã倧å€ãªåé¡ã§ããã
åéã®åéã¯åéãšããæšç§»é¢ä¿ã¯ãåéé¢ä¿ãã°ã©ãã§è¡šçŸããæã®é£çµæåã§ããããªã®ã§ããããã®é£çµæåã®é ç¹æ°ãããæ¢ã«åéã§ããé¢ä¿ã®æ°ãšã åãé£çµæåã§ ãããã¯ããŠããé¢ä¿ã®æ°ãåŒããç°ãªãé£çµæåã§ãããã¯ããŠããé¢ä¿ã¯ãåéã®åéã¯åéãšããæšç§»é¢ä¿ã¯æãç«ããªãã®ã§åŒããªãã
ã³ãŒãã¯ãã¡ã
忥ãããã
type 2ã¯ãšãªããã»ã°ã¡ã³ãæšã飿³ãããæåã¯è±å°æåãããªãã®ã ããã26æ¬ã®ã»ã°ã¡ã³ãæšãäœããããåºéã«a,b, ..., z ããããã©ããæŽæ°ããŠèª¿ã¹ãã°ãããtype 1 ã¯ãšãªã§å€æŽåã®æåãäœã§ãã£ããã¯ã
ã³ãŒãã¯ãã¡ã
ã³ã¬ã¯ã·ã§ã³ãå転ããã®ã¯ã³ã¹ããé«ãããå転ãããšã¿ãªãã®ãã©ã°1åæžãæããã ãã§ãããæå ã®åã«å¯ŸããŠã
- æå ã®åãå転ããŠããªããšãã«å é ã«è¿œå ããã®ã¯ãåã®å é ã«è¿œå ãã
- æå ã®åãå転ããŠããªããšãã«æ«å°Ÿã«è¿œå ããã®ã¯ãåã®æ«å°Ÿã«è¿œå ãã
- æå ã®åãå転ããŠãããšãã«å é ã«è¿œå ããã®ã¯ãåã®æ«å°Ÿã«è¿œå ãã
- æå ã®åãå転ããŠãããšãã«æ«å°Ÿã«è¿œå ããã®ã¯ãåã®å é ã«è¿œå ãã
å転ããŠãããåŠããå é ãšæ«å°Ÿã®ã©ã¡ãã«è¿œå ããã ifæã§4éãã«åããŠãããããxorãåã£ãŠ2éãã«ãŸãšããŠãããã
ã³ãŒãã¯ãã¡ã
å šéšã®çµã¿åããã®åæ°ãæããŠãããããçš®ã®çµã¿åããã®åæ°ãåŒãã
æŽæ°
åŸã¯ããŒã«ãäžå (
ã³ãŒãã¯ãã¡ã
å¶çŽãããèŠãã
äŸå€åŠçãšããŠã
- åã端ã«å«ãŸãã 1ã
$K$ åãè¶ ãããã$i$ åã®å³åŽã§ã¯ãªãå·ŠåŽã§åãã$i$ åãèµ·ç¹ã«èª¿ã¹ãªããã - ããã§ãªããã°åããã«ã
$i+1$ åã®å³åŽã§åãããã©ãã調ã¹ãã
暪æ¹å+瞊æ¹åã«åã£ãåæ°ã®æå°å€ãçãã§ããã
ã³ãŒãã¯ãã¡ã
å ¥åãµã€ãºããèšç®éãèŠåãããšã倧äºã§ããã
é ç¹ã®äœçœ®ããXããå³ãX-YéãYããå·Šã«å ŽååãããŠè§£ããšãšãŠãããã©ããããBFSã§è·é¢ãæ±ãããšç°¡åã§ããããããããšãã¯
蟺ã®é·ããåºå®ã®ãšãã«BFSã§è·é¢ãæ±ããæ¹æ³ã¯æ¢åºãªã®ã§çç¥ããã
ã³ãŒãã¯ãã¡ã
std::vector::resize()
ã䜿ã
å顿ãã X<A, Y<B ãªã®ã§å Žååããæžããããç¡è²ã®ãªã³ãŽãè£å
ããªããã°ãªããªãç¶æ³ã¯ãªãã眮ãæããã ãã§ããããšãåããããªã³ãŽãè²å¥ã«ãçŸå³ããã®éé ã«ãœãŒãããŠãèµ€ããªã³ãŽã¯å
ã
std::vector::resize()
ã¯äœåãªèŠçŽ ãåãæšãŠãã®ã§äŸ¿å©ã§ããã
眮ãæãããªãæããããããªãèµ€ãšç·ã®ãªã³ãŽããæãçŸå³ãããªã³ãŽã«çœ®ãæããã°ããã ãããããã¯å°ºåãæ³ã§ã§ãããèµ€ãšç·ã®ãªã³ãŽããã¹ãŠçœ®ãæãçµãã£ããããã§ããããšã¯ãªã(ãã£ãšçŸå³ããç¡è²ã®ãªã³ãŽã«çœ®ãæããã¯ãã ãã)ã®ã§ãå°ºåãæ³ã®ã€ã³ããã¯ã¹ã«æ°ãä»ããã
ã³ãŒãã¯ãã¡ã
ããã 160-Dãšåæ§ã«ãå ¥åãµã€ãºããèšç®éãèŠåãããšã倧äºã§ããã
ååž°ãšã¡ã¢åã§åãããçµã¿åããã环èšãããšããã©ããããã§ãããããã10鲿°5æ¡ãããªãã®ã ãããäžã®æ¡ã«äžã®æ¡(0ã«ã¯0ãš1ã9ã«ã¯8ãš9ããã以å€ã®
ã³ãŒãã¯ãã¡ã
ãŽãŒã«ããèŠãæ¹ãç°¡åã§ããã
ãŸã
念ã®ãã std::set
ã§éè€ãé€ããŠããã
ã³ãŒãã¯ãã¡ã
ããã 160-D, 161-Dãšåæ§ã«ãå ¥åãµã€ãºããèšç®éãèŠåãããšã倧äºã§ãããé åã®æ·»ãåãã¯ã¿åºããªãããã«å šæ¢çŽ¢ããã°ããã
ã³ãŒãã¯ãã¡ã
çŽ å æ°åè§£ãçŽæ°åæããŠå é€åçã ãããšæã£ãããå ·äœçãªè§£æ³ãŸã§æéãæãã£ãã
ååŠçãšããŠã
æŽæ°
ã³ãŒãã¯ãã¡ã
å·šå€§ãªæ°
ãããããããã°ã
- åã®æå°å€ã¯äœãéžã°ãªã0ãæå€§å€ã¯å
šéšéžã¶
$sum(i=0..{N})$ ã§ããã -
$s = sum(i=0..{K-1})$ ãæå°å€ãªã®ã§ãããããå°ããæ°$S$ åã¯åã«ãªãããªãã - è¶³ãæ°ããããã
$N-i$ ãšããã°å·Šå³å転ããŠã$sum(i=0..{N})$ ãŸã§ã®$S$ åã¯åã«ãªãããªãã - ãã以å€ã®åã¯è¡šçŸå¯èœã§ãã(åã«ããæ°ã®éåã«å¯ŸããŠãããæ°ãšãããã1å€ãæ°ã亀æããã°ããããã®ãããªæ°ã¯å¿ ãã¿ã€ãã)
ã³ãŒãã¯ãã¡ã
- é忬ã®ã8.6 æååã®ããã·ã¥ãåé¡ A56ãç¥ã£ãŠãããšè§£ãã
- 环ç©åããéšååã®ç·åãåãæ¹æ³ã䜿ãã
æååããéšåæååãåã£ãŠãããšãã«ãéšåæååããåŸãããããã·ã¥ã®ãããªæ
å ±ãåŸããããæ°ã2019ã§å²ãããã©ããã¯ã2019ã®ãã¹ãŠã®çŽ å æ°(3ãš673)ã§å²ãããã©ãããšåãã§ãããã€ãŸã3ã§å²ã£ãäœããš673ã§å²ã£ãäœãããæååã®æ«å°Ÿããå
é ã«åãã£ãŠåã£ãŠããã説æã®éœåäžãæååã std::reverse
ã§éé ã«ããŠæãäžã®æ¡ãæååã®å
é ãšããã
...abcdef ãšæ¡ãããããããæŽæ°ã®ãã¡ãäžäœ1,2,3...æ¡ã673ã§å²ã£ãäœã(mod 673)ã«ã€ããŠèããã3ã§å²ã£ãäœããåæ§ã§ããã
- f mod 673ã¯ãå®éã«å²ãã°åãã
- ef mod 673ã¯ã(e*10 + (f mod 673)) mod 673
- def mod 673ã§å²ã£ãäœãã¯ã(d*100 + (ef mod 673)) mod 673
- cdef mod 673ã§å²ã£ãäœãã¯ã(c*1000 + (def mod 673)) mod 673
ããããŠæäžäœã®æ¡ãŸã§ãæãäžã®æ¡ããé£ç¶ããæ¡ã673ã§å²ã£ãäœããèšç®ã§ããã10, 100, ... ãš
次ã«äžã®æ¡ããé ã«0ã«çœ®ãæããŠããã
- æåã¯äœã眮ãæããªãããã®ãšãf, ef, def, ... ã673ã§å²ãåãããã©ããã¯æ¢ã«èª¿ã¹ãŠãã
- æäžäœã®æ¡ã0ã«çœ®ãæãããäŸãã°cdefãcde0ã«çœ®ãæãããcde0ã673ã§å²ãåãããã©ããã¯ã
$(cdef - f) : mod : 637 \equiv 0$ ã€ãŸã$f$ ã673ã§å²ã£ãäœããš$cdef$ ã673ã§å²ã£ãäœããçãããšããããšã§ãããããã§ f mod 7 ãåºå®ããŠãf mod 7 ãšçãã f, ef, def, ... ãæ°ããã°ã顿ã®ç·æ°ã®äžéšãæ±ãŸãã - äžè¬çã«ã¯ãäžã®æ¡ããé£ç¶ãã
$i (\geq 0)$ åã®0ã眮ãæãããäžiæ¡ mod 7 ãšçãã f, ef, def, ... ãæ°ããã°ã顿ã®ç·æ°ãæ±ãŸããäžiæ¡ã®å€ã¯åæå€ã0ãšãã$i$ ãæŽæ°ããããšã«$10^{i}$ * iæ¡ç®ã®æ°å mod 673 ãè¶³ãã - f, ef, def, ... mod 673 ãš f, ef, def, ... mod 3 ããã f, ef, def, ... mod 2019 ãæ±ãŸããããã¯
$i$ ãšé¢ä¿ãªãã®ã§ãmod 2019ãããŒãšããŠè©²åœããäœãã®åºçŸåæ°ãäžåºŠæ°ããŠé£æ³é åã«ä¿åããŠããã
ãã®èãæ¹ã¯ãéšååã®ç·åãæ±ããã®ã«çޝç©åãäœ¿ãæ¹æ³ãšãã䌌ãŠãããåãäœãã«çœ®ãæããã ããªã®ã§ã
Mod 3ãšmod 673ã¯ACLã䜿ããšæžããããã
#include <atcoder/all>
using ModInt3 = atcoder::static_modint<3>;
using ModInt673 = atcoder::static_modint<673>;
ã³ãŒãã¯ãã¡ã
ã³ãŒãã¯ãã¡ã
çŽèгçã«ã¯ãAãå¢ããã»ã©Bã§å²ã£ãäœããæºãŸã£ãŠãã£ãŠãBã«ãªããšäœãã0ã«æ»ãããšããããšã§ããã
ã³ãŒãã¯ãã¡ã
æ¹éã¯ç«ã£ããå®è£ ã«æéåã£ãã
åå è ãåºå®ããŠã察æŠå Žãåããšèãããåãåå è ãšäºåºŠå¯ŸæŠããªããšããæ¡ä»¶ãèãããšããåå è ãåãã®ã察æŠå Žãåãã®ãçžå¯Ÿçã«ã¯åãã§ããã
ãã察æŠå Žã®å²ãåœãŠ
ã³ãŒãã¯ãã¡ã
äžæ¬¡ä»¥äžã®å€é åŒã®åé¡ã¯ãnæ¡æ ¹ãåããšå€æ°ã®åãé åãããã»ã©å€§ãããªãã®ã§ç·åœããã§ããã
çŽæ°ãæ±ããã¯é »åºãªã®ã§ã³ãŒãã¹ãããããæžããŠãããå¹³æ¹æ°ã®çŽæ°ãäºåºŠæ°ããŠããŸããã¡ã§ããã
ã³ãŒãã¯ãã¡ã
絶察å€ã¯é åºãåºå®ããã°å€ããã
çµã¿åãããåæããã®ã§ãäžè¬æ§ã倱ãã
顿ãã
å®éã§ããã®ã§ããã
ã³ãŒãã¯ãã¡ã
æå
00
ã«ããªããã°ãããäžæå
èªã¿ãããã°ãããçŽè¿ã®æäœã
ãã以å€ã®ç¶æ³ã§ã¯ã
ããããŠãã¹ãŠã®æäœã決ããåŸã«åçããŠã No
ããªããªããã°æäœãåºåããã
äžå€éã ãšæã£ãããã¯ãäžå€éã ã£ããåã 1,2,3以äžã§åºå¥ã§ãããäžæå èªã¿ã§ããã®ã¯äžèšãšåãèå¯ã§ããã
ã³ãŒãã¯ãã¡ã
åçèšç»æ³ã§ããªãããããšããèŠåããå¿ èŠã
åãè²ã䞊ãã§ãããããã¯ãæ®ã
ããããã¹ãŠã®
ã³ãŒãã¯ãã¡ã
éšå±1ããä»ã®éšå±ã®è·é¢ãBFSã§æ±ãããæ¹æ³ã¯æ¢åºã®éãã
ã³ãŒãã¯ãã¡ã
2æéè¿ãããã£ãããä¹ ãã¶ãã«édiffãè§£ããã
èªæãªçããšããŠãã€ã¯ã·ã¯äžå¹ãªãçãã¯1ã§ããã
åç¹ãªã€ã¯ã· std::map<std::pair<Num, Num>, Num>
ã«åãããããã§0çš®é¡å¢ãããã€ãŸã飿³é
åã®ãšã³ããªã ãäœã£ãŠãããšåŸã®åŠçãæ¥œã§ããã
- æ¢çŽãªãã¯ãã«
$(A_i, B_i)$ ã1çš®é¡å¢ãã - 察称ãªãã¯ãã«
$(-A_i, -B_i)$ ã0çš®é¡å¢ãã - çŽäº€ãããã¯ãã«
$(-B_i, A_i)$ $(B_i, -A_i)$ ã0çš®é¡å¢ãã
次ã«ç»å Žãããã¯ãã« std::vector<std::pair<Num, Num>>
ã«è¿œå ãããããã§ std::set<std::pair<Num, Num>>
ã§ç®¡çããã
ãã¯ãã«
ãã¯ãã«
ããã§éèŠãªããšãšããŠãåç¹ãªã€ã¯ã·
1260 msæãã£ãŠããã®ãèŠããšããã¯ãã«ã®çš®é¡ãæ°ãäžããã«ã¯ããå°ãæŽç·Žãããæ¹æ³ãããããã ã
ã³ãŒãã¯ãã¡ã
çŽ å æ°åè§£ããŠãçŽ æ°pã§1åã2åã3å... å²ã£ãŠã¿ããçŽ å æ°ãšãã®æ°ãã³ãŒãã¹ãããããæžããŠããã
ã³ãŒãã¯ãã¡ã
äºåæ¢çŽ¢ã§ã¯ãªãã£ãã
å°æ°ãåºããšåä»ãªã®ã§ãå
¥åå€ãäºåããŠçããåã«ååã«ããã
ã³ãŒãã¯ãã¡ã
ä»»æã®çµã¿åãããæ°ãäžããã®ã«ããœãŒãããŠãäžè¬æ§ã倱ããªãã ãããã
å°ããªæ°ã§ãããã倧ããªæ°ãå²ãããšã¯ã§ããªãããã£ãŠæé ã«ãœãŒãããŠãèªåãã倧ããªæ°ã§å²ãåãããã©ãã確ãããããã®ãŸãŸå®è£
ãããš
ãªãåãå€ã®æ°ãè€æ°ããå Žåã¯äºãã«å²ãåããã®ã§ãçãã®åæ°ã«ã¯å«ããªãã
ã³ãŒãã¯ãã¡ã
忥ãããã
C++ã®é床ã§ãŽãªæŒããªãã幌çšåãããŒãåå
ã®ã¬ãŒããå€ãšãã std::map<Num, std::multiset<Num>>
ãäœãã°ãããmin(å
šå¹Œçšåã®maxã¬ãŒã)ã¯ãå
šå¹ŒçšåãèŒããã»ã°ã¡ã³ãæšã§ç®¡çããã颿°ã std::max
, å
(ã¢ãã€ã)ã inf ã«ããŠããã°ã2ç§ãåã£ãŠACã§ããã1-based indexã§éããªãå
¥åãèªã¿èŸŒããšããããããã
ã³ãŒãã¯ãã¡ã
èŠçŽ ãäœåãããã¯æ°ã«ããªãã
ãªã®ã§
ã³ãŒãã¯ãã¡ã
Eåé¡ã10å以äžã§è§£ããããšãããã
ãã£ãã«ãªãEåé¡è¶diffã§ãããXORããªãã£ãšèšãã°ããããèªå以å€ã®æ°åã®XORãåããšããããšã¯ãæ°åã®åæ¡ã«ã€ããŠãèªå以å€ã®æ°åã§1ãåºãåæ°ã奿°åãªã1ãå¶æ°åãªã0ãæå³ããã
ãšããããšã§æ°åã®åæ¡ã«ã€ããŠã
ã³ãŒãã¯ãã¡ã
Aãããäœåèªããæ±ºããããBããæå€§äœåèªããã¯äžæã«æ±ºãŸãã®ã§ãå°ºåãæ³ã§æ±ãŸãã
ã³ãŒãã¯ãã¡ã
瞊ã®ç©ã暪ã«ããã
ããæ°ã«çŽæ°ãäœåãããã調ã¹ãã®ã¯å€§å€ã§ãããããã
ã³ãŒãã¯ãã¡ã
ããããæ©ããããæãåãããŠè©Šããæ¹ãæ©ãã
æåŸã®äžäººã¯èª°ãã«ãšã£ãŠå¿å°ããã¯äžããªãã®ã§ããã¬ã³ããªãŒããæå€§ã®äººããéé å°çããã®ããããšåãããã©ãã«å ¥ãããã§ããããNãåå倧ãããšãããã¬ã³ããªãŒããäžäœäºåã®éã«å ¥ããã°ããã®å¿å°ãããæå°ã«ãªããã€ãŸã N, N-1, N-1, N-2, N-2, ... ãšãªãã
ã³ãŒãã¯ãã¡ã
æ¹éã¯ããç«ã£ããè©°ããèŠããæè¿ã®ARCãããåé¡ã§ããã
絶察ã®å€§ããæ¹ãã
-
$S$ ã®æ£ã®æ°ã§æã絶察å€ã倧ãããã®ã(ããããã°)$P_s$ ãšãã -
$S$ ã®è² ã®æ°ã§æã絶察å€ã倧ãããã®ã(ããããã°)$N_s$ ãšãã -
$U$ ã®æ£ã®æ°ã§æã絶察å€ã倧ãããã®ã(ããããã°)$P_u$ ãšãã -
$U$ ã®è² ã®æ°ã§æã絶察å€ã倧ãããã®ã(ããããã°)$N_u$ ãšãã
-
$P_s, N_s, P_U, N_u$ ããã¹ãŠãããªãã$P_u / N_s > N_u / P_s$ ãªã$P_u, N_s$ ã亀æãããããã§ãªããã°$N_u, P_s$ ã亀æããã亀æåŸã®$S$ ã®ç©ãçãã§ããã -
$(P_s, N_s)$ ãŸãã¯$(P_U, N_u)$ ã®çµã®äžæ¹ã ããããªãããã®çµã®å€ã亀æããã亀æåŸã®$S$ ã®ç©ãçãã§ããã - ãã以å€ãªã絶察å€ã®å°ããæ¹ãã
$A$ ã$K$ åéžãã§æãããã®ãçãã§ãããç¹ã«$A$ ã«0ããããªãçãã¯0ã§ããã
åæ°ãæ¯èŒãããšãã¯ãäºãã®åæ¯ãæããŠæŽæ°ã«ããŠæ¯èŒããã
ã³ãŒãã¯ãã¡ã
ã³ãŒãã¯ãã¡ã
éžæè¢ãäºã€ããããçæ¹ãããã°ããçæ¹ã¯èŠããªããšããããšãããã
RWã®äžŠã³ã¯ãããWRã®äžŠã³ã¯ãããªãã®ã§ãWRãæžããã°ããããªãã°Rã ãå·Šã«ããã£ãšäžŠã¹ãŠãWã ãå³ã«ããã£ãšäžŠã¶ãããWãå³ã«å¯ããã°ãããšåãããã€ãŸãæå·Šã®Wãšæå³ã®Rå ¥ãæ¿ããã°ããããã®åæ°ãæ±ãããããã¯å°ºåãæ³ã§ã§ããã®ã§ O(N)ã§è§£ããã
ç³ãå ¥ãæ¿ããã°çœãã¯1ãŸãã¯2æžããããããããªãããç³ã®è²ãå€ããŠã1ããæžããªãã®ã§ãç³ã®è²ãå€ããæå³ã¯ãªãã
ã³ãŒãã¯ãã¡ã
äºåæ¢çŽ¢ã§ããã
äžžå€ªã®æå€§é·ã決ãæã¡ã
ãªã®ã ããæ¢çŽ¢å¹
ã®äžéã total > k
ã§ã¯ãªãæå°ã®å€ãè¿ããäºåæ¢çŽ¢ã¯ãããåžžã«ãããããã
ã³ãŒãã¯ãã¡ã ã ããå®è³ªçã«ã¯ããèšäº ãã®ãã®ã§ããã
Mo's Algorithm ã§è§£ããMo's Algorithmãç¥ããªããšã©ãã«ããªããªãã
ã³ãŒãã¯ãã¡ã
è§£ã®æ¹éã¯ç«ã€ããå®è£ ãéåžžã«èŸãã
ãŸãç¶æ é·ç§»ãã«ãŒãæåã«åè§£ãããDFSã§ãããããã ããunion-findæšã®ä»£è¡šå ã䜿ããšç°¡åã§ãããããããã®ã«ãŒãæåããšã«ã¹ã³ã¢ãæ±ããŠããã®æå€§å€ãçãã§ããã
åé¡ã¯ã¹ã³ã¢ã®æ±ãæ¹ã§ãããäžåšãããšã¹ã³ã¢ãæ£ã®å€ã«ãªããªããã§ããã ãããããåšåãããããã§ããã§ãªããã°äžåšããªããã°ãããäžåšã«æºããªãå Žåã®ã¹ã³ã¢ã¯èµ·ç¹ãçµç¹ã®çµãç·åœããããŠ
ãšæžããšç°¡åã«èŠããããWAããªãããã«å®è£ ããã®ããã®ããã倧å€ã§ãããäºåšåã®ã¹ã³ã¢ã®çޝç©åãæ±ããŠããã¹ãŠã®èµ·ç¹ãšé·ããç·åœããããã°ããã¯ããªã®ã ããããã ãã§ã¯ã©ãããŠãWAãåãåããªãã
ã³ãŒãã¯ãã¡ã
äžæ¬¡å DP
äžæ¬¡å ã®åçèšç»æ³ãäœããè¡ãåãããè¡ã§ã®ã¢ã€ãã ååŸåæ° 0..3 ãäžããäžãå·Šããå³ã«ã¹ãã£ã³ããã0è¡0åã¯äŸ¡å€0ã®ã¢ã€ãã ããããšã¿ãªããã€ãŸãå ¥åã¢ã€ãã ã®äœçœ®ã1-base indexingãããšãã¹ã¿ãŒãå°ç¹ã®ã¢ã€ãã ãæŸããã©ãããäŸå€åŠçããªããŠæžãã
å·Šããå³ã«ã¹ãã£ã³ããŠã¢ã€ãã ãæŸããšã¢ã€ãã ã®æ°ã1å¢ããããè¡ãäžã«ç§»ã£ããšãã«æŸã£ãã¢ã€ãã ã®æ°ã0ã«æ»ãããšã«æ³šæããã
ã³ãŒãã¯ãã¡ã
æ®éã«BFSã§è§£ããã
ãšãå ¬åŒè§£èª¬ã«æžããŠããããããããã®æ¹ãå®è£ ãç°¡åãªã®ã ãããç§ã®è§£ãæ¹ã¯å°ãåããã©ãã以äžã®éãã§ããã
- ãã¹ãŠã®ãã¹ããã¯ãŒããªãã§è¡ããç¯å²ã§é£çµæååè§£ãããUnion-findæšã䜿ããšã§ããã
- é£çµæåãé ç¹ãã¯ãŒãã§è¡ããé£çµæåã蟺ãšããã°ã©ããæ§æãããé ç¹çªå·ã¯é£çµæåã®ä»£è¡šå
(
$x+y*1000$ ã§ãã)ãã¯ãŒãã§è¡ãããã©ããã¯åé ç¹ãã25éã詊ãã°ãããåäžé£çµæåå士ã蟺ã§ã€ãªããªãããã«æ³šæããã - ãã®ã°ã©ãã«ã€ããŠãåºçºç¹ã®é£çµæåããç®çå°ã®é£çµæåãŸã§ã«çµç±ãããæçè·é¢ã€ãŸãæå°ã®èŸºã®æ°ãBFSã§æ±ãããå°éäžå¯èœãªãè·é¢ã¯ç¡é倧ã§ããã
å€é蟺ãäœããªãããã°ã©ã㯠std::map<Num, std::set<Num>>
ã«ããããé ç¹ããå»¶ã³ã蟺㯠edges[current]
ã§åãåºãã edges.at(current)
ã ãšã蟺ããªããšãã«äŸå€ãé£ãã§ããã»ã¹ãçµäºããŠããŸãã
ã³ãŒãã¯ãã¡ã
瞊暪ãç¬ç«ã«èããã
ç Žå£å¯Ÿè±¡ãæãå€ãè¡ãšãç Žå£å¯Ÿè±¡ãæãå€ãåã¯ããããç¬ç«ã«èããããšãã§ããããã£ãŠç Žå£å¯Ÿè±¡ãæå€ã®
å®ã¯å
šæ¢çŽ¢ããŠã倧äžå€«ã§ããããã亀ç¹ã«ç Žå£å¯Ÿè±¡ããªãã®ã§ããã°çãã¯
ã³ãŒãã¯ãã¡ãã
ã°ã«ãŒãåããšããã°union-findæšã§ããã
åéã®åéã¯åéãšããæšç§»é¢ä¿ã¯é£çµæåã«åè§£ã§ãããããããã©ãã©ã«ããã«ã¯ãé£çµæåã®æ°ã ãã°ã«ãŒããäœã£ãŠãçãªé£çµæåã®äººãããããã®ã°ã«ãŒãã«éããã°ããããã£ãŠæå°ã®ã°ã«ãŒãæ°ã¯æå€§ã®é£çµæåã®èŠçŽ æ°ã§ãããããã¯æ°ãä»ããªãã£ãã
åœæã¯èªåã§å®è£ ããUnion-findæšã䜿ã£ãŠãããä»ã¯ACLã䜿ã£ãŠããã
ã³ãŒãã¯ãã¡ã
çšèªã®å®çŸ©ãèœã¡çããŠçè§£ããã°åããã
Pairwise coprime ãªãå¿
ã setwise coprime ã ãéã¯æãç«ããªãã®ã§ã pairwise coprime ã§ã¯ãªãäŸãäžã€ã§ãã¿ã€ããã setwise coprime ãšåºåããããã§ãªããã° pairwise coprime ã§ãããããã¯
ã³ãŒãã¯ãã¡ã
DFS(å¹ åªå æ¢çŽ¢)ã¯ã¹ã¿ãã¯ã®æ·±ãã«æ³šæããã°ãããã«ååž°ã§æžããã
æ°åã¯é åºãç°ãªãã°éããã®ãšæ°ããã®ã§ã3以äžã®æ°ã
ã³ãŒãã¯ãã¡ã
45床å転ã
ãããåŒå€åœ¢ãããªããŠãçŽèгçã«çè§£ããæ¹æ³ããããxãå·Šãyãäžã«å¢ãã座æšç³»ã§ãx+yçé«ç·ã¯å·Šäž-å³äžé¢ä¿ããšãããx-yçé«ç·ã¯å³äž-å·Šäžé¢ä¿ãæãããšæãã°ãäºç¹ã®ãã³ããã¿ã³è·é¢ã¯ãäºç¹ã«ãããçé«ç·ã®å·®ã®å€§ããæ¹ãšäžèŽããã
ã³ãŒãã¯ãã¡ã
è²°ãDPã§è§£ãã
é
ãDPã§ãè§£ããããã ããè²°ãDPã§è§£ããããŸãåºéã
- åºéã®çµãã
$i - R < 1$ ãªãããã - ããã§ãªããã°åºé
$\lbrack max(1, i-L), i-R \rbrack$ ã®ãã¹ã«è¡ãæ¹æ³ãå šéšè¶³ã
åºéã«ããè²°ããã¹ã«è¡ãæ¹æ³ã环ç©åã§ç®¡çããã°ãåºéã¯10以äžãªã®ã§èšç®éã¯
ãªããã®åé¡ã¯é
å»¶è©äŸ¡ã»ã°ã¡ã³ãæšã§ãè§£ãããå®è£
㯠ãã¡ã ããã ããã®åé¡ã§ã¯
ã³ãŒãã¯ãã¡ã
å³å¯è§£ãæ±ããããã鳩ã®å·£åçã§è§£ãã
äœãã¯
- åšæã«å ¥ãå
- åšæãç¹°ãè¿ã
- åšæã®éäžã§
$n$ ã«éãã
ã«ã€ããŠåãæ±ããããã ãåšæã«å
¥ãåã«
ã³ãŒãã¯ãã¡ã
é å»¶ã»ã°æšã§è§£ãããæ³å®è§£æ³ã¯é å»¶ã»ã°æšã§ã¯ãªãããèãæ¹ã¯åãã§ããã
è¡
æäœ
æäœ
å šãŠã®ã¯ãšãªã«ã€ããŠåŠçãããšçœãç³ãæžã£ãŠçããæ±ãŸãã
ã³ãŒãã¯ãã¡ã
ãžã ã«éããšåŒ·ããã©ãå€ãããã¯ä»ã®åŒ·ããšä»éããžã ã ãã§æ±ºãŸãããããŸã§ã©ãéãããã«ã¯é¢ä¿ãªããããããã«ã³ãæ§ãšããã
ãªã®ã§äž¡æ¹ã®ãžã ã«éã£ããšããŠåŒ·ããäœããªãæ¹ãéžã¹ã°ããã匱ããã¡ã¯åŒ·ããAåã«ãããã®åŸã¯Bå¢ãããšããããã ãããããŸã§èå¯ããªããŠãè§£ããã
ã³ãŒãã¯ãã¡ã
äžè§äžçåŒ
äžè§äžçåŒãèããªãäžè¬çãªå·¡åè·¯ã«ã€ããŠã¯ã ããéœåžã蚪ãããã©ããã
ãããäžè§äžçåŒãæãç«ã€ãšãã¯åãéœåžãäºåºŠèšªããå¿ èŠã¯ãªããå ¥åäŸ2ãåŒã£ããã§ããããã®ãšãã¯èšªããéœåžã®æ°ã1,2,...,Nã«ãªãããã«éåãæ¡åŒµããã°ãããã€ãŸã(蚪ããéœåžã®éå, ä»ããéœåž)ãããŒãå€ãæå°ã³ã¹ããšããDPãè¡ãããã¹ãŠã®éœåžã蚪ããŠä»éœåž1ã«ãããšãã®å€ãçãã«ããã
ã³ãŒãã¯ãã¡ã
ç®æ°çãªæ¹æ³ã§è§£ãããNã倧ããã®ã§ãé åãæ°ãäžãããšTLEããã
ç®æ°çãªæ¹æ³ã¯ãæ°åãããæãã«çµã¿åããããšãäžãã3æ¡ç®ãå¶æ°ã奿°ããšãäžãã1,2æ¡ç®ã®çµã䜿ã£ãŠ8ã®åæ°ã«ãªããã©ãã調ã¹ããèŠã¯000, 008, ..., 192 ãã©ãã調ã¹ããééãç¡ããã³ãŒãéã倧ããã
å®ã¯äžäžæ¡ãæ±ããæ¹ãç°¡åã§ããããã¡ãã®èšäºãåç §ã
ã³ãŒãã¯ãã¡ã
æ°åŠçèå¯ãå¿ èŠã
è§£ãæºããçµã¯ãå°ããå€ããé ã«äºã€ãã€åããã§ãããæã倧ããå€ãšæãå°ããå€ãçµããã§ã¯ãªãããã®åæãééã£ãŠãããšã©ãã«ããªããªãããããåããã°çޝç©åãã€ãã£ãŠèšç®éãæžãããã
ã³ãŒãã¯ãã¡ã
åé¡ãããèªãå¿
èŠããããåãããŠããã®ã¯æå€§ç¬é座æšã§ãã£ãŠã
环ç©åã环ç©ããã®ã¯é ãããããããããã³ãŒãã«èœãšã蟌ãã°ãã®ãŸãŸã§ããã
- åºçºç¹(å³åŽã«ããè¡ããªãå Žå)
-
$A_i$ ã ãé²ãŸãã«è¡ããå Žæ(ãããŸã§ã®æå€§ç¬é座æš) -
$A_i$ é²ãããšã§åããŠè¡ããæå€§ç¬é座æš
ãã®åŸãäœçœ®ã«çޝç©åãš
ã³ãŒãã¯ãã¡ã
åž°çŽæ³ã瞊暪ãç¬ç«ãªåé¡ãšããŠèããã
瞊æ¹åã«å ãå±ãããšã暪æ¹åã«å ãå±ãã¯ç¬ç«ãªã®ã§å¥ã ã«èãããå ¬åŒè§£èª¬ã«ããéãããã§ã«å ãåœãã£ãŠãããã¹ã¯ãã®é£ããã£ãŠããããšãå©çšããŠèšç®éãæžãããã
ã³ãŒãã¯ãã¡ã
ãããæ³(Imos method)ã䜿ãã
NãšSãšTã倧ããã®ã§ããã¹ãŠã®æŽæ°æå»ã«ã€ããŠã湯ã®éãæ±ãããšTLEãããã ãå€åç¹ã ããã®çޝç©åãæ±ããããšã§ãèšç®éã
- S, T, P ãåŸãŠãå ¥ãã®å€åç¹Sã§ã湯ã®éã +P, åºã®å€åç¹Tã§ã湯ã®éã -P ããã€ãã³ããäœã
- ã€ãã³ããæå»ã®æé ã«äžŠã¹æ¿ãã
- åäžæå»ã®ã€ãã³ãã«ã€ããŠã湯ã®éããŸãšãã
- ããæå»ã®ã湯ã®éã容éWãè¶ ããŠããäŸçµŠäžèœãããã§ãªããã°äŸçµŠå¯èœã§ãã
ã³ãŒãã¯ãã¡ã
åŒãDPã¯çޝç©åã«ãã§ããã
é
ãDPãçŽ æŽã«å®è£
ãããš
ã³ãŒãã¯ãã¡ã
std::move
ã䜿ãã
çåŸã®éå£ãunion-findæšã§ç®¡çããéå£ã«å±ããçåŸã«ã€ããŠã¯ã©ã¹ãããŒãçåŸæ°ãå€ãšãã飿³é
å std::map<Num, Num>
ã§ç®¡çãããçåŸaãå«ãéå£ãšãçåŸbãå«ãéå£ãæ°ãã«åæµãããšãã«ãunion-findæšã§ç®¡çããçåŸã®éåãšãã¯ã©ã¹-çåŸæ°ã®é£æ³é
åãããŒãžããã
ãã®ãšããã®é£æ³é
åããunion-findæšã®ä»£è¡šå
(root, leader)ã«æããã代衚å
以å€ã«ã¯æãããªãããã«ãããããããã°èª°ã飿³é
åãæã£ãŠãããè¿·ããªããŠæžããunion-findæšãããŒãžãããšãã«ä»£è¡šå
ãå€ãã£ããã以åã®ä»£è¡šå
ãæã£ãŠãã飿³é
åãæ°ãã代衚å
ã« std::move
ããã
ã³ãŒãã¯ãã¡ã
ãŸãåç¹ã«ç§»åããã
åç¹ã«ç§»åããã°åŒã¯ãã£ãããããå ¬åŒè§£èª¬éãã®å Žååãéãã«å®è£ ããã¯ããªã®ã«ãã€ãã«ACã§ããªãã£ãã
ã³ãŒãã¯ãã¡ã
確çDPãšåŒã°ããã
æåŸ å€ã®å æ³æ§ãããåå²ç¹ã®ãã®å ã«è¡ã確çã鿬¡çã«æ±ãããDPã®æŽæ°åŒã¯æ¡ä»¶ä»ã確çãã®ãã®(A,B,Cæãããšãã«A,B,CãäžæåŒã確çã¯A:B:C)ã§ãããç§ã®è§£æ³ã¯åºçºç¹(A,B,Cæ)ããé ãDPãå ¬åŒè§£èª¬ã¯çµçç¹(ããããã®ç¡¬è²šã100æ)ããã¡ã¢åååž°ã§å®è£ ããŠããã
ã³ãŒãã¯ãã¡ã
TLE察çãå¿ èŠ
01-BFSã§æçè·é¢ãæ±ããããšããã®ã¯ãããããã®ã ããã¯ãŒããŸãŒã³ããããã¹å士ãæã§çµã¶ãšTLEãããã¯ãŒããŸãŒã³a..zãšããé ç¹ãäžã€ãã€ãèš26åäœãã°ããããšã¯æãã€ãããããå®éã«å®è£ ããã®ã倧å€ã§ããã解説éããæ®éã®ãã¹ããã¯ãŒããŸãŒã³ã«è·é¢1ãã¯ãŒããŸãŒã³ããæ®éã®ãã¹ã¯è·é¢0ã«ãããšäžæããããã¯ãŒããŸãŒã³ãžã®è·é¢ãæãããŠãæãåããªããšTLEããã
BFSã®ã«ãŒãå ã«äžäžå·Šå³ã®é ç¹ãé害ç©ãšæ å€ã«ã¯é²ããªããã¯ãŒããŸãŒã³ã®åºå ¥ããšçŽæ¥æ§æããå¿ èŠãããããšã«ãããã¯ãŒããŸãŒã³ã®åºå ¥ããæã§è¡šçŸãããšãTLE, RE, MLEãšããããããšãèµ·ãããã
ã³ãŒãã¯ãã¡ã
ååå šæ¢çŽ¢
ååå
šæ¢çŽ¢ãå®å
šã«å¿ããŠããããã㯠JOI æ¬éž 2008CãšããŠããŸãã«ãæåã§ããã
ã³ãŒãã¯ãã¡ã
å顿ãå¶çŽã«èœãšã蟌ãã
èµ€ããã³ã³ãéããã³ã³ã«éãªã£ãŠã¯ãããªãããèµ€ããã³ã³ãæŒãå Žæå士ãéãªã£ãŠãããããšããããšã¯ä»¥äžã®å¶çŽã«ãªãã
- é£ç¶ããçœã®ãã¹ã®æå°å€ããèµ€ããã³ã³ã®é·ãã®æå€§å€
$l$ ã«ãªã - é£ç¶ããçœã®
$n$ ãã¹ã«æŒãåæ°ã¯ã$\lfloor l/n \rfloor$ ã§ãã
ã³ãŒãã¯ãã¡ã
ç·šéè·é¢
顿ã¯ç·šéè·é¢ããŸãã®åãã¬ãŒãã³ã·ã¥ã¿ã€ã³è·é¢ã®å®çŸ©ãã®ãã®ã§ããã
- åé€ã¯ãã®ãŸãŸ
- èŠçŽ ãæ¿å ¥ããã®ã¯ã仿¹ã®åããèŠçŽ ãåé€ããã®ãšåãããš
- ç·šéåŸã®èŠçŽ ã®éãã¯ãèŠçŽ ã眮æããã³ã¹ããšåã
ã¬ãŒãã³ã·ã¥ã¿ã€ã³è·é¢ã®æ±ãæ¹ã¯ãã¡ã ãåèã«ãªããåæåãšæŽæ°åŒã䜵ããŠ10è¡çšåºŠã§æžããã
ã³ãŒãã¯ãã¡ã
ã»ã°ã¡ã³ãæšã䜿ãã
å æ³ +
ãšåæ§ã« XOR ãã»ã°ã¡ã³ãæšã«èŒãããããèªåã§å®è£
ããã»ã°ã¡ã³ãæšã䜿ã£ãããACLã䜿ã£ãŠãããã
ã³ãŒãã¯ãã¡ã
絶察å€ããããšäžæãå€ããŸãšããããªãã®ã§ã絶察å€ãå€ãã
-
$i < j$ ãã€$A_i < A_j$ ãªããœãŒãããŠã$i < j$ ãªã®ã§ã$i,j$ ã®çžå¯Ÿçãªäœçœ®ã¯åãã -
$i < j$ ãã€$A_i \geq A_j$ ãªãäœçœ®ãå ¥ãæ¿ããã®ã§ãœãŒãåã®$|A_j - A_i|$ ãè¶³ãããšã«çãããã絶察å€ãªã®ã§å€ã¯å€ãããªã
èšç®éãæžããããã«çޝç©åãåããããèŠçŽ ã®å·®ã ãã«æå³ãããã®ã§ãæå°å€ã0ã«ããŠãåãã§ããããã£ãŠ
äºé
ã³ãŒãã¯ãã¡ã
æ¡åŒµãŠãŒã¯ãªããã®äºé€æ³
ããå ·äœçã«ã¯ä»¥äžã®éãã§ããã
æ¡åŒµãŠãŒã¯ãªããã®äºé€æ³ãçšããŠã
-1
ãåºåãããããã§ãªããã°ã
ãã¡ãã® èšäº ã®éããäžåœäœå°å®çã§ è§£ã ããšãã§ããã
ã³ãŒãã¯ãã¡ã
暪æ¹åã«é²ãã§äžã«è¡ããã®ã¯ã
瞊æ¹åã«
ã³ãŒãã¯ãã¡ã
倿°æ±ºã¯ãåŸç¥šæ°ã§ã¯ãªããåŸç¥šæ°ã®å·®ã§èããã
åŸç¥šå·®ã¯å
šãæŒèª¬ããªããšããæå°(æãäžå©)ã§ãããåŸç¥šæ°ã®å·®ãå¢ããæ¹æ³ãèãããæŒèª¬ãããš
ã³ãŒãã¯ãã¡ã
å®è£ ã倧å€
ããããã®è§£æ³ã¯ããæãã€ãããã110åæãã£ãã諊ããªãæ ¹æ§ãå¿ èŠã§ããããŸãããŒã¿æ§é ã瀺ããã
- 蟺
$1..N-1$ ã®å§çµç¹std::vector<std::pair<Num, Num>> abset
- æšãDFSããŠæ ¹ããèãå·Šããå³ã«é ç¹çªå·ãæ¯ããªãããID
std::vector<Num> ids
- é ç¹ããæ ¹æ¹åã®éšåæšã®ãã¡ãé ç¹çªå·ãæ¯ããªãããIDã®æå€§å€(èãªã0)
std::vector<Num> max_id
- ID
$[L,R]$ ã«$x$ ãå ç®ãããšããåºéã®éåstd::vector<std::tuple<Num, Num, Num>> spans
- äžèšåºéã®éåããæ±ãããIDã«å¯Ÿå¿ããæŽæ°
std::vector<Num> score
è§£ãæ¹ã®æŠèŠã瀺ãã
- æšãDFSããŠæ ¹ããèãå·Šããå³ã«é ç¹çªå·ãæ¯ããªããã
- ã¯ãšãªã¯
abset
ãåç §ãããã¯ãšãª2ã¯é ç¹a,bãéã«èªã¿æ¿ããã ããªã®ã§std::swap
ããã°ãã - é ç¹from ã«å¯Ÿå¿ããID
$id_{from}$ ãé ç¹to ã«å¯Ÿå¿ããID$id_{to}$ ããã£ããšãããtoãfromããæ ¹ã«è¿ãã€ãŸãæµ ããªãã$id_{from}$ >$id_{to}$ ã§ããããã®ããã«IDãæ¯ã£ãã®ã§ããããã®ãšãé ç¹fromã®éšåæšã«ããå°éã§ããªããIDã§ãããšã$id_{from}$ 以äžãéšåæšã®æå€§é ç¹(max_id(from)
ããåãã)以äžã§ããã - fromãtoããæ ¹ã«è¿ãã€ãŸãæµ
ããªãããã®ãšãé ç¹toã®éšåæšã«ã¯å°éã§ããªãããã£ãŠå°éå¯èœãªé ç¹ã¯ã
$id_{from}$ 以äžãé ç¹toã®éšåæšã®æå€§é ç¹(max_id(to)
)ããçªå·ã®å€§ããªé ç¹ã§ããã - ã¯ãšãªã«å¯Ÿå¿ããŠãé ç¹
$[L,R]$ ã«$x$ ãå ç®ããããspans
ã«ç©ãã§ãã - ãã¹ãŠã®ã¯ãšãªãèªãã ãããããæ³ã§åºéã®å€
spans
ãçµ±åããŠscore
ã«ããããããããšé ç¹IDã«å¯Ÿå¿ããå€ãæ±ãŸãã - æåŸã«é ç¹
$1..N$ ã«å¯Ÿå¿ããIDãããŒãšããå€ãåºåãã
fromãtoããæ ¹ã«è¿ãã€ãŸãæµ
ããšãã¯ãéšåæšã«
ã³ãŒãã¯ãã¡ã
ãããæ³ã䜿ãã
æ¢è¿°ã®éãæå»ããšã®ã€ãã³ããäœããåäžæå»ã®ã€ãã³ãããŸãšãããåŸã¯ã€ãã³ããæå»é ã«ã¿ãŠãåã®ã€ãã³ãããã®æéã«ã€ããŠã1æ¥ããããã©ã€ã æéãæå€§ãšããŠæ¯æãã°ããã
ã³ãŒãã¯ãã¡ã
DAGã§ããã
ãšããããšã§ãin-degreeã0ã®é ç¹ããé çªã«æå®å€ãäŒæ¬ããã°ãããããããžã«ã«ãœãŒãã䜿ã£ãããå ã å ¥åãããããžã«ã«ãœãŒãæžãªã®ã ãããã£ãšãã£ããããç·åœ¢æéã®å®è£ ããã£ãã
ã³ãŒãã¯ãã¡ã
ããããã¡ã¢åååž°ã§ããã2鲿°
以äž
-
$Y = X$ ãªã0ã§ãã -
$Y < X$ ãªã$X - Y$ ã§ãã
以äž
-
$Y,X$ ãšãã«äºã®ã¹ãä¹(ç«ã£ãŠãããããã1å)ãªãã$log2(Y/X)$ ãåè£ã§ãã -
$Y = 2$ ãªãã$1 + f(1, X)$ ãåè£ã§ãã -
$Y$ ãå¶æ°ãªãã$1 + f(Y/2, X)$ ãåè£ã§ãã -
$Y$ ã奿°ãªãã$1 + f(Y - 1, X)$ ãåè£ã§ãã -
$Y \geq 5$ ãªãã$1 + f(Y + 1, X)$ ãåè£ã§ãããããããªããš2 WAsãã
å
¬åŒè§£èª¬ã¯çŽæ¥
ã³ãŒãã¯ãã¡ã
ã©ã³ã¬ã³ã°ã¹å§çž®ãå®è£ ããããã®äžã§ããããæäœã®æå³ãèããã
- ãããæäœã®ANDã¯ãåºåãTrueã«ããããªããå ¥åãTrueã«ããããšæãã
- ãããæäœã®ORã¯ãå ¥åããªãã§ãããåºåãTrueã«ããããªãããã§ããããšæãã
- ãã® run ã§
$y_N$ ãTrueã«ããã®ã§ããã以åã®$y$ ã¯äœã§ããããçµã¿åããã¯$(2^{len-1}) * 2^{pos}$ éã - ãã®runã§ã¯Trueã«ããããã以åã® run ã§Trueã«ããããã®runã«ã€ããŠã¯å šFalseã®äžéãã§ãçµã¿åããã®æ°ã¯ä»¥åã®runã§æ±ºãŸãã
ã®ã§ãåŸãã®runããé ã«èª¿ã¹ãŠçµã¿åãããå ç®ããŠããã
ã³ãŒãã¯ãã¡ã
ã¢ãã£ã³å€æã§ããã
座æšã«è¡åãæãããšã¯ãšãªã«å¯Ÿãã座æšå€æãã§ããããããã¢ãã£ã³å€æãšãããã¯ãšãªã«å¯Ÿå¿ããè¡åãèŠãŠããã
90床æèšåã
90床åæèšåã
倿è¡å
ã³ãŒãã¯ãã¡ã
çå·®æ°åã®å ¬åŒãå æ°åè§£ããã
çå·®æ°åã®å
¬åŒ std::set
ã§éèšããã
ã³ãŒãã¯ãã¡ã
å žåãå¿ããŠããã
ã³ãŒãã¯ãã¡ã
è»¢åæ°ãšèšãã°ã»ã°ã¡ã³ãæš
ãã®åé¡ã¯åº§æšå§çž®ãèŠããªãã®ã§ Fenwick Tree ã§ãããããããã«ãã
ããã§
ã³ãŒãã¯ãã¡ã
蟺ã§ã¯ãªãé ç¹ã«æ³šç®ããã
èŸºã«æ³šç®ãããšãå¹ã®éšåã§äžæãå€ãæ±ãŸããªããªãããã£ãŠé ç¹ã90床æ²ããç®æãæ°ãããããç¹ã®åšèŸº4ãã¹ã«ã€ããŠãçœé»ã®ãã¹ã®æ°ã1ãŸãã¯3ãªãããã§èŸºãæ²ãããšãããã
ã³ãŒãã¯ãã¡ã
æµ®åå°æ°ã§ç°¡åã«è§£ãããšæã£ãããç²ŸåºŠã«æ³šæããã
X座æšãæ±ãŸãã°Y座æšã¯äžè§é¢æ°ããæ±ãŸãã®ã§ãY座æšã®äžäžéãåŒããŠ(äž¡ç«¯ãæŽæ°ã®å Žåã«æ³šæãã)æ°ãããã®ã ããæµ®åå°æ°ã§å®è£ ãããšäžžã誀差ãåå ã§WAãããå顿ãããèªã¿è¿ããšã
$|X|,|Y|,|R| \leq 10^5$ - X,Y,R ã¯é«ã å°æ°ç¬¬4äœãŸã§äžãããã
ãªã®ã§ã1+52ãããç²ŸåºŠã®æµ®åå°æ°ã§ã¯ç²ŸåºŠãè¶³ããªããããã64-bitã§ã¯ã®ãªã®ãªç²ŸåºŠãè¶³ããããã®ããæµ®åå°æ°ãåºå®å°æ°(æŽæ°éšx10000+æµ®åå°æ°éš)ãšããŠæ±ããããã§10鲿°18æ¡(9æ¡ã®äºä¹)ã誀差ãªãæ±ãããšãã§ããã
ã³ãŒãã¯ãã¡ã
ä¹ ãã¶ãã«ãã€ã¯ã¹ãã©æ³
ããããã®åºçºç¹ã«ã€ããŠããã€ã¯ã¹ãã©æ³ã䜿ã£ãŠæçè·é¢ãæ±ããã°ãããå€å°å·¥å€«ãããã
- åãåºçºç¹ããçµçç¹ãžã®éè·¯ã«ã€ããŠã¯ãæççµè·¯ã®éè·¯ã ãæ®ããŠä»ã¯æšãŠã
- ãã€ã¯ã¹ãã©æ³ã®ãã¥ãŒã¯ãåæç¶æ ã§åºçºç¹ã®é£ãç©ããåºçºç¹ãç©ãã®ã§ã¯ãªãã
- è·é¢ã®åæå€ã¯ãåºçºç¹-åºçºç¹ã®ã«ãŒããããã°ãã®è·é¢ãããã§ãªããã°ç¡é倧ã«ãã
å ¬åŒè§£èª¬ã§ã¯ãéè·¯ã®åããå転ããŠåºçºç¹ã«åããè·é¢ãæ±ããŠããããäžèšã®æ¹æ³ã§ããã°éè·¯ãå転ããã°ã©ãã¯äœããªããŠããã
ã³ãŒãã¯ãã¡ã
çããæŽæ°
æŽæ°ã®äºåæ¢çŽ¢ã¯ãçŽ æŽã«å®è£ ãããšåºéã2以äžã®ãšãã«ç¡éã«ãŒãã«é¥ããããã®ã§ããã¿ãŒã³ã確ç«ããã
ã³ãŒãã¯ãã¡ã
ãã€ã¯ã¹ãã©æ³ã§ããã
è·é¢ã®å®çŸ©ãæå»ã«ããã°ããã®ãŸãŸãã€ã¯ã¹ãã©æ³ã§è§£ãããBFSã§æçè·é¢ãæ±ãããšãã«åªå 床ãã¥ãŒã«è¿œå æ å ±ãè¶³ãããã«ãç®çå°ãšç§»åæé(ããããè·é¢)ã®ä»ã«çºè»ééããã¥ãŒã«èŒããã°ããã
ã³ãŒãã¯ãã¡ã
ã³ãŒãã¯ãã¡ã
æ¡ä»¶ä»ã確çã®å®çŸ©ãã®ãã®ã§ãããããæ°åãè¡šã«æžãããã«ãŒãã§åºå°œãããå Žåãèæ ®ããã
ã³ãŒãã¯ãã¡ã
確çã®å æ³æ§ããæããã
ã³ãŒãã¯ãã¡ã
Binary Indexed Tree (Fenwick Tree) ã䜿ã£ãŠã¿ãããããã¯çžŠã®ç©ã暪ã«ããã
å
¬åŒè§£èª¬ã«ããã°
ã³ãŒãã¯ãã¡ã
å®é䟡å€ã倧ããè·ç©ãããã®è·ç©ãå
¥ãæå°ã®ç®±ã«åããã°ãããããã§ãªããŠãåã䟡å€ã®ãã®ããã£ãšå€§ããªç®±ã«å
¥ããã®ããåã倧ããã«äŸ¡å€ãäœãè·ç©ã«å
¥ããã®ãæå³ããªã(亀æããã°ãã)ãã¯ãšãªéã«äŸåé¢ä¿ã¯ãªãã std::multiset
ã§ç®±ã管çããŠè·ç©ã®å
¥ã£ãç®±ãåãé€ãã°ããã
ã³ãŒãã¯ãã¡ã
éããèããã以äžãã¹ãŠæŒç®ã
æåã«ç¶æ
é·ç§»è¡šãäœãã
æäœãéããèããåæç¶æ
ã髿©åã
-
$X_N$ ã髿©åã®æçªãªããäžæåã¯$R[0,0]$ ãŸãã¯$R[S_N,0]$ ã®ããããã§ãã£ãŠã»ãã -
$X_N$ ãéæšåã®æçªãªããäžæåã¯$R[0,1..6]$ ãŸãã¯$R[S_N,1..6]$ ã®ããããã§ãã£ãŠã»ãã
ãããäžè¬åãããç¶æ ãå®çŸ©ããã
-
$Prev$ ã¯ãåã髿©åã®æçªãªã$true$ ãéæšåã®æçªãªã$false$ ãšãã -
$Current$ ã¯ãä»ã髿©åã®æçªãªã$true$ ãéæšåã®æçªãªã$false$ ãšãã -
$U \subseteq {0..6}$ ã¯ãåã髿©åã®æçªãªã髿©åã«ãšã£ãŠã®æåæã®éåãåãéæšåã®æçªãªã髿©åã«ãšã£ãŠã®æåæã®éåãšãã
ç¶æ
é·ç§»ã¯ã
å ¬åŒè§£èª¬ãšåãããã¯ãã©ããã³ã°ã§ããããå ¬åŒè§£èª¬ã®æ¹ããã£ãã衚çŸããŠããã
ã³ãŒãã¯ãã¡ã
C++ã®åã§ããæŒããŠããŸã£ãã
åç³ã®éã«å¢çç·ãåŒã/åŒããªããã€ãŸãåç³ããŸãšãã/ãŸãšããªãããããå šæ¢çŽ¢ãããšãC++å®è£ ãªã2ç§ãåãã®ã§ACã§ãããå¢çç·ã®å åŽã®é å(åç³ãã€ãªãã£ããã®ã)ãunion-findæšã§ç®¡çããã以äžã®éãå šæ¢çŽ¢ããã
- æåã¯ååç³ãå€ç«ããé åãšãã
- å¢çç·ãåŒããªãé åãmergeãã
- é åã®å€§ããã2(äžç³)ãè¶ ããããã®å Žã§æã¡åã
- æã¡åããã«äžéãå¢çç·ãåŒã/åŒããªããçµããããäžç³ãAæãåç³ãBæãããã©ããæ°ãã
解説éãã«ç³ã®é 眮ã§DFSãããš9ããªç§ã§è§£ãããç§ã®ã³ãŒãã¯ãã¡ã
ã³ãŒãã¯ãã¡ã
éåçããã°ãããã
$g(x) = g(L) : x \leq L$ $g(x) = g(L) + x - L : L < x < R$ $g(x) = g(R) : x \geq R$
ãšäºæ³ã§ããããªã®ã§
ããã§
-
$t = 1$ ãªã$L$ ã$L - a_i$ ,$R$ ã$R - a_i$ ã«çœ®ãæãã -
$t = 2$ ãªã$L$ ã$max(L, a_i)$ ,$R$ ã$max(R, a_i)$ ã«çœ®ãæãã -
$t = 3$ ãªã$L$ ã$min(R, a_i)$ ,$R$ ã$min(R, a_i)$ ã«çœ®ãæãã
å³å¯ãªèšŒæã¯å ¬åŒè§£èª¬2ã«ããã
ã³ãŒãã¯ãã¡ã
ã³ãŒãã¯ãã¡ã
ãã¯ãã«ãå転ãããã°æ±ãŸãã
ã³ãŒãã¯ãã¡ã
ãããã£ãšDP
åãè²ã®ããŒã«ãååãããªããå³ç«¯ã®ããŒã«ãŸã§è¡ã£ãŠå·Šç«¯ã®ããŒã«ãŸã§ååãããã巊端ã®ããŒã«ãŸã§è¡ã£ãŠå³ç«¯ã®ããŒã«ãŸã§ååããããã©ã¡ããã«ããã°ããã巊端ãå³ç«¯ä»¥å€ã®å Žæã§æ¢ãŸãæå³ã¯ç¡ã(次ã®è²ã«ãªã£ãŠããåãã°æžãããšãªã®ã§)ã
ããã§ä»ã®è²ã®å·Šç«¯ãšå³ç«¯ã次ã®è²ã®å·Šç«¯ãšå³ç«¯ãçµã¿åãããŠDFSãããšTLEãããããã§DPã§ããªãããšèãããã€ãŸã
ã³ãŒãã¯ãã¡ã
å顿ãããèªãã
æåãåããªãå ¥ãæ°åãåãããšããã®ã¯åããããããæ°åãåããªãæåãåãããšããããšã¯å顿ãããèªããšè§£ããåŸè ã®å¶çŽã®ãããã§éåç°¡åãªåé¡ã«ãªãã
ãŸãæåã11çš®é¡ä»¥äžãããšãã¯è§£ããªããæåã10çš®é¡ä»¥äžãªãç·åœããã§ãããæåã
std::next_permutation
ããã°
ã³ãŒãã¯ãã¡ã
ãªã®ã§æšãé ç¹1ããDFSããŠãéäžã«ããè²ãæ°ããã°ãããæšãªã®ã§èã«åãããšãã«çµç±ããé ç¹ã®è²ãå ããæ ¹ã«åãããšãã«é ç¹ã®è²ãé€ãã
ã³ãŒãã¯ãã¡ã
解説ãèªãã§ãè§£ããªãã®ãédiff
é£çµæåã«åè§£ããŠããããè§£ããDFSã§ãã©ãã®ã¯åãã£ãããå ¥åäŸ1ãè§£ãããšãã§ããã«è«Šãããåã«é ç¹ã®è²ã決ãæã¡ããŠé²ããšãå ¥åäŸ1ã®å³åããšå·Šåãã§åãå¡åããéè€ããŠæ°ããŠããŸããDFSã§é ç¹ããã©ãæ¹æ³ãåºå®ããã°ãéè€ããã«æ°ããããã
DFSã§é ç¹ããã©ãé åºãæ±ããŠé ç¹ã远å ãããšãæ ¹ãæåãæ·±ãå ŽæãåŸã«ãªãããã®ãšã远å é ã€ãŸãæ ¹ãæåã«ãæ·±ãå ŽæãæåŸãã©ãå¿ èŠããããããããªããšTLEããããã£ããéã«ããããã«TLEããªããªãåããªããŠèŠåŽãããããã®é£æåºŠãédiffã§ããã
ã³ãŒãã¯ãã¡ã
ããŸã«ã¯édiffãæ©ãè§£ããã
C++ãªããããå šæ¢çŽ¢ã§ãéãã ãããšæã£ãŠèšç®éãæ°ã«ããªãã£ããã1722 msã§éã£ãŠããŸã£ãã
次ã®ãããªDPãèããã
ã³ãŒãã¯ãã¡ã
鳩ã®å·£åçã
鳩ã®å·£åçã§ãã£ããè§£ãããããããçºæ³ãéèŠã§ãããå®ç³éãDFSãšååž°ã§æ±ããŠããããããã¹ãä¿åããªãããšããžã±ãŒã¹ãå®è£ ããã®ãé£ãããã³ãŒãã¯ãã¡ãã