geam1113’s diary

主にAtcoderのコンテストの備忘録を書きます。AtCoder緑と水色を行ったり来たりしています。

ARC124 参加記録

A - LR Constraits

「全ての数字を必ず配置する」という条件があるので、制約iで指定されたk_iには必ずiを配置する必要があります。逆に、k_iにiを置くことにすれば、全ての数字を配置するという条件は満たされます。

ここで、K>Nなら答えは0です。以下、K≦Nとします。ここで、i \neq j \Rightarrow k_i \neq k_jという制約があるので、配置方法は必ず1通り以上存在します。

 

Lであればそれより右側にはiを0個以上配置でき、Rのときはそれが左側について成り立ちます。各制約について、iが配置可能なカードに+1ずつカウントしていきます。各カードに配置する数字の選び方は他のカードとは独立なので、各カードのカウント数の総積をとればそれが答えです。

 提出コード:https://atcoder.jp/contests/arc124/submissions/24537689

B - XOR Matching

重要な事実として以下があります。

 A\ XOR \ B\ XOR\ B = A

これは同じ数で2回XORをとると、その値による影響がなくなるということを意味します。

 

この事実から、xが固定されれば、bの各要素について

 x\ XOR \ b_i=yを満たすyがaに一意に存在するか判定していけばよくなります。

 

xの候補は、aの要素のうち1つを固定し、bの各要素とのXORを全探索すればよいです。

 

WAをたくさん出してしまいましたが、1番はまったのが、条件を満たすxのうち、重複する要素を削除していなかったことでした。

 

提出コード:https://atcoder.jp/contests/arc124/submissions/24541969

 

C - LCM of GCDs

頻出の考え方として「gcdの候補は約数」があり、今回はそれを適用できます。

 

a_1を赤い袋、b_1を青い袋に入れることにすると、赤い袋と青い袋のgcdの組みとしてあり得るのは[a_1の約数の個数]×[b_1の約数の個数]通りに限定されます。

 

ここで、この組み合わせが最大何通りあるか見積もります。 

「10^9以下の高度合成数の約数の個数は1344個」という事実があります。

(参考:https://qiita.com/convexineq/items/e3d599cb9f91a73f936d)

従って、全ての組を全探索しても10^6程度です。

 

約数の組(x,y)が固定されれば、各a_i,\ b_iがx,yのいずれかを約数に持つかどうかを判定し、gcdをとっていくことで、(x,y)の組が実現できるかO(Nlog(max(a_i,b_i)))で判定できます。

 

従って、約数を列挙する部分を除き、最悪でもO({(1344)}^2Nlog(max(a_i,b_i)))でざっくり10^8程度となり、実行時間制限4 secに間に合いそうなのがわかります。

(本番では、実行時間制限を最初見ていなくて、途中で気がつきました)

 

 

 提出コード:https://atcoder.jp/contests/arc124/submissions/24545705