-
C++でのツリーの距離の合計
N個のノードが存在する1つの無向の接続されたツリーがあるとします。これらは0...N-1としてラベル付けされ、N-1エッジが与えられます。 i番目のエッジは、ノードedges[i][0]とedges[i][1]を接続します。 ans[i]がノードiと他のすべてのノード間の距離の合計であるリストを見つける必要があります。 したがって、入力がN =6で、エッジ=[(0,1)、(0,2)、(2,3)、(2,4)、(2,5)]の場合、出力は次のようになります。 [8,12,6,10,10,10] これを解決するには、次の手順に従います- 関数dfs1()を定義します。これは、ノード、親、を
-
C++の同様の文字列グループ
2つの文字列XとYがあるとします。これらは、Xの2つの文字を入れ替えて、Yに等しくなる場合は類似しています。また、2つの文字列XとYは、等しい場合は類似しています。例として、2つの文字列が「tars」と「rats」に似ていると考えてください。tとrを入れ替えると、別の文字列を見つけることができます。「rats」と「arts」は似ていますが、「star」は似ていません。 「tars」、「rats」、または「arts」に似ています。これで、{tars、 rats、 arts}、{star}という類似性によって2つの接続されたグループが形成されていることがわかります。ここで、「tars」と「arts
-
C++のすべてのノードを訪問する最短経路
N個のノードを持つ1つの無向の連結グラフがあると仮定します。これらのノードには、0、1、2、...、N-1のラベルが付けられます。グラフの長さはNになり、ノードiとjが接続されている場合に限り、jはリストgraph[i]にあるiと同じではありません。すべてのノードを訪問する最短経路の長さを見つける必要があります。任意のノードで開始および停止でき、ノードを複数回再訪でき、エッジを再利用できます。 したがって、入力が[[1]、[0,2,4]、[1,3,4]、[2]、[1,2]]の場合、出力は4になります。パスは[0,1,4,2,3]です。 これを解決するには、次の手順に従います- 1つの
-
K-C++の類似した文字列
2つの文字列AとBがあるとします。これらの2つの文字列は、Aの2つの文字の位置を正確にK回入れ替えて、結果の文字列がBになる場合、Kに似ています(Kは1つの非負の整数)。 2つのアナグラムAとB、AとBがKに類似している最小のKを見つける必要があります。 したがって、入力がA =abc、B =bacの場合、出力は2になります。 これを解決するには、次の手順に従います- 関数swapp()を定義します。これには、文字列s、i、j、が必要です。 x:=s [i]、y:=s [j] s [i]:=y、s [j]:=x メインの方法から、次のようにします- AがB
-
C++でK人の労働者を雇うための最小コスト
N人の労働者がいると仮定します。各ワーカーには品質パラメーターがあります。 i番目の労働者は質[i]と最低賃金期待賃金[i]を持っています。今度はK人の労働者を雇って有給のグループを作りたいと思います。 K人の労働者のグループを雇用する場合、次の規則に従って彼らに支払う必要があります- 有給グループの各労働者は、有給グループの他の労働者と比較することにより、質の比率で支払われるべきです。 有給グループのすべての労働者は、少なくとも最低賃金の期待を支払わなければなりません。 上記の条件を満たす有料グループを形成するために必要な最小限の金額を見つける必要があります。 したがって
-
C++で最小Kの合計を持つ最短のサブアレイ
配列Aがあるとします。合計が少なくともKであるAの最短で空でない連続したサブ配列の長さを見つける必要があります。そのようなサブ配列がない場合は、-1を返します。 =6 を見るとわかるように、出力は2になります。 これを解決するには、次の手順に従います- n:=Aのサイズ ans:=n + 1、j:=0、sum:=0 1つのdequedqを定義する 初期化i:=0の場合、i
-
C++での給油停止の最小数
開始位置から開始位置からtマイル東にある目的地まで移動する車があるとします。 現在、多くのガソリンスタンドがあります。したがって、各ステーション[i]は、開始位置から東にステーション[i] [0]マイルのガソリンスタンドを表し、そのステーションにはステーション[i][1]リットルのガスがあります。 車が無限のサイズのガスタンクで始動する場合、最初はstartFuelリットルの燃料が入っています。走行距離1マイルあたり1リットルのガスを使用します。 車が1つのガソリンスタンドに到着すると、停止して給油する可能性があるため、すべてのガスをステーションから車に転送します。目的地に到達するために
-
C++での収益性の高いスキーム
G人のギャングと彼らが犯す可能性のあるさまざまな犯罪のリストがあるとします。 i番目の犯罪は利益価値利益[i]を生み出し、グループ[i]のギャングメンバーが参加する必要があります。 ギャングのメンバーがある犯罪に参加している場合、彼は別の犯罪に参加することはできません。ここで、少なくともPの利益を生み出すこれらの犯罪のサブセットを収益性の高いスキームと定義しましょう。その犯罪のサブセットに参加しているメンバーの総数は、最大でGです。 いくつのスキームを選択できるかを見つける必要がありますか?答えは非常に大きい可能性があるため、10 ^ 9+7を法として返します。 したがって、入力がG =
-
C++でのスーパーエッグドロップ
K個の卵を与え、1からNまでのN階の建物があるとします。これで、各卵の機能は同じになり、卵が壊れた場合、再び落とすことはできません。 Fより高い階に落とされた卵は壊れず、F階以下に落とされた卵は壊れないように、0からNの間のF階が存在します。それぞれの動きで、私たちは卵を取り、それを任意のフロアXから落とすことができます。Xは1からNの範囲にあります。 私たちの目標は、Fの値が何であるかを確実に知ることです。では、Fの初期値に関係なく、Fが何であるかを確実に知る必要がある最小移動数はいくつになるでしょうか? したがって、入力がK=2およびN=6のような場合、出力は3になります。 これを
-
C++でのサブシーケンス幅の合計
整数の配列Aがあると仮定し、Aのすべての空でないサブシーケンスを検討します。任意のシーケンスSについて、Sの幅をSの最大要素と最小要素の差と見なします。 Aのすべてのサブシーケンス。答えは非常に大きい可能性があるため、10 ^ 9+7を法として答えを返します。 したがって、入力が[3,1,2]の場合、出力は6になります。これは、サブシーケンスが[1]、[2]、[3]、[2,1]、[2、 3]、[1,3]、[2,1,3]で、幅は0、0、0、1、1、2、2なので、幅の値の合計は6です。 これを解決するには、次の手順に従います- 関数add()を定義します。これには、a、b、が必要です。
-
C++での最大周波数スタック
FreqStackと呼ばれる1つのスタックを実装したいとします。FreqStackには2つの関数があります- push(x)、これは整数xをスタックにプッシュします。 pop()、これはスタック内で最も頻繁な要素を削除して返します。同じ頻度の要素が複数ある場合は、スタックの最上位に最も近い要素が削除されて返されます。 したがって、入力が7、9、7、9、6、7などの要素をプッシュするようなものである場合、ポップ操作を4回実行すると、出力はそれぞれ7、9、7、6になります。 これを解決するには、次の手順に従います- 1つのマップcntを定義する 1つのマップstsを
-
C++での整然としたキュー
文字列Sがあるとします。Sのすべての文字は小文字です。その後、いくつでも移動できます。 ここでは、各移動で、最初のK文字の1つを選択して削除し、文字列の最後に配置します。任意の数の移動の後に持つことができる辞書式順序で最小の文字列を見つける必要があります。 したがって、入力が「cabaa」のようで、K =3の場合、出力は「aaabc」になります これを解決するには、次の手順に従います- 1の場合、- 配列Sを並べ替える Sを返す ret:=S n:=Sのサイズ 初期化i:=1の場合、i
-
C++で設定された最大N個の数字
ソートされた数字のセットDが1つあり、{1、 2、 3、 4、 5、 6、 7、 8、の空でないサブセットがあるとします。 9} 0を除く。ここで、これらの数字を使用して、各数字を必要な回数だけ使用して、いくつかの数字を書き込みます。したがって、D ={2、 3、 7}の場合、 23、 771、2372327などの数字を書くことができます。 ここで、N以下の書き込み可能な正の整数の数を見つける必要があります。 したがって、入力がD =[2,3,4,7]、N =100の場合、数値は2、3、4、7、22、23、24、27になる可能性があるため、出力は20になります。 、32、33、34、37、
-
C++でのDIシーケンスの有効な順列
文字列Sがあるとします。これは、セット{D、I}の文字列です。 (Dは「減少」を意味し、Iは「増加」を意味します) ここで、有効な順列が{0からn}の整数の順列P [0]、P [1]、...、P [n]であると考えてください。これにより、すべてのiについて、次のルールが満たされます。 P [i + 1]; それ以外の場合、S [i] ==Iの場合、P [i]
-
C++のスーパーパリンドローム
正の整数Nがあるとします。これは、回文の場合はスーパーパリンドロームと呼ばれ、回文の2乗でもあります。ここで、2つの正の整数LとRがあると考えて、[L、R]の包括的範囲内のスーパーパリンドロームの数を見つける必要があります。 したがって、入力がL=5およびR=500のような場合、出力は3になり、スーパーパリンドロームは9、121、484になります。 これを解決するには、次の手順に従います- 関数helper()を定義します。これには、x、m、M、lb、ub、が必要です。 ubの場合、- 戻る =lbであり、(x * x)が回文である場合、- (ansを1増
-
C++の音楽プレイリストの数
N個の異なる曲を含む音楽プレーヤーがあり、旅行中にL個の曲を聴きたいとします。したがって、これらの条件を満たすようにプレイリストを作成する必要があります- すべての曲が少なくとも1回再生されます 曲を再度再生できるのは、他のK曲が再生された場合のみです。 可能なプレイリストの数を見つける必要があります。答えは非常に大きくなる可能性があるため、10 ^ 9+7を法として返します。 したがって、入力がN =2、L =3、K =0の場合、6つの可能なプレイリスト[1,1,2]、[1,2,1]、[2]があるため、出力は6になります。 、1,1]、[2,2,1]、[2,1,2]、[1
-
C++の3つの等しい部分
0と1の配列Aが1つあるとすると、これらの部分がすべて同じバイナリ値を表すように、配列を3つの空でない部分に分割する必要があります。それが可能な場合は、i + 1
-
C++の個別のサブシーケンスII
文字列Sがあるとすると、Sの個別のサブシーケンスの数をカウントする必要があります。結果は大きくなる可能性があるため、10 ^ 9+7を法とする答えを返します。 したがって、入力が「bab」のような場合、出力は6になります。これは、「a」、「b」、「ba」、「ab」、「bb」、「abb」の6つの異なるシーケンスがあるためです。 これを解決するには、次の手順に従います- 関数add()を定義します。これには、a、b、が必要です。 return((a mod MOD)+(b mod MOD))mod MOD 関数sub()を定義します。これには、a、b、が必要です。
-
C++で最短のスーパーストリングを見つける
文字列の配列Aがあるとすると、Aの各文字列をサブ文字列として含む最小の文字列を見つける必要があります。また、Aの文字列がAの別の文字列のサブ文字列ではないと想定することもできます。 したがって、入力が[dbsh、 dsbbhs、 hdsb、 ssdb、 bshdbsd]の場合、出力は hdsbbhssdbshdbsdになります。 これを解決するには、次の手順に従います- 関数calc()を定義します。これには、a、b、が必要です。 初期化i:=0の場合、i
-
C++の公約数による最大コンポーネントサイズ
一意の正の整数の配列Aがあるとします。次に、次のグラフを検討します- A個のノードの長さがあり、これらにはA[0]からA[Aのサイズ-1]のラベルが付いています。 A[i]とA[j]が1より大きい共通因子を共有する場合、A[i]とA[j]の間にエッジがあります。グラフで最大連結成分のサイズを見つける必要があります。 したがって、入力が[4,6,15,35]の場合、出力は4になります。 これを解決するには、次の手順に従います- 配列の親を定義する 配列ランクを定義する 配列ランクを定義する parent [x]が-1と同じ場合、- xを返す retu