タイトルを見てください:
詳細[思考]:
まず第一に、私たちは、この質問は確かに単純なアルゴリズム(再生されている第一の反応ことがわかり怠惰な暴力 +)、この問題への肯定的な解決策が起こった剪定をシミュレートすることです
我々は、シミュレーション、今すぐ初期値2(グループへの相系列を作成参照)、このシーケンスの各段階は、現在のグループに分割し、各フェーズに分割に従ってタイトルを記述することを意図しこのグループの最後尾に各グループの最初の要素。その60分を再生するには複雑さはO(N ^ 2)程度である時、非常に良い戦いは、確かに問題ありませんが、あなたはタイトルがいくつかのACプルーニングを作るためにしたい場合は100ポイントは、それを取得する方法です私たちは宇宙のこの質問を見ているので:524288キロバイトは、非常に大きな、私たちは時間のための貿易スペースの考え方に沿って最適化されています。
私たちは、主に、純粋な暴力の原因は、各グループの他の要素と要素の開始は、このグループが前方に移動するグループの最後に移動した後、ゆっくりと、そして私たちは、もちろん非常に遅い位置を変更するforループを使用することを発見しました私たちは、この点で最適化し始めました。要素が尾を置く必要があり、各グループで見つけることができ、我々は次のグループの最初の位置にこのグループの最初の要素を入れて、その後、次のグループの最初の要素は次のセットを置きます最初のものは、そのようなグループは、我々はスペースを開くので、我々は要素を移動することはできません、とだけ最後のグループでうまく行くように、最後のグループに最初の要素のためのスペースを開く必要が我々これは、ACとなり、全パケットのn-1回、あなたはO(nlogn)の時間複雑性を落とすことができるように二倍のオープンスペース私たちは、好きではないが必要です。
以下のコードの場合:
書式#include <iostreamの> の#include <cstdioを> 使用して 名前空間はstdを、 int型 HI、LO、今、nは、[ 2000010 ] = { 0 }、ボット。// 空间2倍 ボイド変化(){ // 进行分组 ボット= [LO]。// 暂时存放 ため(int型 I = 1.0; I <= HI; iが+ = NOW){ 場合(私は今+> HI){ [ ++ HI] = ボット。 LO ++ ; 破ります; } スワップ(BOT、[私は今+])。// 交换 } } int型のmain(){ CIN >> N。 今 = 2 ; LO = 1 = Nこんにちは。// 用LO、HI标记现在的开头和结尾元素位置 のための(int型 i = 1 ; iが<= N; iが++)[I] = I。 一方、(今<= N){ 変化()。 今 ++ ; } のための(int型 I = 1.0; I <= HI; iは++)COUT << [I] << " " 。 }
概要:これは、洪水の問題であり、あなたは慎重にACが(もちろん、私WAので40ポイント、頭脳を持っている必要が)することができます。