Tenka1 Programmer Contest (2018) D - Crossing
問題
提出コード
今のところ、500点の構築問題は自分と相性がいいみたいで全勝中です(数問しかやったことないですが)
解法
の個数を、そしての個数をとすると、
自動的にとなります。自分以外の集合と、ちょうど1つずつ共通部分が存在するからです。また、~それぞれについて、どこか1組の集合のペアについて、共通部分を作成できます。
これは小さい方から実験していくと規則性が見えてきます。を決めたときに、は自動的に決まります。
のとき
これは、のとき作成できます。のとき
となります。
これはサンプルに存在する例です。のとき
となります。
のときのサンプルから、あらたにを用意し、それまでの~それぞれとに、同じ数字を入れていけば完了です(例えば、とに4を、とに5を、とに6をいれるとできます)。
これ以降も、のとき、を新たに用意し、すでにある集合それぞれと数字のペアを入れていけば条件を満たすことができます。この時、の条件は、
となります。
あとは、作成方法に従ってうまいことつくると、答えを導くことができます。次に追加する数字を記録しておき、forの二重ループを利用してやると賢い作成方法になるかと思います(Twitterで見かけたアイデアです、自分のコードはもう少し汚いです)。