pitsuの精進日記

精進の様子を垂れ流しています

今日の精進 2020/06/15

0の数が2以上、1が0じゃなければ0

距離iの頂点数cnt[i]としたとき答えに(2^cnt[i-1]-1)^cnt[i]と2^(cnt[i]*(cnt[i]-1)/2)をかける

atcoder.jp

 

 

ワーシャルフロイドの更新はその辺の両端だけを考えればいいので一回のクエリに対してO(N^2)で済む

atcoder.jp


 

前から貪欲に数え上げる

最初の人は1まで1ずつ減らせる

次の人は2じゃなければ2ずつ減らせる

2だったらもう減らせないので次の人は3ずつ減らす

みたいな感じで減らしてく

atcoder.jp

 

 

全方位木DP

dfs1で0を根とした木DPで部分木の頂点数を求めて

dfs2で0を根として各頂点から0への方向の頂点数も求める(N - dp[v]でできる

atcoder.jp

 

 

えでゅふぉバチャ

ABCの3完

A:

小さいやつ見つけたあとにもう1周させて各小さいやつの距離を求める

B:

Aがi皿、BがN-i皿で雑に場合分けする

頭死んでて4WAした(はーーーー??

C:

next_premutationで全部の場合試す

雑に10^5まで埋まってるか確認した(これ想定解?

 
Educational Codeforces Round 35

https://codeforces.com/contest/911

 

復習

D:

最初にBITで数えた後に

l,rの範囲のswapで偶奇変わる

0->1か1->0にしかならないので何回swapするか計算(r-l)*(r-l+1)/2回なのでこれと偶奇判定

https://codeforces.com/contest/911/problem/D

 

 

半分全列挙

前半半分、後半半分をbit全探索して組み合わせを足す

atcoder.jp

 

 

最小全域木

いつもクラスカル法使うけど今日はプリム法使ってみた

atcoder.jp

 

 

実装ゲー

最後に誰が打つか考えてそれ抜いたとき終わるか確認するのが楽

atcoder.jp

 

 

二分探索

mid分間使うとき左の人から貪欲に動いてく

判定の添え字で頭壊れた

atcoder.jp

今日の精進 2020/06/10,11

平行移動、回転しても変わらない値で比を比較する(比を比較するって頭痛が痛いみたい

最初、凸法で凸多角形の辺の長さの合計でやろうとしたけどめちゃくちゃWAになったので重心求めて重心との距離が最大のもので比較した

凸法勉強しなきゃだなぁ

atcoder.jp

 

 

Mの余りで分ける

先に余りM-mとmのペア作れるだけ作ってから同じ値のペア作るのが最適

余りがmのときの作れるペア(同じ数)の個数をとっておいてmap乱用するとできた

atcoder.jp

 

 

こどふぉバチャ

Educational Codeforces Round 34

https://codeforces.com/group/ruzjfVC9CQ/contest/903

ABCの3完

A:

適当全探索

B:

適当にシミュレーション

C:

O(N^2)で貪欲

D:

多倍長ライブラリ持ってますか?僕は持ってません。

 

 

えでゅふぉ

Educational Codeforces Round 89 (Rated for Div. 2)

https://codeforces.com/contest/1366

A:

無限場合分け

B:

範囲を広げてく

C:

同じ感じになる場所の0,1の数の小さい方を足す

 

 

(連結成分-1)*2個の頂点をつなぐ

各連結成分は1個はつなぐ

をすると解けるらしい

atcoder.jp

 

 

最初と最後の数を加えていきながらdequeでよしなにしたら通った

これ境界みてくだけでいけたのね

atcoder.jp

 

 

今日の精進 2020/06/10

dp[i] := iまでのサプリを食べたときの通り数として遷移していく

一日で食べれる範囲を考えると遷移イメージしやすい?

尺取りが使えるのでしゃくしゃくする

setで管理したのでO(NlogM)

atcoder.jp

 

 

最小値がxのときx未満の値の位置で配列を分解する

分解後の配列の中で要素数K-1以下になるまで要素を小さい順に取り出す

取り出し終わったら取り出したやつをソートして配列のQ番目とxの差を計算

atcoder.jp

 

 

 

今日の精進 2020/06/08

青diff長期バチャやることにした

 

 

通ってきた頂点の最小値をコストとする

各頂点の一番コストが高いものを調べるようにダイクストラ

高い値から出るようにしていく

初期値は-1

atcoder.jp

 

 

値とindexを入れたペアでソート(値は*(-1)しておく

ペアの配列の最後に(0,0)入れておく

(次の要素と今の要素の絶対値)*(今までに見た要素の数)を今までみた要素の中で最もindexが小さいとこに入れる

atcoder.jp

 

今日の精進 2020/06/06

 
 
Educational Codeforces Round 37

ABCの3完

A :

最初要素間の中央値でよしなにしようとしたけどなんかWAが出たので愚直にシミュレーションした

B :

愚直にシミュレーション

i番目の人見てるときに経過時間がrより大きければ0そうじゃなければその時間を配列に代入

C :

0が来た時i番目までの最大値がiと一致するか判定

ダメならNO

最後まで行けたらYES

https://codeforces.com/contest/920

 

 

復習

さっきのE

まだ使ってないものを入れるsetを用意しておく

最初から全部見ていってdfs(使用済みならcontinue

dfsではまだ見てないsetの要素と辺が張ってあるか確認してなければdfs

途中でどんどん要素が消されていくので次の要素見るときはlower_boundを使う

setの知らない使い方(想像しにくい)だった

https://codeforces.com/contest/920/problem/E

 

 

青diffバチャ

ABCで全完

1時間で全完してるのえらすぎる

A : 

女子をN人中P人選び方を全探索

男子は女子の選び方をしたとき受け取る幸福度を合計して上からQ人

B : 

縦1本横1本は絶対必要

横を小さい順にソートして累積和

全部の縦において横のほうが小さいときは横使う、縦のほうが小さいときは縦使う(さっきの累積和を利用してlower_boundとかで縦以上、縦未満を求める

C : 

一回目で動ける範囲を全部求める(K回でいける範囲を求める

閉じたの減るのと動けるの減るの同じなのでその後は一番近い壁に向かって真っすぐいく

https://kenkoooo.com/atcoder/#/contest/show/62322bac-5b75-407d-a286-456ab230f5c1

今日の精進 2020/06/05

Educational Codeforces Round 38

ABCDの4完

A: 

前がaiueoyで今がaiueoyだったら消す

追加するなら答えとなる文字列に加えるみたいにすると実装やりやすかった

判定で6まで見なきゃいけないところで5までしか見てなくて1ぺナ(は?

B:

配列の最初に1、最後に10^6を加えて

i番目まで先頭がいく、i+1番目以降は後ろがいくみたいに全探索

先頭でかかった時間 + 後ろでかかった時間を求めると誤読(は?

大きい方でよかったらしい

C:

n*n - floor(n/m)*floor(n/m) = xになるのを求めるといいことはわかる(ここまですんなり

↓ここから沼

さらに式変形(n - floor(n/m))*(n + floor(n/m)) = x

xの約数求める

それが上の式に当てはまれれるか判定

N/iとiが上のどっちかになる

( max(N/i,i) + min(N/i,i) ) / 2がnになる

( max(N/i,i) - min(N/i,i) ) / 2がn/mになる

s = ( max(N/i,i) - min(N/i,i) ) / 2

とおいてs = n/mを満たすmを探す

sqrt(n)で全探索

n/j == s満たすかn/(n/j) == s満たすか

満たせばOK

D:

適当ダイクストラ

辺のコストを2倍したら通った

https://codeforces.com/contest/938

 

 

この前のABCのB

sum*A[i] <= 10^18

ってするとsum=10^15,A[i]=10^15みたいなのが来るとオーバーフロー

 A[i] <= 10^18/sum

ってすることでオーバーフロー対策できるのか

切り捨てとか怖くない?

とりあえずオーバーフロー対策は完璧

満たしたい条件はa*b <= X

b <= floor(X/a)で満たせる?

両方にaかける

a*b <= X' <= X

b <= floor(X/a)満たせばa*b <= Xを満たす

なんかいけるっぽい

atcoder.jp

 

 

青diffバチャ

ABCの全完(わーい

A : UnionFind

X軸同じやつ繋げる

Y軸同じやつ繋げる

集合の(X軸の数)*(Y軸の数)- (頂点数)

B : ダイクストラ

全頂点間に辺を張ってダイクストラ

辺の重みはmax(0,頂点間の距離-半径の合計)

complexまじ便利

C : 

最大の直径の挙動見るとどの距離が必要かどの距離が作れないかがわかった

https://kenkoooo.com/atcoder/#/contest/show/92fe0d14-c106-4571-baf1-4c7afd232b25

 

 

復習

map<int,vector<int>>に値xが現れたindexを入れてく(前から見てるのでソート済み

こういうの鳩ノ巣ソートっていうのか

for(auto m : map)でxが小さいものからシミュレーション

各頂点を1回ずつしか見ないからO(NlogN)でできる

atcoder.jp

今日の精進 2020/06/04

復習

8方向にいけるもので連結成分の頂点数を数える

11^2とかきたらめんどくさいので121で割れるだけ割る

3^2もめんどくさいので9で割れるだけ割る

それ終わった後は11で割れるならC、3で割れるならA、他のはB

atcoder.jp

 

 

HCPCランダムチーム戦バチャ

A,E,Gを担当

A : A100通り、B100通り、C100通り、で全探索して残りをDでやる

E : 区間DP

dp[l][r][m]で[ l, r)の範囲をm種類目で作ることができるか

G : Z-algorithm

ABABAの最後のBとAの境界を全探索

境界以降のZ-algorithmで求めた値が一致してるか判定

残りの部分がBABになるか判定

個数が確定しているから(残り-A)/2がABラインのZで求めた値がA+Bより大きいか

https://onlinejudge.u-aizu.ac.jp/beta/room.html#HCPC200604/info

 

 

Codeforces Round #647 (Div. 2)

ABCの3完

A :

Aを2で割れるだけ割る、Bを2で割れるだけ割る

A != Bなら-1

A == Bなら2(で割れる回数の差+2)/3

B : 

1 ~ 1023をkにしたときのxorが一致するか全探索

C : 

Nを2のべき乗で割った数を足してく

D : 

システス落ちたカス

難読やめろ

https://codeforces.com/contest/1362