コンテスト中に改善を試みるためにランダムな TopCoder の問題を調べています。
問題文
テディはバラが大好きで、トレーシーはユリが大好きです。彼らはこれらの花を広い庭に植えたいと思っています。
vector<int>
しかし、町で唯一の花屋は、これらの花をバラとユリで表されたパケットで販売しています. i 番目のパケットには、roses[i] のバラと lilies[i] のユリが含まれています。各パケットは1回のみ購入できます。
Teddy と Tracy は、いくつかの花を購入し、それらを長方形のグリッドに配置したいと考えています。このグリッドは、各セルが正確に 1 つの花を含み、エッジを共有する 2 つのセルが異なる種類の花を含むように配置する必要があります。さらに、テディとトレーシーは、購入したすべての花を使用する必要があります。
Teddy と Tracy は正方形のグリッドが大好きなので、花をできるだけ正方形のグリッドに配置できるように、パケットのセットを購入したいと考えています。より正確には、花を R x C グリッドに配置したいと考えています。ここで、R と C は正の整数で、|RC| となります。(|RC| は RC の絶対値) を最小化します。この最小絶対値を返すか、有効な配置が存在しない場合は -1 を返します。
意味
クラス: BuyingFlowers
方法: buy
パラメーター: vector <int>, vector <int>
戻り値: int
メソッドの署名: int buy(vector <int> roses, vector <int> lilies)
例
{2, 4}
{4, 2}
戻り値: 1
6 つのバラと 6 つのユリを得るためにすべてのパケットを購入すると、次の配置で 3 x 4 グリッドを作成できます。
RLRL
LRLR
RLRL
この配置の高さと幅の差は 1 です。
これまでの私の考え
そのため、これまでにこの問題についていくつかの考えを持っていたので、それを解決するために重要であると考えています。それらは無視してかまいません。
花によって作成されたすべての長方形には、周囲に偶数のバラとユリがあります。したがって、花で作成できる最大の長方形は、2 つのうち小さい方の数量を取ることで見つけることができます。たとえば、6 つのバラと 4 つのユリがある場合、ユリは 4 つしかないため、作成できる最大サイズの長方形には 4 つが含まれます。バラと 4 つのユリ。
課題は、長方形の各セルを花で埋めなければならないことを考慮すると明らかに発生するため、花の数を考慮して、両方を満たす「最適な」長方形を見つける必要があります。残りの花が存在するための「セル」、および可能な限り正方形に近い.
投稿されたソリューションのいくつかを見てきましたが、コードは非常に難読化され、最適化されている傾向があり (すばやく書くという点で)、作成者がソリューションに対して念頭に置いていた概念を抽出するのが難しい傾向があります。
このような問題をすばやく解決する方法について学びたいと思います。