競プロ
最近は何もやっていませんでした。(この場をお借りして関係者の方々にお詫びをしておきます…申し訳ありませんでした。) それは置いておくとして、Swiftをやらないかと誘われたのでとりあえずリハビリがてらABSしておきます。過去の記事 naomi-notebook.hat…
Rustをやってほしいという声が出たので TypeScriptもお勧めがあったのですが、忙しくなってきたのでとりあえずしばらくこのABSシリーズはお休みしようと思います過去の記事 naomi-notebook.hatenablog.com naomi-notebook.hatenablog.com naomi-notebook.hat…
まだ500が全部埋まったわけではないんですが、典型問題っぽい600が解けるとうれしいなあみたいな気持ちになったりすることが多い(500以下は発想問題であることも多い)ので、コンテスト中に糸口はつかめていたものの解ききれなかった問題を中心に600もたま…
atcoder.jp 考察過程 いちいち更新してると2乗かかってしまう 一回の操作による移動を手早くできる方法がないかな? 最終的に端っこから出てしまうか出てしまわないかが大事。 →最終的に端っこにあるゴーレムがあるとして、そうなってしまうゴーレムの初期位…
atcoder.jp綺麗に思いついたし時間もそこまでかからなかった。実装が簡単だったのでよかった やっぱり計算量が大きい解法をまず考えて縮めていくのがよいっぽい。 考え方の途中経過 あるi,jを選んだ操作によって、場所が入れ替わる(int)(j-i+1)/2ペアについ…
問題 D - Snuke Numbers この回は確か参加したけどこれが解けなくて、まあギリギリ冷えなかった回。完全に忘れたので一から解いて行く。 これも含めてなのですが、最近のコンテストで冷えがちなのは500点(DかE)が数学的な問題で、数学的センスが壊滅的だか…
問題 atcoder.jp単純に逆から辿っていくので結構計算量も小さそうなんだけど、正確なところはわからないので、とりあえず実装してみよう。->計算量K(10^5)で操作できた。すごく時間がかかってしまった(最初から思いついてたんだけど例外がないか確かめるの…
atcoder.jp少し時間かかりめだったけど自分で綺麗なものを思いついてよかった。 解法 計算量的にN^3 ここで、A ケアレスミス 数字を読み込んだ後まだ改行が残っているため、一度無駄に読み込まないと次に読む文字が改行文字になってしまう。 コード #include<cstdio></cstdio>…
atcoder.jp師匠の問題で操作するゲーム系のやつ、前も見た。確か後ろの状態から戻ってく感じだった… ここでも使えそう…と思ってその方針で長いこと考えたけど使えなかった、もっと簡単だった 解法 与えられた数列の部分数列をとって、それが連続()であり単…
atcoder.jp時間内にこれを解き終わらず、さらにDでミスったため激冷えし冷め冷めになってしまった一回。リベンジしていきたいと思います。 まず、式をXとY独立に考えていいというところまでは誰でも思いつくと思います。 ABC途中の考察では色々めんどくさい…
atcoder.jp yutaka1999さんの問題は面白いなあ(個人的には難しいですが…)一回の操作で、選んだ箱からN 個、他の箱から1,2,3...N-1個取る。 ☆1回の操作で取られる石の個数は1/2*N(N+1)なので、何回操作を行うべきなのかがわかる(または操作によって達成で…
atcoder.jpロープの結び目が全て切れないのは、どの隣同士の二つのロープを選んでも長さの和がL以上にならない時。 なぜなら、L以上になる隣同士のロープの組みが存在する時、その二本を中心として両端から結び目を解いていけば良い。(これを出力) 逆に、存…
新元号令和おめでとうございます。 atcoder.jp うわ苦手…最初は三角形に対して光を射出してるけど、そのあとは光の軌跡によって区切られた平行四辺形に対して射出していると考えて良さそう。ここから解法をひねり出します。 この時両辺がa,b(a>=b>0)の平行四…
atcoder.jp これは300点問題なんだけど、なんか話題になっていたのでまずユークリッドの互除法でgcdを求めるコードを書いておく。これの計算量はラメの定理により十進法での桁数くらいらしいですね(知らなかった)、すごい。まず、書き換える時は10^9以下な…
atcoder.jpXor出てきたばっかりだ いらなかった考察 まず準備としてを求めておく。これによって区間の和が定数時間で求められる。 この前の問題 でも見たように、xorの歩けたが1になる組み合わせはlogNで見つけられるんだよな…でもたし算の組みだけでも網羅…
atcoder.jpまず、摂取カロリーを最大化したいので、当然前を通った寿司をスルーするということはできません。よって移動方法を考えることになります。。 また、スルーしないという条件より、最低でも全ての寿司の前を通った時には店を出なければいけませんし…
atcoder.jpこれ昔参加したコンテストで、ツイッターに流れてくる解法を見て天才か!?ってなったので印象に残っている 最も感動した問題の一つ。なので永遠に記憶が消えないと思うからACしておこう。カラクリはとても簡単で、連続した領域の数を調節するには…
atcoder.jp もうだめだ 足し算なので分配則が成り立ったりはしないですね(ちなみにxorは分配則、結合則、交換則などが成り立つ排他的論理和(Exclusive OR)の性質) やる気が0なので5分で解説をちらっと見ました。 ビット毎に調べるという情報とmodを取ると…
atcoder.jpまず、市松模様を並行移動していくと、縦横それぞれKずつ動かした時に塗り方としては全く同じになる。また、2Kのマスをとると完全に繰り返しになるので、座標は2Kで割った余りにして良い。 白に塗るマスの指定はどちらか方向にKずらすことで黒く塗…
atcoder.jp最初のFの分だけx軸正方向に進まなくてはならないので、進んだところからスタートします。Tによって分離されるFの連続について、上下と左右の方向どちらに進めるFかで場合わけでき、それぞれについて組み合わせてちょうどxやyになる組み合わせがあ…
atcoder.jpまず、全ての頂点の間に の辺を張ります。その状態で全頂点間最短経路をワーシャルフロイドで求め、その最短距離が実際の最短距離より小さい時、そのような最短経路は存在しません。なぜなら、 ①まず、Aのu行目について見ていって、その行の中で最…
ちなみに記事のタイトルは「この問題で私が学んだこと」という基準で決めているため、実は解法に必ずしも関係があるとは限りません。atcoder.jp まず、数列は以下の三つに分けられる。 ①前半となるN個 ➁後半となるN個 ③抜いたN個 全ての①は必ず全ての②の前に…
atcoder.jpまず、列を0(直立)の領域と1(逆立ち)の領域に分けます。 この領域は必ず交互に並んでいるので、ある状態にしたい場合に0の部分を選択してひっくり返した時が回数が最小です。(これって自明でいいのかな…?) のでK個の直立グループをひっくり返し…
atcoder.jp電車の中で考察するとだいたい終わるし時間が潰せるので良い。直線によって区切られている小さなマスについて、そのマスが長方形の中に含まれる回数は、縦横それぞれでその範囲が長方形に使われるかを なのでまず一方の方向について考える。 実験…
atcoder.jp朝の電車の中で10分くらい考察して、あとは実装した。 大切なのは「ある2箇所の動物が決まると、その次の動物も決まる」と言うこと。 まず、可能かどうかを調べる。場所二つごとに羊と狼の組み合わせ(通り)を要素としてunion-findを行い、一周し…
atcoder.jp400点に飽きてきたのでたまには500をやるか、と思って簡単そうなのを選んで解いた なんでこれ500点なの…?300点くらいでは #include <stdio.h> #include <stdlib.h> #include<math.h> #include<algorithm> #include<vector> #include<queue> #include<string> #include<set> #include<cstring> using namespace std; #define re</cstring></set></string></queue></vector></algorithm></math.h></stdlib.h></stdio.h>…
atcoder.jp 簡単な問題が続いている… 通る頂点が8個と少ないので、この8つの頂点からの各頂点への最短距離を求めておく。 まあ全頂点間でも間に合うしめんどくさいのでそうする。ワーシャルフロイド(計算量) あとは8!通りの通り方についてこれを使って合計…
atcoder.jpオリ合宿のバスの中で。ただのダイクストラ。五分。 #include <stdio.h> #include <stdlib.h> #include<math.h> #include<algorithm> #include<vector> #include<queue> #include<string> #include<set> #include<cstring> using namespace std; #define rep(i,n) for(int i=0;i</cstring></set></string></queue></vector></algorithm></math.h></stdlib.h></stdio.h>
atcoder.jpえ〜、なんかすぐ出来た。括弧列であることと、(の個数と) の個数が同じで、さらに前から部分列を取得したときその部分列において( の個数が )の個数以上であることは同値である。 また、追加する個数が同じとき、(は先頭、)は末尾に持ってきても(…
atcoder.jp問題を見てダイクストラ法ですかねと思い、ダイクストラ実装…してから気づいたけどよく考えたら最長経路問題だった。部分構造最適性が成立していないのでダイクストラ法みたいに計算量少なくは出来なかった…(色々考えた)辺の値全てに-1をかける…