ABC lessons learned6 - zettsu-t/zettsu-t.github.io GitHub Wiki
ã³ã³ãã¹ãã«åå ããæèšããŸãšããŠãããŸãã
ãããããŒãžãž ABC åå èš2ãž ABC åå èš3ãž
ABC 325ãã³ã³ãã¹ãååå ã§ãããA,B,C,Dã¯ã³ã³ãã¹ãã§è§£ããã
ã³ãŒãã¯ãã¡ã
å顿éãã«çŽ çŽã«å®è£
ãããã³ã³ãã¹ãã§æåã®æåºãªã®ã§ std::cout << s << " san\n";
ã® san
ã®åã«ç©ºçœãå
¥ããã®ããã£ããå¿ããããæåºããåã«æ°ãä»ããŠçŽããã
èªè§£åãåãããã
ã³ãŒãã¯ãã¡ã
äžçæšæºæ(UTC)ã§
ããšã¯ç·åœããã§ãããUTCã
ã³ãŒãã®ç¹°ãè¿ãã§æéãæããŠããŸã£ãããã£ãšèŠé ããå®è£ ãããã
ã³ãŒãã¯ãã¡ã
Union-findæšã«äžå·¥å€«
é£åããã»ã³ãµãŒãé£çµæåãšããunion-findæšã«ãŸãšããããŸãšãæ¹ã¯ãçžŠãæšªãå³äžãå·Šäžæ¹åã«é£çµãããã¹ç®ã§ãããããããå§ç¹ãã©ããããæ³šæãå¿ èŠã§ãçžŠã¯æäžè¡ãæšªã¯æå³åãå³äžã¯æäžè¡ãšæå³åãå·Šäžã¯æäžè¡ãšæå·Šåãå ããªãããã«æ³šæãããããããªããšç¯å²å€ã¢ã¯ã»ã¹ã«ãªã£ãŠããŸãã
ãšããããã»ã³ããã«ã€ãŸãã»ã³ãµãŒããªããã¹ã§å²ã£ãŠã4èµ°æ»æ¹åã§ã³ããŒã¢ã³ãããŒã¹ãããªãããã«å®è£ ããŸãšããã ãã®ããã« ããã
ããšã¯é£çµæåãæ°ããã°ããã®ã ããæ£ç¢ºã«ã¯ã»ã³ãµãŒãããé£çµæåã§ãããACLã®DSUã¯èŸºãç¡ãé ç¹ãããèªèº«ã ãå«ãé£çµæåãšããŠæ±ãã®ã§ãã»ã³ãµãŒããªããã¹ç®ãé£çµæåã§ããããã£ãŠäžã€ã§ãã»ã³ãµãŒããããã©ãããã atcoder::dsu::groups()
ã®é£çµæåã®æåã®èŠçŽ ãã»ã³ãµãŒãã©ãã調ã¹ãŠãã»ã³ãµãŒã§é£çµæåã ããæ°ããã
æéãéã©ãã£ãã1 WA (ããã«ãã£)ãåºããŠããŸã£ãã®ã§ãä¿®æ£æ¡ãç· ãåãã®ãªã®ãªã«æåºããŠACããã
ã³ãŒãã¯ãã¡ã
æå»ãäžæãæŽæ°ããã
ã·ãã¥ã¬ãŒã·ã§ã³ããã°ããã®ã ãã
倧ãŸããªæ¹éãè¿°ã¹ããæåã«ãååãå°åæ©ã«å
¥ãæå»ã®æé ã«äžŠã³æ¿ãããæ¬¡ã«ãçŸåšæå»ä»¥éã«ãªã£ãååã¯ãã¹ãŠå°åå¯èœãªã®ã§ãç· ãåã std::priority_queue<Num, std::vector<Num>, std::greater<Num>>
ãªã®ã ã(ããã©ã«ãã¯æã倧ããå€ãå
é ã«æã£ãŠããã®ã§)ãç·åŒµãããšå¿ããŠããŸãã
é«éã«ã·ãã¥ã¬ãŒã·ã§ã³ããããã«ãçŸåšæå»ãäžæãæŽæ°ããããšãèããããŸãçŸåšæå»
- åªå
床ãã¥ãŒã空ãªãããŸã åªå
床ãã¥ãŒã«å
¥ããŠããªãåå
$i$ ã®æãæ©ãæå ¥æå»$T_i$ ãšçŸåšæå»$time$ ã®ã©ã¡ããé ãæ¹ã«çŸåšæå»$time$ ãé²ãããããã§çŸåšæå»$time$ ã1ãã€å¢ãããšTLEããã - åªå
床ãã¥ãŒã«å
¥ããŠããªãååã®ãã¡ãæå
¥å¯èœãªååã€ãŸã
$T_i \leq time$ ãæºããååãåãåºããŠãå°åæ©ããåºãæå»ãåªå 床ãã¥ãŒã«èŒãããååãåªå 床ãã¥ãŒã«æå ¥ããã$index$ ã1ã€é²ããããã¹ãŠã®ååãæå ¥ããåŸã«ãªãŒããŒã©ã³ããªãããã«æ°ãä»ããã - åªå
床ãã¥ãŒã空ã«ãªããŸã§ååãäžã€ãã€åãåºããååãå°åæ©ããåºãåã€ãŸã
$T_i + D_i \leq time$ ãªãå°åå¯èœãªã®ã§ãå°åããååã®æ°ãäžã€å¢ãããååãäžåå°åããããçŸåšæå»$time$ ã1å¢ããã- å°åæ©ã«æå ¥ããŠããªãååãããããã®æå ¥æå»ãçŸåšæå»ãšçããããã以åãªããåªå 床ãã¥ãŒã®åŠçãæã¡åãããããæ±ãæãããšWAãã(åŸããæå ¥ããŠå°åæ©ããåºãã®ãæ©ãååãèŠéããã®ã§)ããšãããWAããŠããŸã£ãã
- ããã§ãªããã°åªå 床ãã¥ãŒã空ã«ãªããŸã§...ãšããåŠçãç¹°ãè¿ã
ããããŠæ±ãããå°åããååã®åèšãçãã§ããã
å ¬åŒè§£èª¬ã«ããããå°åæ©ã«ååãç¡ããšãã«çŸåšæå»ãé²ããããšããæ¹éãšåºæ¬çã«åãã§ãããäžèšã§WAããªããããªé æ ®ãé£ããã£ããWAã®åé¿çã§ã¯ãªããåããããããã«å®è£ ãçŽããš ãã®ããã« ãªãã
- ã·ãã¥ã¬ãŒã·ã§ã³ã®çµäºæ¡ä»¶ã¯ãååãå šãŠå°åæ©ã«æå ¥ããå°åæ©ã空ã§ããããš
- æå ¥æå»ãšåããæå ¥æå»ãéããååããã¹ãŠå°åæ©ã«æå ¥ãã
- ãã¥ãŒã空ã§ãªããã°äžã€ååãåãåºããç· ãåããéããŠãªããã°å°åããå°åããååã®æ°ãäžã€å¢ãããæå»ã1å¢ãããããã§ã¯ã«ãŒããåããªãã®ãéèŠã
- å°åæ©ã空ã§ãæªæå ¥ã®ååããããªããæªæå ¥ã®ååã®æå ¥æå»ãŸã§çŸåšæå»ãé²ãã
ã«ãŒããäžååããšãå°åæ©ããååãåãåºã(å°åå¯èœãã©ããã¯åããªã)ããå°åæ©ã空ãªã®ã§æèšãé²ããŠååãæå
¥å¯èœã«ããããå°ãªããšãã©ã¡ãããæç«ããããã£ãŠã©ã®ååãåããªããšããç¡éã«ãŒãã«ã¯ãªããã
Eåé¡ä»¥éã¯ã³ã³ãã¹ãäžã«ã¯è§£ããªãã£ãã®ã§å¥éè§£ããã
ã³ãŒãã¯ãã¡ã
ãã€ã¯ã¹ãã©æ³
ãã€ã¯ã¹ãã©æ³ã®ã¹ããããã¯äœã£ãããã³ããããŠãã䜿ããããã«çŽããæ¹ããããåé¡ã«é©çšãããŸã§3åæããã®ã¯ãã£ãããªãã
瀟çšè»ã§è¡ãéœåžã¯0-based indexingã§é ç¹ std::vector<std::vector<Num>> edges(N * 2)
ã®èŠçŽ ã«æãããªããŠæžãã
ãããç§»åæéã蟺ã®éã¿ãšããã°ã©ãã«ããã
- 瀟çšè»ã§çããéœåž
$i$ ãã瀟çšè»ã§è¡ãéœåž$j$ ãžã®è·é¢ã¯$D_{i,j} \times A$ - 瀟çšè»ã§çããéœåž
$i$ ããé»è»ã§è¡ãéœåž$j$ ãžã®è·é¢ã¯$D_{i,j} \times B + C$ - é»è»ã§çããéœåž
$i$ ããé»è»ã§è¡ãéœåž$j$ ãžã®è·é¢ã¯$D_{i,j} \times B + C$ - 瀟çšè»ã§çããéœåž
$i$ ããé»è»ã§è¡ãéœåž$j$ ãžã®è·é¢ã¯$\infty$
é ç¹
å
¬åŒè§£èª¬ã¯ãéœåž1ãã瀟çšè»ã§ãã©ãçããæçè·é¢ãšãéœåž
ã³ã³ãã¹ã2åç®ã§ãããA,B,C,Eã¯ã³ã³ãã¹ãã§è§£ãããDã¯æéåããF,Gã¯å顿ããèŠãŠããªãã
ã³ãŒãã¯ãã¡ã
100éã«æå³ã¯ç¡ã
ã³ãŒãã¯ãã¡ã
å顿ãããèªãã
ããªããå¶çŽã®æ¡ä»¶äžã§çãã¯å¿
ãååšããŸããã®ã§ã326-like number ãå
šéšåæããŠã std::lower_bound
ã§èŠã€ããã
å ¬åŒè§£èª¬ãèŠãããäžã€ãã€åè£ãå¢ããã°ãããŠå šéšåæããå¿ èŠã¯ãªãã£ããBåé¡ã¯äžæãæ¹æ³ãèããããããã£ãšå®è£ ããæ¹ãæ©ãã®ã ã(TLEããããšã¯ãªãã®ã§)ãããã§ãåæã§ããæ¹æ³ãæãã€ãå¿ èŠãããã解説éã å®è£ ãããšã確ãã«ç°¡æœã«æžããã
ã³ãŒãã¯ãã¡ã
äžéå端ã¯ãããªã
ããšã¯ std::lower_bound
ã§ã¿ã€ããã¿ã€ãããªããã° end()
ãè¿ãã®ã§ãã®æãåé¡ãªãè·é¢ãæ±ãŸããèšç®éã¯
å°ºåãæ³ã䜿ãã°
ã³ãŒãã¯ãã¡ã
DFSã§ã¯ãªãã£ã(ããã§ã¯ãªãã)
ã³ã³ãã¹ãäžã¯DFSã§è§£ãããšããŠã©ãã©ãã³ãŒããé·ããªã£ãŠåéãä»ããªããªãããããªãæéåãã«ãªã£ããç¿æãã£ãšãã£ããããè§£æ³ãæãã€ããŠACããã
ããè¡ã«æ³šç®ãããšãæååã®ãã¿ãŒã³ã¯ ABC
ã®é åãšã ABC
ãå
¥ãããã¹(空ãã§ã¯ãªããã¹)ã®äœçœ®ã®çµã¿åããã§ããã
åè¡ã®å
é ã®æå㯠No
ãåºåããã
- ååã®ã空ãã§ãªããã¹ã®æåã®æåã¯
$C$ ã§äžããéã - ååã«
A,B,C
ã¯ã¡ããã©äžåãã€åºçŸãã
ãã®æ¹æ³ã¯å ¬åŒè§£èª¬1ãšåãã§ãããC++ãªãéäžã§æ¢çŽ¢ãæã¡åããªããŠãTLEããªããå ¬åŒè§£èª¬2ã«åºã¥ãå®è£ 㯠ãã¡ã
æ³šææ·±ãå®è£ ããã°DFSã§ã è§£ãã ãå ¬åŒè§£èª¬ããæ¡ä»¶ããããããã®ã§å®è£ ããã«ã¯ã³ã³ãã¹ãã®æéãå³ããããå®è¡æéã«åé¡ã¯ç¡ã(4 secå¶çŽã§194 msec)ã
- ãã¹ãå·Šããå³ã«åããŠãå³ç«¯ãŸã§è¡ã£ããäžã®è¡ã«ç§»ã
-
$r$ è¡ç®$c$ åç®ã®ãã¹$[r,c]$ ãåããæå矀ABC
ãŸãã¯ç©ºçœ.
ã以äžã®éãéžã¶- 巊端ãã
$[r,c-1]$ ãŸã§ç©ºçœ.
ã ããªãã$R[r]$ ããã¹$[r,c]$ ã®åè£ã«ãããå ããŠã空çœãããã«å ¥ããŠãå³ç«¯ãŸã§$[r,(c+1)..N]$ ã«æ®ãã®æåãå ¥ãããããªã空çœãåè£ã«ããã - 巊端ãã
$[r,c-1]$ ãŸã§ã«ç©ºçœ.
以å€ããããªãå°ãªããšã$R[r]$ ã¯ãã䜿ã£ãŠããããŸã 䜿ã£ãŠããªãæå矀ãåè£ã«ãããå ããŠã空çœãããã«å ¥ããŠãå³ç«¯ãŸã§ã«æ®ãã®æåãå ¥ãããããªã空çœãåè£ã«ããã
- 巊端ãã
- ãã¹ãŠã®ãã¹ãåãŸã£ãããååã
$C$ ãæºããã調ã¹ããåè¡ã$R$ ãæºããããšã¯ãã®ããã«DFSããã®ã ãã調ã¹ãªããŠããã
ã³ãŒãã¯ãã¡ã
å¶çŽãããèŠãã
å顿ããããŠç¢ºçDPã«ã¿ãããããã
ãŸãæ£çã瀺ãã確çDPãšããã°äžå¿ãããªã®ã ããããããšã«æ°ã¥ãã°ç°¡åãªæŒžååŒã§è¡šçŸã§ãããããã¯
ãšããããšã§ä»¥äžã®æŒžååŒãçµãã
- 絊æ
$A_i$ ããããã確çã$P_i$ ãšããã䟿å®äž$P_0=1$ ãšãã -
$i > 0$ ã«ã€ããŠã$P_i = 1/N \times \sum_{j=0}^{i-1} P_j$ ã§ããã
挞ååŒã¯äžèšã§èšããšåŒãDPã§ããã
- åã®ããããã®ç®ãã©ãããã
$i$ ãã§ã確çã¯$1/N$ ã§ãã - ãããŠãããŸã§åºããµã€ã³ãã®ç®ãã©ãããé çªãã¯ã
$j$ ã®ç®ãåºããã©ããã§åºå¥ããã°ç¶²çŸ ã§ããããªããªã$j$ ãç°ãªã$A_j$ ã®çµŠæã¯äºåºŠãããããšã¯ã§ããªãã®ã§ããããŸã§åºããµã€ã³ãã®ç®ã¯ç矩å調å¢å ã«ãããªããªãããã ã - äŸãã°3ã®ç®ã«ãã©ãã€ãæ¹æ³ã¯ã
$[0,3],[0,1,3],[0,1,2,3],[0,2,3],$ ããã¹ãŠã ããçµå±3ã®ç®ã«ãã©ãã€ãçŽç·ã®ç®ã«ãã©ãã€ã確çã®åãšããŠç¶²çŸ ã§ããã$[0,1,2,3],[0,2,3]$ ãçµ±åããã®ã«ã2ã®ç®ã«ã©ããã©ãã€ãããã¯é¢ä¿ãªãã
挞ååŒã®èšç®åæ°ã¯
ãã®æŒžååŒã¯ããããéããåŒã«å€æã§ããããã«ã¿ããå ¬åŒè§£èª¬2ãããã«è©²åœããããåŒã®å°åºãééããããããªãçŽ çŽã«ã³ãŒãã§å®è£ ããæ¹ãããã
挞ååŒã
確çDPã§
æ¢è¿°ã®éã
ã³ã³ãã¹ã3åç®ã§ãããA,B,C,D,Eã¯ã³ã³ãã¹ãã§è§£ãããFã®å顿ã¯ãã£ãšã¿ãŠè«ŠããGã®å顿ã¯ã¿ãŠããªãã
ã³ãŒãã¯ãã¡ã
å šæ¢çŽ¢ãã®1
ab
ã ba
ã«ãªããã®ãäžã€ã§ãããã° Yes
ãäžã€ããªããã° No
ã§ããã
ã³ãŒãã¯ãã¡ã
å šæ¢çŽ¢ãã®2
__int128
ã䜿ã£ãŠæŒç®ãªãŒããŒãããŒãé¿ããŠããã
å®ã¯ long long int
(æäœ64-bit)ã§ãéãã
$16^{16} = 0 < B$ $17^{17} = -2,863,221,430,593,058,543 < 0 < B$ $18^{18} = -497,033,925,936,021,504 < 0 < B$ $19^{19} = 6,353,754,964,178,307,979 > 10^{18} > B$
ã§ãããçµæçã«ã¯éã£ãŠããŸãã
ã³ãŒãã¯ãã¡ã
æäœã£ãã®ã圹ç«ã£ãã
ããããæ°ç¬ã§ãããåé¡éãã«å®è£ ããã°ããã3x3ãã¹ã®4éã«ãŒããäžæãå®è£ ããã
std::set
ã®æ¹ã count
ããããã° std::bitset<10>::count
ãã ã
ã³ãŒãã¯ãã¡ã
äºéšã°ã©ã
äºéšã°ã©ããæ§æããããšã«åž°çããããŸã No
ã§ããã
0
ã蟺ã§ã€ãªãã£ãçžæã 1
ãçžæã®çžæã 0
... ãšåœ©è²ããããšãèããã
- ãŸã è²ãã€ããŠããªãé ç¹ã¯ãé£ãšç°ãªãè²ã§å¡ã
- æ¢ã«è²ãã€ããŠããé ç¹ã¯ãé£ãšç°ãªãè²ã§å¡ãããªãBFSã§ãã©ããªããé£ãšåãè²ãªãé¡æãæºãããªãã®ã§
No
ã§ããã
ãã¹ãŠã®é ç¹ã圩è²åºæ¥ãã Yes
ã§ããã
Union-findæšã䜿ã£ã å®è£ ã®æ¹ãç°¡æœã§ãããBFSããéãå®è£ ã§ããã®ã§è§£çæéãçãããŠä»ã®åé¡ã«æéãå²ããã
ã³ãŒãã¯ãã¡ã
å²åŒäŸ¡å€
DPã§è§£ãããã«ã¿ããŠãå¢çæ¡ä»¶ãã¡ãã£ãšããåãããªããªã£ãã-Infãéã«æ±ºããã®ããããªãã£ãã
-
constexpr double Inf = -1000000000000;
ã¯WA -
constexpr double Inf = -1e+18f;
ãWA -
constexpr double Inf = -std::numeric_limits<double>::infinity();
ã¯AC
ã§ãããæåŸã®å Žåã
ãã®
ããããŠDPãæŽæ°ãããšãæŽæ°åæ°ã¯
ããã§
ã³ãŒãã¯ãã¡ã
ã³ã³ãã¹ãäžã«ã¯å顿ãèªãã§ãããªãããADTã§èŠãã®ã§è§£ãããADTã®60åã§9å®ã¯éã«åããªãã£ããããš6:15ã ã£ãã
ããã«ããããåãŸãã®ã§ã¯ãªããããããåãããããã©ã®ç¯å²ã«ãããããšèªã¿æ¿ãããã€ãŸãæå»
é å»¶ã»ã°ã¡ã³ãæšã«ã¯ããã座æšã®ããããæŸããããã®äœçœ®ã®åº§æšæ°ãèŒããã
- ããããæå»
$T_i$ ã«$X_i$ ã«èœã¡ãããåºé$[X_i, X_i + W)$ ã«1ãè¶³ãããã®ãããããã¥ãŒã«è¿œå ããã - æå»
$T_i - D$ ãŸã§ã«èœã¡ããªã³ãŽã«ã€ããŠãåºé$[X_i, X_i + W)$ ã«-1ãè¶³ãããã®ãããã¯ãã¥ãŒããé€ãã - å šåºéã«ã€ããŠã®å€ã®æå€§å€ããããæå»ã«æŸãããããã®æå€§æ°ã§ãã
- ãããå
š
$T$ ã«ã€ããŠæå€§å€ãæ±ãã
2ãš3ãéã«ããã®ã§çããåãã60å9å®ãéããã®ã¯æããã£ãã
ã³ã³ãã¹ã4åç®ã§ãããA,B,C,D,Eã¯ã³ã³ãã¹ãã§è§£ãããFã®å顿ã¯TLEè§£ãŸã§è¡ã£ããè§£ããªãã£ãã
ã³ãŒãã¯ãã¡ã
æ¡ä»¶ã«åã
ã³ãŒãã¯ãã¡ã
決ãæã¡
ãã®çš®ã®Båé¡ã¯æ±ºãæã¡ãå®ç³ã§ããã
ãŸãæã決ãæã¡ãããæã®äžäžæ¡ã0ãªãç¡èŠãããããã§ãªããã°ãã¹ãŠã®ææ¥ãåæããŠãæã®äžäžæ¡ãšæãæ¥ã®åæ¡ãäžèŽãã®ãæ°ããã
ææ¥ãæåå衚èšããæ¹ãæ©ã å®è£ ã§ããã
ã³ãŒãã¯ãã¡ã
环ç©å
ã³ãŒãã¯ãã¡ã
ããã·ã¥ããŠã³ãªãŒãããã³
æåãã¹ã¿ãã¯ã«ç©ãã§ãããã¹ã¿ãã¯ãããã ABC
(ã¹ã¿ãã¯ã®äžããé ã« CBA
)ãªããåãé€ããã ãåãé€ãã std::stack
ã ãšã¹ã¿ãã¯ã®äžãã2,3æåç®ãèŠãã®ã倧å€ãªã®ã§ã std::vector
ã®æ¹ãå®è£
ããããã
ã³ãŒãã¯ãã¡ã
ç·åœãã
ã³ãŒãã¯ãã¡ã
éã¿ã€ãunion-findæš
éã¿ã€ãunion-findæšã䜿ãã°è§£ããã䜿ããªããŠãè§£ãããããã«ã€ããŠã¯åŸã§è¿°ã¹ããã³ãŒãã¯ãã¡ãã® èšäº ãåèã«ããåœåèŠåãã³ãŒãã£ã³ã°ã¹ã¿ã€ã«ãªã©ãå€ããŠãããããããããšã¯å ¬åŒè§£èª¬éãã§ããã
- è§£ã®å
šäœæ§é ãã蟺
$a_i,b_i$ ã«è·é¢$d_i$ ãããã°ã©ããšã¿ãªãã蟺ã®åãã¯$a_i$ ãã$b_i$ ã«è·é¢$d_i$ ãéåã$b_i$ ãã$a_i$ ã è·é¢$-d_i$ ã§ãããè·é¢ãšããããéã¿ãšèšãæ¹ãé©åãããããªãã -
$a_i,b_i$ ãåãé£çµæåã«ãªããã°ãè·é¢$d_i$ ã®èŸº$a_i,b_i$ ã§çµã¶ããã®ãããª$i$ ã¯è¯ãéåã§ããã -
$a_i,b_i$ ãåãé£çµæåã«ããã°ãé ç¹$a_i,b_i$ ã®è·é¢ã$d_i$ ãªã$i$ ã¯è¯ãéåã§ãããããã§ãªããã°è¯ãéåã§ã¯ãªã
å ¬åŒè§£èª¬3ã«åºã¥ãQuick Findã䜿ã£ãå®è£ 㯠ãã¡ã ã§ãããQuick Findã®å®è£ ã¯ãã¡ãã® èšäº ãåèã«ããã
æåã«ç§ãæãæµ®ãã¹ãè§£æ³ã倧äœåããªã®ã ãã
ã³ã³ãã¹ã5åç®ã§ãããA,B,C,Dã¯ã³ã³ãã¹ãã§è§£ãããEã¯80åæããŠè§£ãããFã¯ã³ã³ãã¹ãçµäºçŽåŸããè§£ãå§ããŠ16åã§è§£ãããã€ãŸãåé¡éžæãå®å šã«ééããã
ã³ãŒãã¯ãã¡ã
Aåé¡ã¯æåŸã®æåã®åŸã«ç©ºçœãåºåããªãããæ°ãä»ããã念ã®ããæ¹è¡ãåºåããªããå
¬åŒè§£èª¬ãŠãã«ã¯ã std::endl
ã¯åºåããŠããããããã
ã³ãŒãã¯ãã¡ã
éé ã«äžŠã³æ¿ããŠå é ããé ã«å€ã調ã¹ãå é 以å€ã®å€ãåºãããããäºçªç®ã«å€§ããå€ã§ããã
ã³ãŒãã¯ãã¡ã
ã©ã³ã¬ã³ã°ã¹å§çž®
æåçš® a-z
ããšã®æé·ã©ã³ãæ±ããããããã®åãçãã§ããã
ã³ãŒãã¯ãã¡ã
std::set
ãäžæã䜿ãã std::set<Num,Num>
ã®èŠçŽ ã¯åè£è
ã«å¯Ÿå¿ããåŸç¥šæ° std::set<Num,Num>::rbegin()
ã§åãåºããã®ã¯é¡æã®åœéžè
ãã€ãŸãæå€åŸç¥šã§ãååŸç¥šæ°ãªãçªå·ãæãå°ããåè£è
ã§ããã
ããšã¯äžç¥šãã€é祚ããŠãåè£è
ã® std::set<Num,Num>
ã®èŠçŽ ãå
¥ãæ¿ããã°ããã
å
¬åŒè§£èª¬ã¯ãæåŸã®åœéžè
ãèŠããŠçœ®ããŠ
ã³ã³ãã¹ãäžã«80åæããŠè§£ããªãã£ãã
ã³ãŒãã¯ãã¡ã
ãŸãWAãåãåããªãè§£æ³ãè¿°ã¹ããå®æç³» #
ã ããããªãæååãäœãããã©ãã調ã¹ã(ãã®æ¹éèªäœã¯å
¬åŒè§£èª¬ãšåã)ãå¥ããããšããã®ã¯ã #
ã«çœ®ãæãããããšããããšã§ããã #
以å€ã®é£ç¶ããæååããã£ããšããå·ŠãŸãã¯å³ãã
å
¬åŒè§£èª¬ã¯ T=ABA
ãš S=...A#A...
ãäžèŽããããšã§ãããèšãããŠã¿ãã°ãã®éãã ã£ããè«é£ãã«å¯ŸåŠãããªãå·Šå³ããã¹ãã£ã³ããã®ã§ã¯ã ããããããªãã
ã³ã³ãã¹ãäžã«80åæããŠè§£ããªãã£ãããã³ã³ãã¹ãçŽåŸã«16åæããŠè§£ããããã®åé¡ã§ã¯ãªãEåé¡ãéžãã ã®ã¯ãå®å šã«åé¡éžæãééããã
ã³ãŒãã¯ãã¡ã
é«åºŠãªããŒãžãã¯ãèŠãããšæã£ããããã§ã¯ãªãã£ãã顿éããã®ãŸãŸå®è£ ããã°ACã§ããã
-
$N$ åã®ç®±ã«å¯Ÿå¿ããstd::set
åã®$S_i$ ãçšæãããç®±ã«ã¯$C_i$ ã ãå ¥ããã - ã¯ãšãªããšã«
$S_a$ ã®äžèº«ã$S_b$ ã«ç§»ãããã®ãšãç®±ã«ããããŒã«ã®çš®é¡$|S_a|$ ã¯sets[a].size()
ã§ãããããŒã«ãç§»ãåã«ã$|S_a| > |S_b|$ ãªãstd::swap
ã§ç®±ãå ¥ãæ¿ããŠããç§»ãããã®åŸ$|S_a|$ ã空éåãšstd::swap
ããŠç©ºã«ããã
ãã®å®è£
ã¯536 msã§å®è¡ã§ããŠTLEããªããå
¬åŒè§£èª¬ãäžèšã®éã std::swap
ãåæã«ããŠããã
ã³ã³ãã¹ã6åç®ã§ãããA,B,C,Dã¯ã³ã³ãã¹ãã§è§£ãããEã¯ç· ãåã10åé ããF,Gã¯åé¡ãèŠãŠããªãã
ã³ãŒãã¯ãã¡ã
çŽ çŽã«
ã³ãŒãã¯ãã¡ã
顿ãçè§£ããã®ã«èŠããã ã
å
¬åŒè§£èª¬éãã std::clamp
ã䜿ããšç°¡åã« å®è£
ã§ããã
ã³ãŒãã¯ãã¡ã
ãã®åé¡ãç°åžžã«æããã£ãŠããŸã£ãã
ãŸãéè² æŽæ°ã®äºä¹ã€ãŸãå¹³æ¹æ°ã
äœãæã£ãã
å®ã¯äžåæ¢çŽ¢ã§ãè§£ããããããäžåæ¢çŽ¢ã§ã¯ãªãå·®åãäºåæ¢çŽ¢ãã€ãŸãç®çã®åŒ
void solve(std::istream& is, std::ostream& os) {
Num d {0};
is >> d;
constexpr Num Upper = 1500000;
Num answer = 1000000000000000000LL;
for(Num x{0}; x<Upper; ++x) {
auto func = [&](const Num y) {
return std::abs(x * x + y * y - d);
};
Num left = 0;
Num right = Upper;
while((right - left) > 1) {
Num base = (left + right) / 2;
if ((func(base+1) - func(base)) < 0) {
left = base;
} else {
right = base;
}
}
answer = std::min(answer, func(right));
}
os << answer << "\n";
}
ã³ãŒãã¯ãã¡ã
ãã®åé¡ãç°åžžã«æããã£ãŠããŸã£ãã
åè¡ååã« o
ãäœåãããæ°ããŠããã o
ããããã¹ãå
šæ¢çŽ¢ãããã®ãã¹ã®åè¡ã«
o
ããããã¹ãå
šæ¢çŽ¢ããšããæ¡ä»¶ãå¿ãããã¹ãŠã®ãã¹ãå
šæ¢çŽ¢ããŠæéãæº¶ãããã
ã³ãŒãã¯ãã¡ã
B,C,Dåé¡ã§æéã䜿ããããŠæéåãããç· ãåãã®10ååŸã«è§£ããããã®åé¡ã«45åæããã®ãé·ããããããšã«ããä»ã®åé¡ãæ©ãè§£ããªãã£ãããšãåå ã§ããã
MEXã¯
éåãšã㊠std::vector
, std::vector
, std::set
ã§æã€ã以äžã®ããã«åæåããã
-
$A[1..N]$ ã®èŠçŽ ã¯èªã¿èŸŒãã èŠçŽ ãèšå®ãã -
$count[A_i]$ ã¯$0 \leq A_i \leq N$ ãèŠã€ãããã³ã«1å¢ããããã ã$A_i > N$ ãªãäœãããªãã -
$blank$ ã¯åæç¶æ ã§$0..N$ ããã¹ãŠå ãã$A_i$ ãåãé€ãããã ã$A_i > N$ ãªãäœãããªãã
äžèšã®åŸ
-
$A_{i_k} = x_k$ ãªãäœãæŽæ°ããªãã以äž$A_{i_k} \ne x_k$ ãšããã -
$old = A_{i_k}$ ãšãããã¯ãšãªã®åã«$old \leq N$ ãªã$count[old]$ ã1æžãããæžãããåŸ0ã«ãªã£ãã$old$ ã¯äœ¿ã£ãŠããªãã®ã§ã$blank$ ã«$old$ ãå ããããã®åŸ$mex = min(mex, old)$ ã«æŽæ°ãã -
$x_k \leq N$ ãªã$count[x_k]$ ã1å¢ããã$blank$ ãã$x_k$ ãé€ãããã§ã«é€ããŠããã°äœãããªãã -
$mex$ ã æ§$mex$ 以äžã®äœ¿ã£ãŠããªãæ°ã«ãããblank.lower_bound(mex)
ãæãå€ã§$mex$ ã眮ãæããã - 眮ãæãã
$mex$ ãåºåãã
ããèããã
-
$old = A_{i_k}$ ãšãããã¯ãšãªã®åã«$old \leq N$ ãªã$count[old]$ ã1æžãããæžãããåŸ0ã«ãªã£ãã$old$ ã¯äœ¿ã£ãŠããªãã®ã§ã$blank$ ã«$old$ ãå ããã -
$x_k \leq N$ ãªã$count[x_k]$ ã1å¢ããã$blank$ ãã$x_k$ ãé€ãããã§ã«é€ããŠããã°äœãããªãã$old = x_k$ ã§ãåé¡ãªãã - ãã®æç¹ã§ã¯
$mex$ ã¯$blank$ ã®æå°èŠçŽblank.begin()
ãæãå€ã§ãã
ä»äœ¿ã£ãŠããªãæ°ã§ã¯ãªããä»äœ¿ã£ãŠããæ°ã管çããŠã³ã³ãã¹ãäžã¯TLEããŠããŸã£ããæåããããã«æ°ã¥ãã°35åã§è§£ããŠãããããã³ã³ãã¹ãã§ã¯æåºãéã«åã£ãå¯èœæ§ãããã®ã ãããããæéç¡å¶éã§è§£ãç·Žç¿ãšæéå ã«è§£ãã³ã³ãã¹ãã®å·®ã§ããã
ã»ã°ã¡ã³ãæšã䜿ããšãèŠçŽ æ°ãšèŠçŽ ã空ãã©ãããåæã«ç®¡çã§ãããåèã«ããã³ãŒã㯠ãã¡ã ã§ãç§ã®å®è£ 㯠ãã¡ã ã§ããã
ã³ã³ãã¹ã7åç®ã§ãããA,B,Cã¯ã³ã³ãã¹ãã§è§£ãããD,Eã¯ç· ãåã8,23åé ããF,Gã¯åé¡ãèŠãŠããªãã
ã³ãŒãã¯ãã¡ã
æ¡ã®ç¹°äžããå®è£ ããã
ã³ãŒãã¯ãã¡ã
æéã䜿ãéããã
é ãDPã§ã è§£ãã ããã¡ãã® èšäºã«ããéããæŽæ°èšç»åé¡ãšããŠè§£ãããSciPyã§è§£ããš ãã¡ã ã§ã PuLPã§è§£ããš ãã¡ã ã
ã³ãŒãã¯ãã¡ã
å
ã® std::upper_bound
ã§èª¿ã¹ãã
ã³ãŒãã¯ãã¡ã
ãããã°ã«ãããã£ãŠæéã«éã«åããªãã£ããäºæ¬¡å 环ç©åã
bool grid[1024][1024];
Num cumsum[1024][1024];
ãšæžãã¹ããšãããã
bool grid[1024][1024];
bool cumsum[1024][1024];
ãšæžããŠããŸã£ãã®ã§ããã€ãŸã§ãã£ãŠãå
¥åäŸãéããªãã£ãã grid
ã cumsum
ã«ã³ãããããšãã«çŽãå¿ãããã³ã³ãã€ã©ã¯ bool
ã« +=
ããŠãèŠåãåºããªãããèŠåãåºãæ¹æ³ãåãããªããä»åŸã¯ç¶æ
ã bool
ã§ç®¡çããã®ãæ¢ããæ¹ããããããããªã(ãããããããšãã£ãŠMLEããããã§ããªãã®ã§)ã
ãã¹ã®åº§æšè¡šç€ºãšããŠãå·ŠäžãŽã£ããã®åº§æšãå«ããå³äžãŽã£ããã®åº§æšã¯å«ãŸãªãããšããã
åäœæªæºã®é åãæ°ãããå·Šäžãçäžãå³äžãå·Šãå³ãå·Šäžãäžãå³äžã«ã€ããŠé»ãã¹ã®æ°ãæ±ããã
å
¬åŒè§£èª¬ã¯
ã³ãŒãã¯ãã¡ã
ã³ã³ãã¹ãçµäº8ååŸã«331-Dã®ãããã°ãå®äºãããã®ãŸãŸè§£ããã15åã§è§£ããã®ã§331-Eãå ã«è§£ããŠ331-DãåŸã«ããã°åŸç¹ãå¢ããã®ã§ããŸãããåé¡éžæãééããããã®çãäžåã«çŽããªãããã 331-Dã®è§£æ³ã¯å顿ãèŠãŠããæãã€ããã®ã§(é ååå²ãå ¬åŒè§£èª¬ããæãã®ãšTLEã«æ°ãã€ããªãã£ãã)ãEããDãå ã«çæãããšãã¯è§£ããã ãããšäºæ³ãããæ£è§£è æ°ãããæéæ£è§£ãD:8åãE:2åã«æ³šç®ããã°ããã£ãã®ãããããªãã
break;
ãå¿ããŠäžåTLEããŠããŸã£ãã
std::vector<std::pair<Num, Num>>
ã«å€æ®µãäž»èãšID
å ¬åŒè§£èª¬1ã®ããã«åªå 床ãã¥ãŒã§ãçµããããã€ã³ããã¯ã¹ç®¡çã倧å€ã§ãããå®è£ 㯠ãã¡ããã»ã°ã¡ã³ãæšã§ã è§£ãã ã
ã³ãŒãã¯ãã¡ã
å®è£ ã«èœãšãèŸŒãæ¹æ³ãåãããªãã£ãã®ã§ãå ¬åŒè§£èª¬ã®ã³ãŒããèªãã§äœãçŽãããåºæ¬çã«ã¯æååã®ããŒãªã³ã°ããã·ã¥ãã»ã°ã¡ã³ãæšã«èŒãããããã ãã§ã¯ã©ãããŠãããåãããªãã®ã§ãå ·äœçãªæ¹æ³ãåŠã¶ã
ããŒãªã³ã°ããã·ã¥ã®å®çŸ©ã¯å
¬åŒè§£èª¬éãã§ãããæåã®US-ASCIIã³ãŒãããã®ãŸãŸæ°å€ãšã¿ãªããæå
ã»ã°ã¡ã³ãæšã«èŒããã®ã¯ãæååãå·Šããèªãã æã®ããŒãªã³ã°ããã·ã¥ãæååãå³ããèªãã æã®ããŒãªã³ã°ããã·ã¥ãæååé·ã«å¯Ÿå¿ããä¿æ°ã§ãããä¿æ°ãšã¯å
ã®
-
$K$ åã®$x$ ãå®è¡æã«æ±ºãã - äžæåãã»ã°ã¡ã³ãæšã®ããŒãã«ãããããã·ã¥å€ã¯æåã®US-ASCIIã³ãŒã ä¿æ°ã¯
$x$ ãšããã - ã»ã°ã¡ã³ãæšã®ããŒãã®åäœå
ãäœããããã·ã¥å€ã¯æåã®0ãä¿æ°ã¯
$x$ ãšããã - ã»ã°ã¡ã³ãæšã®ããŒããçµåããæ°ããªããŒããšããŠå·Šããã®ããã·ã¥å€ãå³ããã®ããã·ã¥å€ãä¿æ°ã®ç©ãè¿ãã
ãããŸã§æ¥ããåææååãã»ã°ã¡ã³ãæšã«èŒããã¯ãšãªããšã«æåãæŽæ°ãããåæãã©ããã¯ãå·Šå³ããèªãã ããã·ã¥å€ãäžèŽãããã©ããã§åããã
ã³ã³ãã¹ã8åç®ã§ãããA,B,C,Dã¯ã³ã³ãã¹ãã§è§£ãããE,Fã¯è§£ããªãã£ãã
ã³ãŒãã¯ãã¡ã
å顿ããã®ãŸãŸåŒã«ããã
ã³ãŒãã¯ãã¡ã
ãããå顿ããã®ãŸãŸåŒã«ããã
ã³ãŒãã¯ãã¡ã
æŽæ¿¯ããæ¥ 0
ã®éã§é£ç¶ãã 12
ã®åºéã«ã€ããŠèããå
šåºéã®äžã§æãå€ãããŽå
¥ãã®Tã·ã£ãã®è³Œå
¥ææ°ãçãã§ãããæåŸã«ã¯æé»ã« 0
ããããšãããšçµç«¯åŠçãæ¥œã§ãããäžåºéã«ã€ããŠã¯ä»¥äžã®éãã§ããã
- ç«¶æããã°ã©ãã³ã°ã®ã€ãã³ãã«è¡ã
$C$ æ¥åã ããããŽå ¥ãã®Tã·ã£ããèŠã - é£äºã«è¡ãã®ã
$D$ æ¥ãšããŠã$M$ æ¥ä»¥å ãªãç¡å°ã®Tã·ã£ãã§æžã¿ããããè¶ ããåã¯ããŽå ¥ãã®Tã·ã£ããè²·ãã - ã€ãŸãããŽå
¥ãã®Tã·ã£ãã¯åèšã§
$max(0, D-M) + C$ æèŠã
ã³ãŒãã¯ãã¡ã
ãªããšãè§£ããã
äžèŽããå
¥ãæ¿ãããªããã° -1
ãè¿ããäžèŽããå
¥ãæ¿ãã«ã€ããŠæäœåæ°ã¯è»¢åæ°ã§ããããã£ãŠçãã¯ãã¹ãŠã®äžèŽããæäœåæ°ã«ã€ããŠãè»¢åæ°ã®åã®æå°å€ã§ãããå顿ãããèªããšè¡ãåã¯é£ãšããå
¥ãæ¿ããããªãã®ã§è»¢åæ°ãšããæ°ãä»ãã¹ãã ã£ãããããã§åæ°åãè²»ããããã®ã¯ãã£ãããªãã£ãã
ã³ãŒãã¯ãã¡ã
TLEè§£ããåºããªãã£ãã
忣ã®å®çŸ©ã¯å
¬åŒè§£èª¬4ãåç
§ãããå
¬åŒè§£èª¬ã«ãããšèšç®éã¯
for(int t=s;t;t=(t-1)&s){
new_dp[s]=min(new_dp[s],dp[s^t]+w2[t]);
}
çµè«ããè¿°ã¹ãã
Rubyã§ç¢ºèªããã³ãŒãã以äžã®éãã§ããã
fmt = '%06b'
s = '011010'.to_i(2)
t = s
while t > 0 do
puts(fmt % t)
t = (t - 1) & s
end
t = s;
while t > 0 do
u = ((fmt % s).split('')).zip((fmt % t).split('')).map do |sc, tc|
if (sc == '0')
'.'
else
tc
end
end.join()
puts('[' + u + ']')
t = (t - 1) & s
end
- éå
$s$ ãã éå$t$ ãé€ããæ®ã$s \oplus t$ ãæ±ããããããã¯ãã¹ãŠããããã¿ãŒã³(éåã«èŠçŽ$i=0..(N-1)$ ããããšãã«ããã$i$ ã$1$ ããªããã°$0$ )ã§ããã -
$s \oplus t$ ãå·®åãã€ãŸã$t$ ã§ç«ã£ãŠãããããã¯$s$ ã§ãå¿ ãç«ã£ãŠããããšãããšãããéèŠã§ããããªããªã以äžã®ããã«æŽæ°ããããã§ããã -
$t-1$ ã¯ã$t$ ã®æå³(LSBããèŠãŠæåã«ç«ã£ãŠãã)ãããã$0$ ã«ãããããå³ã$1$ ã«ãããLSBã0ãããç®ãšããŠ3ãããç®ãç«ã£ãŠãããšããŠã$1000$ ã$0111$ ã«ããã - ããã
$s$ ã§ãã¹ã¯ããããããããš-
$t$ ã®æå³ããã(3ãããç®)ã0ã«ãã($??0???$ ) -
$t$ ã®æå³ããå³(0..2ãããç®)ã«$s$ ã®ç«ã£ãŠããããããããã°ãã¹ãŠç«ãŠã($??0.1.$ )ã$s$ ã®ãããã埩掻ãããšããããã
-
- ãã®æäœã¯ã
$s$ ã®ç«ã£ãŠãããããã ãéããŠ2鲿°$p$ æ¡ã®æ°ããããšãã«ã1ãåŒãããšãšç䟡ã§ããã10鲿°ã®èšç®ã«ãããŠã$x000, x > 0$ ãã$1$ åŒãããã$y999, y=x-1$ ã«ãªãã®ãšåãã§ããã$999$ ã®ãšããã$s$ ã®ãããã埩掻ãããšããæäœã§ããã
ããããã°éå
ã³ãŒãã¯ãã¡ã
é å»¶ã»ã°ã¡ã³ãæšã䜿ãã°è§£ãããšæ³åã¯ããããããã ãã§ã¯è§£çã§ããªãã
ãã¡ãã® å®è£
ãåèã«ããŠå®è£
ãããäœãé
å»¶ã»ã°ã¡ã³ãæšã«èŒãããã課é¡ã§ããã atcoder::lazy_segtree
ã§ããæšã®ããŒã
åå
- 確ç
$F_p$ ã§$F_x$ ã«ãã - 確ç
$(1-F_p)G_p$ ã§$G_x$ ã«ãã - ãã以å€ã¯ç¡å€æŽ
ã§ããããã®ãšã
- 倿Žãã確çã¯å€æŽããªã確çã®æ®ããªã®ã§
$1 - (1 - F_p)(1 - G_p)$ - 倿Žãããšãã®æåŸ
å€ã¯
$F_p \times F_x + (1-F_p)G_p \times G_x$
ã§ãããããã§ååãšããŠã
- 倿Žããªã確ç
$F^{'}_p = 1 - F_p$ - 倿Žãããšãã®æåŸ
å€
$F^{'}_x = F_p \times F_x$
ãšå®çŸ©ãããš
- 倿Žããªã確ç
$({F^{'} \circ G^{'}})_p = F^{'}_p \times G^{'}_p$ - 倿Žãããšãã®æåŸ
å€
$({F^{'}\circ G^{'}})_x = F^{'}_x + F^{'}_p \times G^{'}_x$
ãšãªã£ãŠãã£ãããããããã¯ä»ã®æ¹ã®å®è£
ãèŠããŸã§åãããªãã£ããæçååã¯
次ã«é
å»¶ã»ã°ã¡ã³ãæšã®ããŒã
- Merge: äž¡åºé
$lhs, rhs$ ã®å¹ ã®åã0ãªãåäœå ãè¿ã(ãããå¿ãããš0é€ç®ãçºçããŠREãã)ãããã§ãªããã°äž¡åºéã®å éå¹³åãåããã€ãŸã$width = lhs.width + rhs.width$ $avg = lhs.width \times lhs.avg + rhs.width \times rhs.avg$
- Update: åºé
$lhs$ , åå$F^{'}$ ãäžããååãæåŸ å€ãæŽæ°ãããšããšããªããšãã®å éå¹³åãåãã-
$width$ ã¯$lhs$ ã®ãŸãŸ $avg = lhs.avg \times F^{'}_p + F^{'}_x$
-
ãããŸã§ããã°ãåæå€
ã³ã³ãã¹ã9åç®ã§ãããA,B,C,D,Eã¯ã³ã³ãã¹ãã§è§£ãããFã¯å顿ãã¡ãã£ãšèŠãŠãè§£ãå§ããããšããé ã«ã¯æ®ã10åãªã®ã§è«Šããã解説ãèªãã§ããŸã çè§£ããŠããªãã
ã³ãŒãã¯ãã¡ã
å顿ããã®ãŸãŸæååã«ããã
ã³ãŒãã¯ãã¡ã
é ç¹ABCDEããé ç¹çªå·0,1,2,3,4ãšèªã¿æ¿ãããé ç¹çªå·ã®å·®ã®çµ¶å¯Ÿå€ã
ããšã¯åãè·é¢(ã«ããŽãª)ã®èŸºãªã Yes
ããã§ãªããã° No
ãåºåããã
ã³ãŒãã¯ãã¡ã
ã³ãŒãã¯ãã¡ã
è§£ã®æ¹éãç«ãŠãã®ã«æããã£ããé ç¹1ã®çŽæ¥ã®åããŒãéã«ã€ããŠãããããã®é ç¹æ°ãå¹ããŠããã®ã¯åãã£ããããã®åŸã®èå¯ã倧å€ã ã£ãã
ãŸãé ç¹1ãèãªãçãã¯1ã§ãããããã¯é ç¹1ã®æ¬¡æ°ã1ã§ããããšããåããã
ããã§ãªããã°é ç¹1ã®çŽæ¥ã®åããŒãéã«ã€ããŠãããããã®åããŒãã®å ã«ããé ç¹æ°(åããŒããå«ã)ãæ±ãããããããœãŒãããŠãäžçªå€§ãããã®ä»¥å€ã®åãçãã§ããããªããªãäžçªå€§ããç©ä»¥å€ãåããšé ç¹1ãèã«ãªãããã ãäžæããŸãšããã°é ç¹1ãåãããèã®å ŽåãšãŸãšããããã ããã
é ç¹1ã®çŽæ¥ã®åããŒãéã¯äºãã«çµã³ã€ããªãããšãå©çšããŠãunion-findæšã䜿ã£ãŠæšã®é ç¹ãæ°ããããšãã§ãããååž°ãèŠããªãã®ã§å°ãã³ãŒããçããªããå®è£ 㯠ãã¡ã ã
ã³ãŒãã¯ãã¡ã
333-Dãšã¯éã«ãè§£ã®æ¹éã¯ããç«ã£ãã现éšããããããã£ãã
ããŒã·ã§ã³ãšã¢ã³ã¹ã¿ãŒã«ã€ããŠããã¹ãŠã®ã¿ã€ã
åºæ¥äºãæåŸããæåã«åãã£ãŠåçãããã¢ã³ã¹ã¿ãŒãå±
ãããå¿
èŠãªããŒã·ã§ã³ -1
ãåºåããŠçµäºããã
äžèšã®åçæã«ãããŒã·ã§ã³ãã¿ã€ããæç¹ã§å¿ èŠãªããŒã·ã§ã³ã0ããå€ããã°ããã®ãšãããŒã·ã§ã³ãæŸããšããæäœãèšé²ãããããŒã·ã§ã³ãæŸããªã(å¿ èŠãªããŒã·ã§ã³ã0)ãšããšãã¢ã³ã¹ã¿ãŒã«ééãããšãã¯æŸããªããšããŠãããèŠããã«ããŒã·ã§ã³ãæŸãã®ã¯ã§ããã ãé ãããŠæ§ããªããšããããšã§ããã
æåŸã«åºæ¥äºãå é ããåçãããã¢ã³ã¹ã¿ãŒãæéã§ããããšã¯åãã£ãŠããã®ã§ãã©ã®ããŒã·ã§ã³ãšã¢ã³ã¹ã¿ãŒãã¯æ°ã«ããªãã
- ããŒã·ã§ã³ãã¿ã€ããŠæŸãåºæ¥äºãªãããŒã·ã§ã³ã1å远å ããŠ
1
ãåºåãã(ããã«é åã«pushãã)ã䜵ããŠãããŒã·ã§ã³ã®ä¿ææ°ã®æå€§å€ãæŽæ°ããã - ããŒã·ã§ã³ãã¿ã€ããŠæŸããªãåºæ¥äºãªã
0
ãåºåãã(ããã«é åã«pushãã) - ã¢ã³ã¹ã¿ãŒã«ééãããããŒã·ã§ã³ã1åæžããã
å顿ã«ããéãããŸãããŒã·ã§ã³ã®ä¿ææ°ã®æå€§å€ãåºåãããã®åŸã§ããŒã·ã§ã³ãã¿ã€ããŠæŸããæŸããªããåºåããã
ã³ã³ãã¹ãäžã®è§£çã¯äœåãªã³ãŒããå€ã ããã®ã§ãå¿ èŠãªã³ãŒãã ãæ®ããš ãã®ããã« ã«ãªããããã§ãæå€ãšé·ãã
ã³ã³ãã¹ã10åç®ã§ãããA,B,C,D,Eã¯ã³ã³ãã¹ãã§è§£ãããFã¯å顿ãã¡ãã£ãšèŠãŠãè§£ãå§ããããšããé ã«ã¯æ®ã10åãªã®ã§è«Šããã
ã³ãŒãã¯ãã¡ã
å顿ããã®ãŸãŸå®è£ ããã
ã³ãŒãã¯ãã¡ã
5åäžäžçªè§£çæéãæãã£ããåèŠã§20åæããŠå ¥åäŸãè§£ãããšãã§ãããã£ãã諊ããC,Dåé¡ãè§£ããåŸã«è§£ããã
åãã£ãŠããŸãã°è§£æ³ã¯ç°¡æœã§ããããã®æ¹æ³ã¯å
¬åŒè§£èª¬2ãšåãã§ããããŸã
-
$L \geq 0$ ãªãã$L + (M - L mod M) mod M$ -
$L < 0$ ãªãã$L + abs(L) mod M$
-
$R \geq 0$ ãªãã$R - abs(R) mod M$ -
$R < 0$ ãªãã$R - (M - R mod M) mod M$
Rubyãªã Integer#ceildiv
ã䜿ã£ãŠ ãã æžããã
å
¬åŒè§£èª¬1ã¯ã
ãããä»ã®æ¹ã®è§£æ³ããç¥ã£ãã®ã ããåç¹ã«ç§»åããããšã®
ã³ãŒãã¯ãã¡ã
Båé¡ãè§£ããªãã£ãåæºãããDåé¡ãããå ã«è§£ããŠããŸã£ããè§£æ³èªäœã¯å²ãšããæãã€ããããCåé¡ã«ããŠã¯éããã«ã¿ããã
0-based indexing ã§ è²
å¥åŠãã®ç·åãæå°ã«ããã«ã¯ãè²ã§æé ã«ãªãã¹ãéŽäžãå é ãã2è¶³ãã€çµã¿åãããã°ããããªããªãæé ã«ãªã£ãŠããéŽäžãå ¥ãæ¿ãããšãå šäœã®å¥åŠãã¯å¢ããããšã¯ãã£ãŠãæžãããšã¯ãªãããã§ãããéŽäžãå¶æ°è¶³ãªãããã ãã§è§£ããã
å ¬åŒè§£èª¬ã§ã¯ãç¡ãããŠããªãåãè²ã®éŽäžã¯2è¶³ãŸãšããã®æé©ãšããããããã¯äœ¿ããªããŠããããåãè²ã®2è¶³ãå¥ããŠããå¥åŠãã®ç·åã¯å€ãããªãããã§ããã
éŽäžã奿°è¶³(
å
¬åŒè§£èª¬ã§ã¯çޝç©åã cumsum
ãšãã颿°ãããããã㯠cumulative sum ã®ç¥ã§ããã
ã³ãŒãã¯ãã¡ã
C,Dåé¡ãè§£ããŠé äœè¡šãèŠããšããã§ãããããBåé¡ã«åãçµãå¿æ§ããã§ããã
it = std::lower_bound
ã§æ±ããã it
ã
ã³ãŒãã¯ãã¡ã
é£çµæåã®å¢æžãäžå¯§ã«æ°ããã
ãŸãèµ€ããã¹ãæ°ã(ç·æ°ã
ããããã®èµ€ããã¹
-
$A$ ãèµ€ãå¡ãããŠãããç¡èŠãããããã§ãªãç·ãªãã - ä»ã®äžäžå·Šå³ãã¹
$B \in {UDLR} \setminus A$ ã«ã€ããŠ$A,B$ ãåãé£çµæåãªã$C$ ãå¡ã£ããããšãã£ãŠ$A,B$ ã$C$ ãä»ããŠæ°ãã«ã€ãªããèš³ã§ã¯ãªããšåãã -
$A$ ã«å¯ŸããŠãã®ãããªä»ã®äžäžå·Šå³ãã¹$B$ ããªããã°ã$C$ ãä»ããŠã€ãªããããšãã§ãããã€ãŸã$C$ ãç·ã«å¡ããš$A$ ãå šäœã®é£çµæåãã1æžãã
ãã®ãããª
-
$G > 1$ ãªã$G-1$ åé£çµæåãæžã ($G$ åã®é£çµæåã1ã€ã«ãŸãšããã®ã§) -
$G = 1$ ãªã$1$ åé£çµæåã¯å¢æžããªã ($C$ ãšã€ãªããã ããªã®ã§) -
$G = 0$ ãªã$1$ åé£çµæåãå¢ãããããã¯$C$ ãåäžæåã®é£çµæåã«ãªãããšãæå³ããã
ãã¹ãŠã®èµ€ããã¹ã«ã€ããŠãããããç·ã«å¡ã£ããšãã®ãé£çµæåã®ç·å¢æž
ã³ã³ãã¹ã11åç®ã§ãããA,B,C,Dã¯ã³ã³ãã¹ãã§è§£ãããEã¯TLE, Fã¯å顿ã10å以äžèããŠè«Šãããé ç¹ããããŠE,Fã¯è§£ããªãã ãããšããäºæ³ãåœãã£ãŠããŸã£ãããCåé¡ã®ããã«ãã£ãçæšã§ãããEåé¡ã¯ããšäžæ©è¶³ããªãã£ãã
ã³ãŒãã¯ãã¡ã
ãè±å°æåãšæ°åãããªãæååSãå
¥åãããŸãããSã¯2023ã§çµããããšãä¿èšŒãããŸããã¯ç¡èŠããŠããããSã®æåŸã®æåã4ã«å€æŽãã倿ŽåŸã®æååãåºåããŠãã ãããã ãå®è£
ãããæ¹è¡ãé€ããå
¥åæååã®æåŸã®æåã 4
ã«ããã
ã³ãŒãã¯ãã¡ã
å€ããå
ã«
ã³ãŒãã¯ãã¡ã
äžäžãèªã¿éããŠã1ããã«ãã£5å + åæåºã«6åæãã£ãããããå²ããã°é äœã600äœçšåºŠã¯äžãã£ãã¯ãã§ãæ¥ãéããŠåºåäŸ1ããã£ãŠããªãããšãèŠéãããŠããŸã£ãã
éŸã®å°Ÿãåããããšã¯èãããã²ãããé ã䌞ã³ãŠãããšèããŠããã
- åæç¶æ
ã¯ãã¯ãã«
$(N..1,0)$ ã§ãããéé ã§ããããšã«æ³šæã - 1çš®é¡ç®ã®ã¯ãšãªã§é ã䌞ã³ãã䌞ã³ãå
ã¯ãã¯ãã«ã®æ«å°Ÿã«å ããã
std::vector
ãªãèšç®éã¯$O(1)$ ã§ããã - 2çš®é¡ç®ã®ã¯ãšãªã§é ãã
$p$ çªç®ã®äœçœ®ãè¿ããstd::vector
ãªãæ·»ãåstd::vector::size()-p
ã§ãèšç®éã¯$O(1)$ ã§ããã
ãã€ãã®ã°ãªããæäœã®çã§ U
äžæ¹åã¯Y座æšãæžããšåéãããããæ¬åã§ã¯ U
äžæ¹åã¯
察çãèãããã³ã³ãœãŒã«ã«å
¥åãšåºåãæ··ãã£ãŠã©ããåºåãåãããªããªãã®ã¯ã grep
ã§è²ä»ããããšãã©ããåºåãåããã
make && ./335c | grep --color '^.*'
ãããããçšæããæåŸ
å€(åºåäŸ)ãšãã³ãã³ãã®åºåãäžèŽãããã©ããã¯ã bash
ãªã以äžã®ããã«èª¿ã¹ãã
diff
ã® -C
ãªãã·ã§ã³ã¯ãcopied contextã§åºåãååé·ãåºããŠãåºåãäœã確èªãã€ã€æåŸ
å€ expected.txt
ãšã®å·®ã衚瀺ããã --strip-trailing-cr
ãªãã·ã§ã³ã¯è¡æ«ã®CRãé€ãããšã§ãWindowsãšCygwinã§æ¹è¡ã³ãŒããCRLFãLFã®éããç¡èŠããã
diff -C 100000 --strip-trailing-cr <(make && ./335b) expected.txt
ã³ãŒãã¯ãã¡ã
ãšãããå·»ãã°ããã座æšã0-based indexing, äžå¿åº§æšã
- å§ç¹ã
$(C-1,C-1)$ ã«ãããäžäžå·Šå³ã®ç§»åå¹ ãã$[C-1,C+1]$ ã«ããã - äžåäžã«ç§»åããŠãããç§»åå ã«é£çª1ãæ¯ãããã®åŸç§»åå¹ ãã£ã±ããŸã§äžã«ç§»åãããã®ãã³ã«é£çªãæ¯ãã
- ç§»åå¹ ãã£ã±ããŸã§å³ã«ç§»åãããã®ãã³ã«é£çªãæ¯ã
- ç§»åå¹ ãã£ã±ããŸã§äžã«ç§»åãããã®ãã³ã«é£çªãæ¯ã
- ç§»åå¹ ãã£ã±ããŸã§å·Šã«ç§»åãããã®ãã³ã«é£çªãæ¯ã
- 0åç®ãªãçµäºãã
- äžåå·Šã«ç§»åããŠé£çªãæ¯ããç§»åå¹ ãäžäžã«1ãã€åºããåæ§ã«äžãå³ãäžãå·Šã«ç§»åå¹ ãã£ã±ããŸã§é²ãã以äžç¹°ãè¿ãã
- äžå¿
$(C,C)$ ã¯é£çªã§ã¯ãªãT
ãåºåããããšå¿ããã«
å ¬åŒè§£èª¬ã¯å€åšããé ã«å åšã«åãã£ãŠãããäžèšã§ã¯å åšããå€åšã«åããã
ã³ãŒãã¯ãã¡ã
æå€§çµè·¯åé¡ã«æ £ããã324-Fã®çµéšã掻ããªãã£ãã
æå°çµè·¯åé¡ãšåæ§ã«å§ç¹ããBFSãããšTLEãããçµå±TLEãåãåããã«ã³ã³ãã¹ããçµãã£ãŠããŸã£ãã
è§£æ³ãšããŠã¯ã飿¥ãã
ç§»åã§ããã®ã¯
å ¬åŒè§£èª¬1ã¯ãã±ãããœãŒããããè§£ããŠããããå ¬åŒè§£èª¬2ã®ããã«ãã€ã¯ã¹ãã©æ³ã§ã è§£ãã ããããã³ã³ãã¹ãäžã«ããããã£ãã®ã ããåªå 床ãã¥ãŒã«ç©ããã®ãæãã€ããªãã£ãã
æåã°ã©ãã®æé·çµè·¯ã¯ããããžã«ã«ãœãŒãããŠçµè·¯é·ãDPãããšæ±ãŸãã®ã§ ããããŠã ããããã ããã®å Žåã¯ãããããžã«ã«ãœãŒãã®å
¥åãæåã°ã©ãã«ãããã€ãŸã
ã³ã³ãã¹ã12åç®ã§ãããA,B,Cã9å11ç§ã§è§£ããDåé¡ä»¥éã90åæããŠè§£ããªãã£ããæ©è§£ãã§ããããDåé¡ãè§£ããªãã£ãã®ã§ããã©ãŒãã³ã¹ãæ¯ãããªãã£ãã
ã³ãŒãã¯ãã¡ã
å顿éãã«æåã远å ããã倧æåãšå°æåãåºå¥ããã
ã³ãŒãã¯ãã¡ã
void solve(std::istream& is, std::ostream& os) {
uint64_t n {0};
is >> n;
os << std::countr_zero(n) << "\n";
}
ã³ãŒãã¯ãã¡ã
5鲿°ã§ããã
ãŸã
ã³ãŒãã¯ãã¡ã
90åæããŠè§£ããªãã£ããå šãè§£æ³ã®ç³žå£ããã€ãããªãã£ãã
äžèšã®ã³ãŒãã¯ãå
¬åŒè§£èª¬2ã§ãããå
¬åŒè§£èª¬ã®ãããªãšã¬ã¬ã³ããªè§£ã§ãªããŠã
å ¬åŒè§£èª¬1ã«åºã¥ãã³ãŒãã¯ãã¡ãã§ãå ¬åŒè§£èª¬4ã«åºã¥ãã³ãŒãã¯ãã¡ã
æ¡DPã䜿ãããšãæ¡åãæ±ºãæã¡ããããšã¯åãã£ãã®ã ããå®è£
äžã«äœãããŠãããåãããæãæ¢ãŸã£ãŠããŸã£ãã
ã³ã³ãã¹ã13åç®ã§ãããä¹ ãã¶ãã®5å®ã§ããã
ã³ãŒãã¯ãã¡ã
å顿éãå®è£
ããã倿° Takahashi
, Aoki
ããããããªãããã«æ°ãä»ããã
ã³ãŒãã¯ãã¡ã
ããããç°¡åãªè§£æ³ããããã
void solve(std::istream& is, std::ostream& os) {
std::string s;
is >> s;
std::regex re(R"(^A*B*C*$)");
if (std::regex_match(s, re)) {
os << "Yes\n";
} else {
os << "No\n";
}
}
å
¬åŒè§£èª¬ããã£ãšèªãã§ãããæåãåºçŸ©å調å¢å (æåã®ã¢ã¹ããŒã³ãŒããéæžå°)ã ãšæ°ãä»ãããå
¬åŒè§£èª¬2-3ãšåãã§ãå
¬åŒè§£èª¬ã¯ std::is_sorted
ã䜿ãã std::is_sorted
ãç¥ããã«å®è£
ãããš ãã¡ã ã«ãªãã
ã³ãŒãã¯ãã¡ã
èœã¡çããŠèããã
- å
é ã®äººã¯
$A_i = -1$ ãªäºº$i$ ã§ãããããã§ãªããã° - 次ã®äººãšãããã¯ãã«
$next[N]$ ã«ãããŠã 人$next[A_i] = i$ ãšããé£çµãªã¹ã(linked list)ãäœã
ããšã¯å
é ã®äººããé£çµãªã¹ãããã©ãã°ãããé£çµãªã¹ãã®æ¿å
¥ã³ã¹ãã std::vector
ã§æã€ã
ã³ãŒãã¯ãã¡ã
TLEããªãããã«æ°ãä»ããã
æååãäžãããããão
ãé£ç¶ o
ãè¶³ããªã( .
ã o
ã«å€ããå¿
èŠãããã)ãæ±ãã颿°ãäœãããã®é¢æ°ã«ãã¹ãŠã®è¡ãšãã¹ãŠã®åãå
¥ããåŸè¿°ã®æäœåæ°ã®æå°å€ãæ±ãããæå°å€ãæ±ãŸããªããã€ãŸãã©ããã£ãŠã -1
ã§ããã
æåå x
ãããã° o
ã®æ°ãåŒãããã®(.
ã®æ°)ããå¿
èŠãªæäœåæ°ã§ãããèšç®éã
-
$S$ äžã®x
ã®äœçœ®ããããããæ±ããŠãããããããã°$i$ 以éã®æåã®x
ã¯std::lower_bound
ã§$log(L)$ ã§æ±ãŸãã -
o
ã®æ°ãããããã环ç©åã«ããŠãããããããã°$[i,i+k-1]$ ã®o
ã®æ°ã¯$O(1)$ ã§æ±ãŸãã
å
¬åŒè§£èª¬ã¯ x
ã®æ°ã环ç©åã§æ±ããŠãããäžç¬ãããæãã€ããããäžèšã®æ¹æ³ã«ããŠããŸã£ããå
¬åŒè§£èª¬ã¯ x
ã®æ°ã环ç©åã§å®è£
ãããš ãã® ããã«ãªãã
ã³ãŒãã¯ãã¡ã
ãã®çš®ã®åé¡ã¯è€æ°åèŠãããšãããã®ã§ãè§£æ³ã®ç®éã¯ããç«ã£ããããã现ããäœã蟌ã¿ãééããŠã1 WA + åæåº9åæãã£ããæ¬åœã«ãã£ãããªãã
ãããããåºå圢åŒãééããŠã¯ãããªããæ¹è¡ãšç©ºçœããžã£ããžãµãŒãã¯åºå¥ãã(åã«æ¹è¡ãç©ºçœæåãšã¿ãªããŠããèš³ã§ã¯ãªã)ãã€ã³ã¿ã©ã¯ãã£ããªåé¡ã«æ £ããŠããªããæ ã®èª€ãã ããä»åŸã¯æ°ãä»ãããã
è§£æ³ã ããå人
- åäººã®æ°ã¯
$W=\lceil log2(N) \rceil$ ã§ãããããã¯std::bit_width(N-1)
ã§æ±ãŸãããããåœåstd::bit_width(N)
ã«ããŠããŸã£ãã$N=8$ ã®åºåãããããã®ã§æ°ãä»ãã - å人
$i=[0,W-1]$ ãããã$i$ ã«å¯Ÿå¿ãããã$[0,N-1]$ ã®ããã$i$ ãç«ã£ãŠããã°ããã®ãžã¥ãŒã¹ã飲ãŸããããžã£ããžãµãŒãã¯1-based indexing ãªã®ã§1è¶³ããŠæž¡ãã - ãžã¥ãŒã¹ã®æ¬æ°ãšçªå·ã®éã¯ç©ºçœã§ãããæ¹è¡ã«ãããšWAããã
- åãåã£ãæ°ã¯2鲿°ãªã®ã§ãéé ã«èªãã§(å é ã®æåãLSBãæåŸã®æåãMSB)2鲿°ã«å€æããããã®å€ã«1ãè¶³ã(è§£çã¯1-based indexing)ãªã®ã§
- All 0sãåãåããšããããšã¯èª°ããè ¹ãããããªããšããããšã ãã0ã¯0-based indexingã®å é ãªã®ã§ã1-based indexingãªã1çªç®ãšããããšã§èŸ»åŠ»ãåã
ããã«ãã£ç¡ãã§10åæ©ãè§£ãã°éããã©ã ã£ãããããD,Eåé¡ã®æ©è§£ãããã£ãšéããå¿ èŠããããã€ã³ã¿ã©ã¯ãã£ãåé¡ã¯ãããã°ãé£ããã®ã§å®è£ ã®æ£ç¢ºããåãããã
ã³ã³ãã¹ã14åç®ã§ãããã¬ãŒãã£ã³ã°ä¿®æ£ãæžã£ãŠãæ«å®ã®åãç¡ããªã£ãã3å®ããã§ããªãã£ããA,B,Cåé¡ãã³ã³ãã¹ãäžã«è§£ããŠãEåé¡ã¯21åé ãã§ACãããDåé¡ã¯ã³ã³ãã¹ãäžã«ã¯è§£æ³ãåãããEåé¡ã®è§£èª¬ãæžããŠãããçè§£ã§ãããFåé¡ã¯ãã£ãšèªãã§è«Šããã
ã³ãŒãã¯ãã¡ã
std::islower
, std::isupper
ã¯ããããè±å°æåãè±å€§æåã«è©²åœãããªãé0, 該åœããªããªã0ãè¿ããè¿ãå€ã¯boolå€ã§ã1ã§ããªãã®ã§æ¯èŒã«ã¯æ³šæãèŠãããC/C++ã«ãããŠ0ãšçå·ãŸãã¯äžçå·ã§æ¯èŒããã®ãéåã§ã1ãšæ¯èŒããã®ã¯æšå¥šãããªãã
ã³ãŒãã¯ãã¡ã
ããããã¯äžã€ã§ã¯ãªãããããã ãã«åŽã£ãŠè¿·ããåºããåé¡ã®å¶çŽããã以äžã®æ¹æ³ã«ããã
- è±å°æå
a-z
ãæŽæ°0..25
ã«å€æãã - æŽæ°
0..25
ããããã®åºçŸåæ°ãæ°ãããé·ã26ã®std::vector
ã«åããã - æå€åºçŸåæ°ãæ±ãã
-
$i = 0..25$ ãèµ°æ»ããŠãæå€åºçŸåæ°ãšãªãæå°ã®$i$ ãåºåããŠçµäºãããstd::max_element
ã¯ãã®çšéã«åã£ãŠããããã«ãŒããææžãããŠæåã®æå€§èŠçŽ ã§æã¡åã£ãã
æŽæ°ã«å€æããªããŠã飿³é
åã§ãããããã®ãšãã¯é£æ³é
å std::map<char,int>
ã«æåãç»é²ãããŠããªãå Žåã¯0ãè¿ãããšãå©çšããã
ã³ãŒãã¯ãã¡ã
åé¡ã®å¶çŽãããæçã®æå€§æ°ã¯
ææBããäœããæçã®æ°ã¯ std::optional
ã®æ¹ãå¯èªæ§ãããã
äžèšãæã¡åããŸã§ç¹°ãè¿ãã°ãæçAãšæçBã®æ°ã®åã®æå€§å€ãæ±ãŸãã
ã³ãŒãã¯ãã¡ã
å°éããããšå°ãæ©ãéžã¶ã«ã¯ãå°éãããšãã®ã³ã¹ããæå°ã®æ©ãéžã¶ãå°ç¹ã¯0-based indexingãšããã
ã©ã®æ©ãå°éããããšéãæ©ã®æ°ã
-
$A$ ãã$B$ ã«æé ã«è¡ããªã($D = B - A$ ãªã)ã$A$ ã§$C$ å¢ããã$B$ ã§$C$ æžãã - ããã§ãªããã°(éé ã«è¡ããªã)ã
$0$ ã§$C$ å¢ããã$A$ ã§$C$ æžããã$B$ ã§$C$ å¢ããã$N$ ã§$C$ æžãã
ããã
ããšã¯ãã¢ãŒãå®éã«è¡ã£ãŠãå°éããæ©
-
$A$ ãã$B$ ã«æé ã«è¡ããªã($D = B - A$ ãªã)-
$A \leq T < B$ ãªãè¿åããŠ$N-D$ - ããã§ãªããã°çŽè¡ããŠ
$D$
-
-
$A$ ãã$B$ ã«éé ã«è¡ããªã-
$T < A \lor B \leq T$ ãªãè¿åããŠ$N-D$ - ããã§ãªããã°çŽè¡ããŠ
$D$
-
ã§ããããã®çޝèšãçãã§ãããã»ãŒå ¬åŒè§£èª¬1ãšåãã§ããã
é
å»¶ã»ã°ã¡ã³ãæšã䜿ããš ãã¡ã ã®å®è£
ãåèã« ãã®ãã ã«ãªãããããæ³ã¯æ©ã®çªå·ã§ç·åœ¢èµ°æ»ããã»ã°ã¡ã³ãæšã¯æ©ã®äºåæšãç©ã¿äžãããšèšãããé
å»¶ã»ã°ã¡ã³ãæšã䜿ããšèšç®éã
ã³ãŒãã¯ãã¡ã
Cåé¡ãŸã§ã22å14ç§ã§è§£ããDåé¡ã¯é¡æãèªã¿è§£ããšããããããŠåä»ã§ãFåé¡ã¯è§£ãããã«ãªãããšãããEåé¡ã«è³ãããè§£çãŸã§ã«èŠããæéã¯99å12ç§ãã€ãŸãã³ã³ãã¹ãäžã«ã¯è§£ããªãã£ãã
蟺ã亀ããããšã®å®çŸ©ãåä»ã§ããããããããã°è§£ãããåç¶ã§ããã
é£ç¶ããé ç¹ãå³å²žãšå·Šå²žã«åé¢ããã®ãçãã§ããããã®å³å²žãšå·Šå²žã«åé¢ããé£ç¶ããé ç¹ãšããçµã¯å
š
å³å²žé ç¹ã®å士ãååšäžã«é£ç¶ããŠåºçŸãã巊岞é ç¹ã®å士ãååšäžã«é£ç¶ããŠåºçŸããå³å²žãšå·Šå²žã®é ç¹ãååšäžã§å ¥ãæ··ãããªããã°èŸºã亀ãããªããšèšããã以äžé ç¹çªå·ã¯0-based indexingã§è¡šèšãã(å ¥åå€ãã1åŒã)ã
æåã®èŸºãé·ãã§ãœãŒããããé ç¹çªå·ã std::vector
ã«èŒããŠè·é¢ã®æé ã«ãœãŒãããã蟺ãçãé ã«èŸºãå ããã
蟺ã®äº€ãããã»ã°ã¡ã³ãæšã§è¡šçŸãããèŠçŽ ã¯æŽæ°ãåäœå ã¯0ãapplyãæŽæ°ã®å¯ç®ã«ããã
é ç¹
ããã¯ã»ã°ã¡ã³ãæšã®èŠçŽ
ãããŸã§æžããŠãDåé¡ãšEåé¡ã䌌ãŠããããšã«æ°ãä»ããååšã«æ²¿ã£ãŠåºéåãåããšããããã£ããã§ãããEåé¡ãè§£ããããšãDåé¡ã®è§£æ±ºã«ã€ãªãã£ããEåé¡ã®æ¹ãå¢çå€ã®èšå®ãç·©ãåãã»ãã®å°ãç°¡åãªã®ãããããªãã
ã»ã°ã¡ã³ãæšã®åºé Yes
ãåºåããŠããçµäºãããããã§ãªããã°ã»ã°ã¡ã³ãæšã®èŠçŽ
蟺ã®é·ãã
ãã¹ãŠã®æã«ã€ããŠèª¿ã¹ãŠäº€ããããšããªãã£ããã No
ãåºåããŠçµäºããã
å
¬åŒè§£èª¬1ã¯æåã«æžãããé£ç¶ããé ç¹ãå³å²žãšå·Šå²žã«åé¢ãããšããæäœããéãæ¬åŒ§ã®å¯Ÿå¿ãšããŠè¡šçŸããŠããã確ãã«ãã®æ¹ãçè§£ãããããå
¬åŒè§£èª¬ãã»ã°ã¡ã³ãæšã«èšåããŠãããã¹ã¿ãã¯ã䜿ããš
ã³ã³ãã¹ã15åç®ã§ãããA,B,C,D,Eã®5å®ã§ãããEãè§£ããŠããDãè§£ãã®ãæ£ããé åºã§ããããã€ãããããããããå®è£ åã«èª²é¡ãæ®ã£ãã
ã³ãŒãã¯ãã¡ã
Aåé¡ããããŠãªããªãè§£ããªããŠçŠã£ããæååã®æåŸã«åºã .
ãæšæºC++ã©ã€ãã©ãªã§èŠã€ããããšããŠæ¹æ³ãåããã(æ£è§£ã¯ äžèš )ãforæãææžãããŠè§£ãããããã§æéã䜿ã£ãŠããŸã£ãã®ã¯ãã£ãããªãã
void solve(std::istream& is, std::ostream& os) {
std::string s;
is >> s;
os << s.substr(s.rfind('.')+1) << "\n";
}
A,Båé¡ã®ããã«ãã¹ãã±ãŒã¹ã1å/åãªããæ£èŠè¡šçŸã 䜿ãã ã
ã³ãŒãã¯ãã¡ã
250ç¹Båé¡ã¯ããããšæãããã¢ã«ãŽãªãºã ã¯ããããã£ãŠå®è£
ãåä»ãªåé¡ã§ããããªãã4æ¹åã std::vector
ã§ã³ã³ãã€ã«ãéããã仿¹ãªãã®ã§Cé
åã§æžãããã©ãããŠã³ã³ãã€ã«ãéããªãã£ãã®ããä»ãšãªã£ãŠã¯åãããªããInitializer-list initialization ãæžãæããã®ã ãšæãã
std::vector<std::pair<Num, Num>> dyxs {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};
std::pair<Num, Num> dyxs[4] {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};
ã³ãŒãã¯ãã¡ã
å§çºæç¹ã®ä¹è»äººæ°ãã环ç©åã®åºå€ã0ãå²ã蟌ãŸãªããã°ãããå§çºæç¹ã®ä¹è»äººæ°ã0ãšæ±ºãæã¡ããŠã环ç©åã®æäœå€
ã³ãŒãã¯ãã¡ã
å®è£ åãåãããã
2人ã®ãã¬ã€ã€ãŒãé害ç©ãšå£ã«æŒãä»ããæé ãå³å¯ã«æ±ãããšãè²ã
ãšåäŸãåºããã§ããããã£ãŠããç¶æ
ããæ¬¡ã®ç¶æ
ã«é·ç§»ã§ãããã©ããã°ã©ããæ§ç¯ãã2人ã®ãã¬ã€ã€ãŒãåããã¹ã«ãã©ãçããŸã§ã®æçæé ãæ±ããããã©ãã€ããªããã° -1
ãåºåããã
è¡ãšåãå
¥åãã®ãŸãŸã®(ã€ãŸããã¬ã€ã€ãŒãåããç¯å²ã§ã¯)1-based indexingãšããŠãã»ã³ããã«ãšããŠç€å€ãé害ç©ã§å²ããã€ãŸã
ç¶æ
ã¯ã2人ã®ãã¬ã€ã€ãŒ
- 2人ã®ãã¬ã€ã€ãŒãåãå Žæã«å± ãã°0ãšããã0è¡0åã®ãã¹ã«ã¯å°éããªãã®ã§0ã§åé¡ãªã
- ããã§ãªããã°ã
$M(PC \times H + PR) + (QC \times H + QR)$ ãšãã
ããç¶æ ããæ¬¡ã®ç¶æ ã¯ã4æ¹åã®ç§»åãç·åœããããã2人ã®ãã¬ã€ã€ãŒãããæ¹åã«1ãã¹åããããšãããšããé害ç©ããªããã°é£ã®ãã¹ã«ç§»åã§ããé害ç©(ç€å€å«ã)ãããã°é£ã®ãã¹ã«ç§»åã§ããªããç§»ååŸã®çµæãã
- 2人ã®ãã¬ã€ã€ãŒãšãç§»åã§ããªããã°ç¶æ é·ç§»ããªããç¶æ ãå€ãããªããšããããã
- 2人ã®ãã¬ã€ã€ãŒã®å°ãªããšãäžæ¹ãç§»åã§ããã°ç¶æ é·ç§»ãããç¶æ ãå€ãããšããããã2人ã®ãã¬ã€ã€ãŒãåãå Žæã«å± ãã°å ã«è¿°ã¹ãéãã
ã§ãããç¶æ é·ç§»å ããç¶æ é·ç§»å ã«æãåããæåã°ã©ããäœããåŸã¯åæç¶æ ããçµç«¯ç¶æ (2人ã®ãã¬ã€ã€ãŒãåãå Žæã«å± ã)ãŸã§ã®æçè·é¢ãæ±ããã
æçè·é¢ããã€ã¯ã¹ãã©æ³ã§æ±ãããšTLEãã(ããã§1WA)ããªã®ã§BFSã§æ±ããããè·é¢ãlong long intã§ä¿æãããšMLEãã(ããã§ãã1WA)ãè·é¢ãint16_tã§ä¿æãããš 2226 ms, 986472 KB ãšã®ãªã®ãªã§ACãããã¡ã¢ãªäœ¿çšéã
æåã°ã©ããäžåºŠã«å šéšæ§æãããšã¡ã¢ãªãè¶³ããªãããæ¬¡ã®ç¶æ é·ç§»ã ããã¥ãŒã«ç©ãã§é次çã«æ§æããã° 1074 ms, 141640 KB ã«åãŸããå®è£ 㯠ãã¡ã ã
ã³ãŒãã¯ãã¡ã
å§ããŠã»ã°ã¡ã³ãæšã§ACã§ããã
Aã®æå€§å€ã¯
- å
é ã®å€ã
$set(A_1, 1)$ ã€ãŸã$A_1$ ã ãã®éšååããããé·ãã1ãšãã -
$A_i, i > 1$ ãæ«å°Ÿãšããéšååãäœããªãã$L = max(1, A - D)$ ,$R = min(maxA, A + D)$ ãšããŠãæ«å°Ÿã$[L,R]$ ã«ããéšååããã€ãªãããšãã§ããããã£ãŠ$[L, R]$ ã®æå€§å€ + 1 ãã»ã°ã¡ã³ãæšã«$set(A_i)$ ãããã»ã°ã¡ã³ãã®å®è£ ã«ãã£ãŠåŒæ°ãç°ãªãã®ã§æ³šæãã(Rãå³éåºéãªãåŒæ°ã¯$R+1$ )ã
å
šéšã®èŠçŽ ã«ã€ããŠã»ã°ã¡ã³ãæšãæŽæ°ããããåºé
ã³ãŒãã¯ãã¡ã
ã³ã³ãã¹ãåŸã«è§£æ³ãã¡ãã£ãšèŠãã®ã§å®è£ ããã
ããããã std::unordered_map<uint64_t, size_t>
ã§æ°ããã std::multiset<uint64_t>::count(x)
ã¯ã㌠x
ã®èŠçŽ æ°ã«ç·åœ¢ã®æéãæããã®ã§TLEããã
åŸã¯
å®ã¯Boost Multiprecision Libraryã§ãéããäžèšã®ããã«æ¢çŽ¢ç¯å²ã
ã³ã³ãã¹ã16åç®ã§ãããA,B,C,D,Eã®5å®ã§ãããCã§æéãæãéãããFã¯44åæãããçµå±ã ãã§ã6å®ã¯é ãã£ãã
ã³ãŒãã¯ãã¡ã
å¶çŽã«ããã®ãããªçå·®æ°åãååšããå
¥åã®ã¿ãäžããããŸãããšããã®ã§ã
ã³ãŒãã¯ãã¡ã
std::vector::push_back()
ãš std::vector::at()
ã®äœ¿ãæ¹ãçè§£ããŠããã°è§£ãããæ·»ãåã«æ°ãä»ããã
ã³ãŒãã¯ãã¡ã
è§£çæéãæãããã§ããã
æåã®å®è£ ã¯æå ã§2ç§ä»¥äžæãã£ãã®ã ããããã¯æé©åç¡ãã ããé ãã®ã§ãã£ãŠãæé©åããã2ç§ãåããšæã£ãŠãžã£ããžã«æãããTLEãããçæšã§ãããæåã«æ£è§£ãæãã€ããªããŠçŠã£ãŠããŸã£ãã®ã«ããã«ãã£ãŸã§ã€ããŠããŸã£ãã
æäœããããšã«
-
$x < 2$ ãªãããä»¥äžæäœã§ããªãã®ã§äœãããªãã -
$x \geq 2$ ãªããæãéé¡ã$x \times counts[x]$ 远å ãã(ãããããããã)ããã®äžã§$\lfloor x/2 \rfloor$ ,$\lceil x/2 \rceil$ ããããã$counts[x]$ åå¢ããã -
$x$ ã¯æªåŠçã®ãã®ãéé ã«åŠçããã
ã¡ã¢åååž°ã§ãã£ãšãã£ããå®è£ ã§ããããããããŸã äžæãçè§£ã§ããŠããªã(æäœåã®èªåãã倧ããªæ°ãã©ãã ã£ããã«ã¯åœ±é¿ãåããªãã®ã§DFSã§æ±ãŸããšããããš)ãå ¬åŒè§£èª¬1ãã®ãã®ã®ã³ãŒãã ãã¡ã ã§ããããã®çš®ã®å®è£ åããŸã ãŸã ç§ã«ã¯è¶³ããªãã
ãšãã£ãŠæžãŸãèš³ã«ãè¡ããªãã®ã§èšŒæãèããã
-
$x$ ãå¶æ°(LSB=0)ãªãã1æ®µã®æäœã«ãã£ãŠçãŸããæ°ã¯$y = x/2$ ã2ã€ã§ããããã£ãŠåãããæ°ã¯1çš®é¡å¢ããã -
$x$ ã奿°(LSB=1)ãªãã1æ®µã®æäœã«ãã£ãŠçãŸããæ°ã¯$y = (x-1)/2$ ãš$y + 1$ ã§ããããã£ãŠåãããæ°ã¯2çš®é¡å¢ããã-
$y$ ãå¶æ°(LSB=0)ãªã$y+1$ ã¯å¥æ° ã§ã$y,y+1$ ãã1æ®µã®æäœã«ãã£ãŠçãŸããæ°ã¯$z = y/2$ ãš$z + 1$ ã§ããããã£ãŠåãããæ°ã¯$x$ ãã2çš®é¡å¢ããã -
$y$ ã奿°(LSB=1)ãªã$y+1$ ã¯å¶æ° ã§ã$y,y+1$ ãã1æ®µã®æäœã«ãã£ãŠçãŸããæ°ã¯$z = (y-1)/2$ ãš$z + 1$ ã§ããããã£ãŠåãããæ°ã¯$x$ ãã2çš®é¡å¢ããã
-
以äžã®èå¯ããã1æ®µã®æäœã«ãã£ãŠæ°ãã«çãŸããæ°ã¯é«ã
2åã§ããã
ã³ãŒãã¯ãã¡ã
çŽ çŽã«ãã€ã¯ã¹ãã©æ³ã§è§£ãã
ã³ãŒãã¯ãã¡ã
å§ããŠé å»¶ã»ã°ã¡ã³ãæšã䜿ã£ãŠã³ã³ãã¹ãã§æ¬çªACããã
é å»¶ã»ã°ã¡ã³ãæšã¯èŠçŽ ãæŽæ°ãåäœå ã0ãããŒãã®çµ±åãšäœçšãã颿°ããšãã«æŽæ°ã®å¯ç®ã«ããããã®å®è£ ã¯338-Dãšå šãåãã§ããã
ããšã¯é
å»¶ã»ã°ã¡ã³ãæšã«ãããåºéå¯ç®ã以äžã®éãå®çŸ©ãããäžèšã§é¢æ°ã¯ atcoder::lazy_segtree
ã®ã¡ã³ã颿°ã§ãã( atcoder::lazy_segtree
ãªããžã§ã¯ããå
¥ã£ã倿°ã®ååã¯çç¥ãã)ã
- åæå€ã¯
$A_i$ ã$set(i, A_i)$ ããã -
$i$ çªç®ã®æäœã¯$box = B_i$ ãåãåºããããŒã«ã®æ°ã$balls = get(B_i)$ ãšããã - ç®±
$box$ ã空ã«ããã$set(box, 0)$ ãšããã - ããŒã«ãäœåšé
ããã¯
$cycle = \lfloor balls / N \rfloor$ ãåšåã®ç«¯æ°ã¯$rem = balls \quad mod N$ ã§æ±ãŸã - ããŒã«ã
$cycle$ åšé ããããã¯$apply(0, N, cycle)$ ã§ã§ããã - ããŒã«ã
$box$ ã®æ¬¡ãå é ãšããŠ(ãããåŒã£æããããã)ã$modN$ ã§é ã«$rem$ åé ã«é ãã-
$box + 1 + rem \leq N$ ãªã$[box + 1, box + 1 + rem)$ ã«é ãã$apply(box + 1, box + 1 + rem, 1)$ ã§ã§ããã -
$box + 1 + rem > N$ ãªã$[box + 1, N)$ ãš$[0, (box + 1 + rem) mod N)$ ã«é ããåæ§ã«$apply()$ ã§ã§ããã
-
æåŸã«ç®±ã«ããããŒã«ã®æ°ã
å察ã»ã°ã¡ã³ãæšã䜿ããšå®è¡é床ãéããªãã ãã¡ãã®èšäº ã«ããã³ãŒããåèã«ããããŸãããè§£ç㯠ãã¡ã ã
ã³ãŒãã¯ãã¡ã
äžè§åœ¢ã®é¢ç©ã¯å€ç©ã®çµ¶å¯Ÿå€ã®ååã§ããããšãšãæ¡åŒµãŠãŒã¯ãªããæ³ãŸã§ã¯åãã£ãããããããããå ãã©ãããŠãããåãããªããŸãŸã³ã³ãã¹ããçµãã£ãŠããŸã£ãã
è§£ãæ¹ã¯å
¬åŒè§£èª¬éãã§ãããæåŸã«
ã³ã³ãã¹ã17åç®ã§ãããA,B,C,Dã®4å®ã§ãããC,Dåé¡ã«æéãæãéããEåé¡ãè§£ããã®ã 22:44:29 ã ã£ããããš5åæ©ãæåºããŠããã5å®ã ã£ããããã®5åãã§ããªãã£ãã
ã³ãŒãã¯ãã¡ã
10
ã 1
ã1ååºåãããå
¬åŒè§£èª¬ã¯éã§ã 1
ã1ååºåããŠããç¶ã㊠01
ã
ã³ãŒãã¯ãã¡ã
æ·»ãåã®å€§ããªéè²šãæ·»ãåã®å°ããªéè²šã«æéããããããšã¯ç¡ãããã£ãŠ
ã³ãŒãã¯ãã¡ã
å°ãå®è£ ãéãã
å§ç¹ std::set<std::pair<Num,Num>>
ã«è¿œå ãããæåŸã®å Žæã®å€§ããã€ãŸããéè€ãæ°ããªãéåã®å€§ãããçãã§ãããçããã®ã¯äžæçããå Žæã§ã¯ãªãçŸåšå°ãšãããçµçå°ãªã®ã§æ³šæããã
ãã®åé¡ã«49åæããŠããŸã£ãããã«ãEåé¡ãè§£ãæéãè¶³ããªãã£ãã
ã³ãŒãã¯ãã¡ã
æåã«
LCMãäœåè¶³ããã¯
åŸã¯
äžèšã®éãé ã远ã£ãŠèããã°è§£ããã®ã ããå šäœçã«æ±ããããããããäžèšã®æ¹æ³ã¯å ¬åŒè§£èª¬2ãšã»ãŒåãã§ããããåªå 床ãã¥ãŒã䜿ããŸã§ããªãã£ããããã®èå¯ã«è³ããªãã£ãã®ã49åæãã£ãåå ã§ãããäžèšãçè§£ããŠãã°ãåå®è£ ã¯æ°åã§ å®äºãã ã
å
¬åŒè§£èª¬1ã®éãäºåæ¢çŽ¢ã§ã è§£ãã ãçãã
ã³ãŒãã¯ãã¡ã
Dåé¡ã«æéãæãéããŠãæåŸã®è©°ããéã«åããªãã£ãã
åé¡èªäœã¯ã»ãšãã© 322-F ã§ãããé å»¶ã»ã°ã¡ã³ãæšãçšæããããŒãã以äžã®éãå®çŸ©ããã
- ç¯å²ã®æå·Šã®æ°å
$left$ - ç¯å²ã®æå³ã®æ°å
$right$ - ç¯å²ã®å¹
$width$ - ç¯å²ãããæååãã©ãã
$good$
ããŒãã®ã¡ã³ã颿°ã以äžã®éãå®çŸ©ããã
- 空ã®ç¯å²ã«ã€ããŠã
$left=0, right=0, width=0, good = true$ ãšãããå®ã¯widthã§ã¯ãªãã空ãã©ããã ãåããã°ãããããã§0ã«æ±ºãæã¡ããã®ããŸãããããããoptionalã«ãã¹ãã ã£ãã - å
¥å
$S$ ã«åºã¥ããŠã$S$ ã®$i$ æåç®ãæ°å€$d$ ãªã$left=d, right=d, width=1, good = true$ ãšãã - å転(flip) ã
$left:=1-left, right:=1-right$ ãšããã$width, good$ ã¯å€ããªãã - é£ç¶ããç¯å²ã®çµ±å(merge)ãå®çŸ©ãããäžæ¹ã®ç¯å²ã空
$width=0$ ãªã仿¹ã䜿ãããããæãã€ããªããŠã³ã³ãã¹ãäžã«éã«åããªãã£ããäž¡æ¹ã®ç¯å²ãšã空ã§ãªããã°ã以äžã®éãå®çŸ©ãã-
$left$ ã¯å·Šã®ç¯å²ã®$left$ -
$right$ ã¯å³ã®ç¯å²ã®$right$ -
$width$ ã¯äž¡æ¹ã®ç¯å²ã®$width$ ã®å -
$good$ ã¯äž¡æ¹ã®ç¯å²ã$good=true$ ã〠巊ã®ç¯å²ã®$right$ ãšå³ã®ç¯å²ã®$left$ ãç°ãªãã°trueããã以å€ã¯false
-
- äœçšçŽ ã®äžãããã©ã¡ãŒã¿ã¯åè»¢åæ°ã ããLSBã®xorã«ããã2åå転ããã®ã¯å転ããªããšåãã§ããã
- äœçšçŽ ã®åæã¯xorã§ãã
- ããŒãã«äœçšçŽ ãé©çšãããšãã0ãªããã®ãŸãŸã1ãªãå転(flip)ããããŒããè¿ã
åŸã¯
- ã¯ãšãª1ã¯ã [L,R) ã«1ãåŒæ°ãšããäœçšçŽ ãé©çšãã
- ã¯ãšãª2ã¯ã [L,R) ã®
prod
ãåã£ãŠããŒããè¿ãå€ãšããŠååŸãã$good=true$ ãªãYes
ããããã§ãªããã°No
ãåºåããã
ACæå»ã¯ 22:44:29 ã§æ¬åœã«æããã£ãããDåé¡ã«æéãæãéãã§ãããå¹ 0ã®åºéãçµ±åãããšããã§ãã°ãåºããŠããŸãããã°ã«æ°ãä»ããã®ã¯ã³ã³ãã¹ãçµäºã®3ååŸãããã ã£ãããããåããã°Eåé¡ããçæããŠ20åã§è§£çã§ããå¯èœæ§ããããçµéšã®æµ ããåºãŠããŸã£ãã
å®è£ ã æŽç ããŠãå¹ 0ã®ããŒããé©åã«è¡šçŸããã°ãããå°ãæ©ããã°ã«æ°ãä»ãããšæãã
-
$left$ ã¯std::optional<bool>
ã§ãå¹ ã0ãªãå€ãæããªããå¹ ã1以äžãªã true, false ã¯ããããæååã®1
,0
ã«å¯Ÿå¿ããã -
$right$ ã$left$ ãšåæ§ã«å®çŸ©ãã -
$width$ ãç¡ãããŠleft.has_value()
ã§å¹ 0ãã©ããåãã -
$good$ ã¯åã
å ¬åŒè§£èª¬ã§ã¯é å»¶ã»ã°ã¡ã³ãæšã§ã¯ãªããæ®éã®ã»ã°ã¡ã³ãæšãçšããŠãããå®è£ 㯠ãã¡ã ãäžèŠåçŽã«èŠããããã»ã³ããã«ãäžæãæãã€ããªããšè§£ããªããå ¬åŒè§£èª¬2ã®ããã«ãã»ã°ã¡ã³ãæšã䜿ããã« è§£ãã ã
ã³ãŒãã¯ãã¡ã
ã¡ãã£ãšèŠãããã³ãã¯å¿ããã®ã§èªåACãšããããšã§ãã³ã³ãã¹ãã®ç¿æ¥ã«2æéè¿ãããã£ãŠè§£ãããè§£ããã®ã¯å¬ãããã2æéæãã£ããã³ã³ãã¹ãã«ã¯éã«åããªãã
é
ãããšã®è¯ããšã¯ãé ç¹
ãã®ãããª
ãããã¶ãã¯åé¡ã¯ã瞊軞(DPãæŽæ°ããæ¹æ³)ã
ã³ã³ãã¹ã18åç®ã§ãããA,B,C,Dã®4å®ã§ãããEåé¡ã¯èšå®ã倧å€ãããªã®ã§Fåé¡ã«59ååãçµãã ã®ã ããæããã«Eåé¡ããè§£çè ãå°ãªã(çµãã£ãŠã¿ãã°Gåé¡ããæ£è§£è ãå°ãªã)Fåé¡ãèªåãã©ãããŠè§£ãããšæã£ãã®ããèªåã§ãåãããªãã
ã³ãŒãã¯ãã¡ã
æåã®åºçŸåæ°ãããããæ°ããŠãåºçŸåæ°ã1åã®æåã®å Žæãåºåãããã€ãŸãæååãäºåºŠã¹ãã£ã³ããã
ã³ãŒãã¯ãã¡ã
é
åã®äœãããã«æ°ãä»ããã
ã³ãŒãã¯ãã¡ã
Union-findæšãåãåºããŠæéãæº¶ãããäŸåã°ã©ããäœãããšããŠæéãæº¶ãããè±å°æåã¯26çš®é¡ãããªãããšãæãåºãããè±å°æåã®å€æè¡š(倿å
ã¯26çš®é¡ã倿å
ã¯æå€§26çš®é¡)ãæŽæ°ããŠãæåŸã«ã§ããå€æè¡šã«åºã¥ã㊠a
ãšã®ã¢ã¹ããŒã³ãŒãã®çžå¯Ÿå€ a..z
=
å ¬åŒè§£èª¬2ã®æ¹æ³ãäœãããšããŠäžæããããªãã£ããšèšããã
ã³ãŒãã¯ãã¡ã
éè² æŽæ°ãªã®ã§äŸå€åŠçã倧å€ã§ããã
æåã«
次ã«
ãããããã¹ãŠè¶³ãããã®ãçãã§ããã
å
¬åŒè§£èª¬ã¯éåã§ã¯ãªããçŽ å æ°ã®ç©ã䜿ã£ãŠãã(çŽ å æ°ãäœåãããæ±ºãŸãã°ããã®ç©ã¯äžæã«æ±ºãŸããéãç¶ããªã®ã§)ã std::map
ã®ããŒãéåãªã®ã«TLEããªãã®ã¯C++ã®éãã«å©ããããã
ã³ãŒãã¯ãã¡ã
ç¿æ¥43åæããŠACãããFåé¡ãç¡èŠããŠè§£ããŠããã°ã³ã³ãã¹ãäžã«éã«åã£ããšèšããããåé¡éžæã®æéãå«ãããšæ®ãæéã§è§£ãããã©ããåãããªããšããããããã®43åã«ã¯å顿ãçè§£ããæéãå ¥ã£ãŠãªãã®ã§ã
ãã€ã¯ã¹ãã©æ³ãã¡ãã£ãšå·¥å€«ããã°è§£ããã
é»è»ã®åããéåãã®ã°ã©ããšããŠæã€ãã€ãŸã Unreachable
ã§ããã
é§
std::vector<std::optional<Num>>
ã«ãããããã«åªå
床ãã¥ãŒã«ãããæç¹ã§é§
ãã®åªå
床ãã¥ãŒããã€ã¯ã¹ãã©æ³ãŠãã«åŠçããããã®é§
ã«å°çãããã¹ãŠã®è·¯ç·
-
$T_{ij} < l_j$ ãªãå§çºã«éã«åããªãã®ã§ç¡èŠãã - ããã§ãªããã°åºçºæå»ã«ããªè¯ãåãããã
$t = l_j + min(k_j - 1, max(0, \lfloor (T_{ij} - l_j) / d_j \rfloor)) \times d_j$ ãæçµåºçºæå»ã§ããã -
$T_i$ ã$t$ ãš$T_i$ ã®é ãæ¹(ããããã°)ã§æŽæ°ããæŽæ°ãããåªå 床ãã¥ãŒã«ç©ããåºçºå°ãšå°çå°ãåãè·¯ç·ãè€æ°ãããããããªãã®ã§ãŸãšããŠè¡ãã
ãããç¹°ãè¿ãã°ã
ã³ãŒãã¯ãã¡ã
確çDPã ãšã¯åãã£ãããã³ã³ãã¹ãã®æéå ã§äžæãå®åŒåã§ããªãã£ãã
ãã£ãŒã©ãŒã«ã¯è¡åã®éžæè¢ãç¡ãã®ã§ã
ãã¬ã€ã€ãŒã¯ãµã€ã³ããæ¯ããã©ãã(Black Jackã§ã¯ã«ãŒããåŒãhitãããã以äžåŒããªãstandã)ã®éžæè¢ãããããã£ãŠ
- Hit : Bustããªãç¯å²ã§ãã倧ããª
$x$ ã§ã®åçã®å$\sum_{j=(x+1)..N} DP_p[j] / D$ - Stand : ãã£ãŒã©ãŒãbustãããã¬ã€ã€ãŒä»¥äžã®å€ãåºããã€ãŸã
$y \leq N \land x \leq y$ ã®ç¢ºçãªã®ã§ã$1.0 - \sum_{j=max(x,L)..N} DP_d[j]$
ã®ã©ã¡ãã倧ããªæ¹ãéžã¶ããã¬ã€ã€ãŒã¯
- Hit : ãµã€ã³ããããäžåæ¯ã£ãŠã
$DP_q[i]$ ã$DP_q[i+1,i+D]$ ã«é ãDPãã - Stand :
$DP_q[i] \times 1.0 - \sum_{j=max(x,L)..N} DP_d[j]$ ãåçãšããŠè¶³ã
ã³ã³ãã¹ãäžã«æåºããè§£ã¯ãhitãšstandãäžæã䜿ãåããŠããªãã®ã§å ¥åäŸããè§£ããªãããã®åŸå€äžãŸã§æãã£ãŠWAãšåãé€ããªãã£ãã®ã ããå ¬åŒè§£èª¬ãèªãã§é ãDPããããDPã«ãããACãããé»diffãèªåACã§ãããŸã§ã»ãã®å°ãè¶³ããªãã£ãã
ã³ãŒããæŽçãããš ãããªã ããã£ãŒã©ãŒã®ç¶æ ãé å»¶ã»ã°æšããã¬ã€ã€ãŒãstandãããšãã®ç¶æ ããã¯ã¿ãhit or standã®ã©ã¡ããããæ¹ã®åçã®çޝç©åãã§ãã£ãããŸãšãŸããé ãDPã«ãããš WA ããããããDPãªã®ã§ãé å»¶è©äŸ¡ããªãã»ã°ã¡ã³ãæšã§ è§£ãã ã
ã³ã³ãã¹ã19åç®ã§ãããA,B,C,Dã®4å®ã§ãããEåé¡ã¯æããã«é£åã§ãFåé¡ã«82åæãããè§£ããªãã£ããè§£æ³ã¯ã ããããã£ãŠãããç»ç«ç¹çãæ¬ ããã
ã³ãŒãã¯ãã¡ã
å顿ããã®ãŸãŸå®è£ ãããçãã¯äžã€ã§ã¯ãªãã®ã§ãçãåããã«æéãæããªãã
ã³ãŒãã¯ãã¡ã
å顿ããã®ãŸãŸå®è£
ããã0-based indexingã®ãšãã«æ°åããããªãããšãšã空è¡ãå¿ããã«åºåããããæ³šæããã空è¡ã®ç¢ºèªã«æéã䜿ã£ãŠããŸã£ãã®ã§ã空è¡ã _
ã«çœ®ãæããŠç©ºè¡ãç®ç«ãããã
make && ./343b | sed 's/^$/_/' | grep --color -e "^.*"
ã³ãŒãã¯ãã¡ã
std::to_string
ã§ã§ããã
æ¬åã§ã¯äœ¿ããªããã0ããã£ã³ã°ã¯ä»¥äžã®ããã«è¡ãã
long long int r {343};
std::ostringstream oss;
oss << std::setfill('0') << std::right << std::setw(10) << r << "\n";
const auto s = oss.str();
printf
, snprintf
ã®æ¹ãç°¡æœã ãæŽæ°åãæå®ããæéãèŠãããããš ios::sync_with_stdio(false);
ã§ std::cout
ãš printf
ã®åæãåããšäžæããããªãã
long long int r {343};
printf("%010lld\n", r);
ã³ãŒãã¯ãã¡ã
Fåé¡ã«ãéããã
åŸç¹
å
¥åããšã«åŸç¹ std::map<int,int>
ã ãšããŒã«å¯Ÿå¿ãããšã³ããªããªããã°å€ã0ã®ãšã³ããªãã§ããã®ã§ããšã³ããªãæç€ºçã«äœããªããŠã0ã1ã«ãªãã std::map::size()
ã¯ãšã³ããªæ°ãè¿ãã®ã§åºåããã
ã³ãŒãã¯ãã¡ã
解説ãèŠãã«è§£ããªãã£ãã
å€
飿³é åãå šéšå ¥ãã«ãããš TLEãã ããªã®ã§å¿ èŠæå°éã®èŠçŽ ãèŒããããšãèãããå ¬åŒè§£èª¬ã«ããéããããåºéã«ã€ããŠå€ã®äžäœ2äœãŸã§ä¿æããã°ã3äœä»¥äžã¯èŠããªãã詳ãã説æã¯å ¬åŒè§£èª¬ã«ããããéšåæšã®3äœä»¥äžã¯æšå šäœã®2äœä»¥å ã«ã¯ãªããªãããšãã³ã³ãã¹ãäžã«åããããå šéšå ¥ãã«ãã ãã£ãŠTLEã®ãŸãŸçµãã£ãŠããŸã£ãã
ã»ã°ã¡ã³ãæšã®2åºéã®ããŒãžã倧å€ã§ãããå·Šåºéã®1äœ std::set<int, int>
ã䜿ã£ãŠå€ãéãªãå Žåã«å¯ŸåŠããã®ãšã1,2äœã¯ç¡ããããããªãã®ã§
ã»ã°ã¡ã³ãæšã«èŒãããã®ã¯åãã£ãã®ã«ãã»ã°ã¡ã³ãæšããŒãã¡ã³ãã®åã¡äžããæ¹åŒãåãããªãã£ãã®ã¯ãåŸäžæ©æããã£ããå®åãè¶³ããªãã£ããã»ã°ã¡ã³ãæšã«min, maxãèŒããŸãããšããçšåºŠã®çè§£ã§ã¯ãã®çš®ã®åé¡ãå®çããããšã¯ã§ããªãã
2èŠçŽ x2ã2èŠçŽ ã«ããã®ã«ãstd::setã䜿ããšTLEããããšãããã®ã§ãããŒãžãœãŒããæžãäžããš éããªã ããã®ä»£ãããããã°ã§èŠåŽããã
ã³ã³ãã¹ã20åç®ã§ãããA,B,C,D,Eã®5å®ã§ãããEåé¡ãåãéããªãã§éãè§£ãããã£ãã
ã³ãŒãã¯ãã¡ã
|
ã®æåã®åºçŸäœçœ®ãšã2çªç®ã®åºçŸäœçœ®ãã¹ãã£ã³ãããæåã® |
ã®åºçŸäœçœ®ãŸã§ãšã2çªç®ã® |
ã®åºçŸäœçœ®ããåŸãåºåããã
ã³ãŒãã¯ãã¡ã
åé¡ã®å¶çŽãããèªããå€ã1ååãåºããŠã0ãåŠãã«é¢ãããä¿åããŠã0ãªããã以äžèªãŸãªããåºåã®æžãæ¹ã¯è²ã
ãããã std::ranges::reverse()
ããæ¹ãåããããããªãããããã
ã³ãŒãã¯ãã¡ã
åè£ãå
šåæããŠãé«ã
100äžéããªã®ã§ãåè£ãå
šéš std::set
ã«å
¥ããŠã¯ãšãªã«çããã
ã³ãŒãã¯ãã¡ã
ç¥ããéããã
ãããŸã§äœã£ãæååãšãã®ã³ã¹ãã飿³é
åã§ä¿æããŠDPãããåæç¶æ
ã¯(空æåå,0)ã§ããã飿³é
åã«èŒã£ãŠããæåå
-
$|U| > |T|$ ãªã飿³é åã«è¿œå ããªã -
$U$ ã$T$ ã®æ¥é èŸã§ãªããã°é£æ³é åã«è¿œå ããªããå®ã¯ããã ãã§ååã ã£ã(åŸè¿°)ã -
$U$ ãæªç»é²ãªã飿³é åã«è¿œå ãããã³ã¹ãã¯$U$ ã®ã³ã¹ãè¶³ã1ã§ããã -
$U$ ãç»é²æžãªãã$U$ ã®æ¢ç¥ã®æå°ã³ã¹ããšã$U$ ã®ã³ã¹ãè¶³ã1ã®ã©ã¡ããå°ãªãæ¹ã§æå°ã³ã¹ããæŽæ°ãã
å
¬åŒè§£èª¬ã«ã¯èšç®éãæžããŠãããç§ã«ã¯èšç®éãå³åº§ã«èŠç©ãããªãã£ãã
ã³ãŒãã¯ãã¡ã
ãŸããC++ã®ç解床ãã¹ãã ã£ãã
std::list
ã®æ€çŽ¢ã¯èŠçŽ æ°
decltype
ã§ãããåŸã¯ã¯ãšãªã«å¯Ÿå¿ããæäœãäœãã
- ã¯ãšãª1ã§ã
std::list::insert()
ã¯åŒæ°ã®ã€ãã¬ãŒã¿ã® å ã«èŠçŽ ãæ¿å ¥ããŠãæ¿å ¥ããèŠçŽ ãæãã€ãã¬ãŒã¿ãè¿ãããªã®ã§æ¿å ¥åã«ã€ãã¬ãŒã¿ãäžã€é²ããŠçœ®ã(èŠçŽ ã¯å¿ ãããstd::list::end()
ãæããªãããšãåãã£ãŠããã®ã§äžæ©é²ãããã)ãæ¿å ¥ããèŠçŽ ãæãã€ãã¬ãŒã¿ã飿³é åã«å ¥ããã - ã¯ãšãª2ã§ããªã¹ãããã€ãã¬ãŒã¿ãæãèŠçŽ ãåé€ãããã®åŸã§é£æ³é åããå€ãæãèŠçŽ ãåé€ããã
å
¬åŒè§£èª¬ã¯ããããšåçã®å®è£
ãæäœãããŠãããæäœãã®ä»æ¹ã«ãã£ãŠã¯ããªã¹ãã®å
é ãšæ«å°Ÿã®æ±ãã倧å€ããã§ãããå®éã« å®è£
ããŠã¿ããšãã»ã³ããã«ããŒãã®æ±ããæ
éã«å®ããå¿
èŠãããã
ããèããããã㯠Boost.MultiIndex ã§å®è£ ãããŠããããšãåå®è£ ããã®ã«çããã®ã§ãBoost.MultiIndex ã䜿ã£ãŠ å®è£ ã§ãããã³ã³ãã¹ãäžã«å®è£ ããã«ã¯æéãè¶³ããªãããã ãã
æåæãã€ããã®ã¯ãæ¿å ¥æäœãæšæ§é ã«å¯Ÿå¿ãããæ¹æ³ã ã£ãããããã©ãã«æ¿å ¥ãã¹ããã®ç®¡çãšãæã®ç®¡çãç ©éã§äžæãæŽçã§ããªããŸãŸWAããçµå±ãã®æ¹æ³ã諊ãããäžæããããªããããªæ¹æ³ã«èŠåããã€ããŠæ£è§£ã«ãã©ãçããã®ã¯ãéå»ã®çµéšã掻ããã®ãããããªããéã«æåããæ£è§£ãæãã€ããŠããã°ããæ°ååæ©ãè§£ããŠããã©ãŒãã³ã¹ãå€§å¹ ã«äžãã£ãã®ã§ãã¢ã«ãŽãªãºã åã§ã¯ãªãC++å®è£ åã§æšã決æãæåããã§ããŠãããããšæãã