pitsuの精進日記

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

今日の精進 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