-
C++で最も高いビルボード
ビルボードを設置していて、それを最大の高さにしたいとします。ビルボードには、両側に2つのスチールサポートがあります。各サポートは同じ高さである必要があります。また、溶接可能なロッドのコレクションもあります。したがって、長さ1、2、および3のロッドがある場合は、それらを溶接して長さ6のサポートを作成できます。ビルボードの設置で可能な限り最大の高さを見つける必要があります。ビルボードをサポートできない場合は、0を返します。 したがって、入力が[1,2,2,3,3,3,4]のような場合、[1,2,2,4]や[3,3、 3]。 これを解決するには、次の手順に従います- 合計:=0、n:=ロッ
-
列を削除して、C++でソートされたIIIを作成します
N個の文字列の配列Aがあるとします。各文字列は小文字で構成され、すべて同じ長さです。これで、任意の削除インデックスのセットを選択でき、文字列ごとに、それらのインデックスのすべての文字を削除します。削除後、最終的な配列に辞書式順序のすべての要素が含まれるように、削除インデックスDのセットを取得したとします。シーケンス。 わかりやすくするために、A [0]は辞書式順序(したがって、A [0] [0] <=A [0] [1] <=... <=A [0] [n-1])、A [1 ]は辞書式順序(つまり、A [1] [0] <=A [1] [1] <=... <=A [1] [n-1])などです。 (
-
C++で数値を表現するための最小の演算子
正の整数xがあるとすると、x(op1)x(op2)x(op3)x ...の形式の式を記述します。ここで、op1、op2などは演算子です。また、これらの演算子は、加算、減算、乗算、または除算のいずれかになります。たとえば、x =3の場合、3の値である3 * 3/3 + 3-3と書くことができます。いくつかのルールがありますが、これらは次のとおりです- 除算演算子(/)は有理数を返します。 括弧はどこにも配置されていません。 通常の演算の順序を使用します。乗算と除算は、加算と減算よりも優先されます。 単項否定演算子は許可されていません。 式が指定されたターゲットと等し
-
C++での等しい有理数
2つの文字列があり、これらはそれぞれ正の有理数を表すSとTであると仮定します。これらが同じ数を表すか、現在を表すかを確認する必要があります。文字列は、有理数の繰り返し部分を示すために括弧を使用する場合があります。 有理数は、整数部分、非繰り返し部分、繰り返し部分の最大3つの部分を使用して表すことができることがわかっています。番号は、次の3つの方法のいずれかで表されます- 整数部分のみ(0、12、123など) IntegerPart.NonRepeatingPart(0.5、1.0、2.12、2.001など) )(0.1(6)、0.9(9)、0.00(1212)など) た
-
C++でビット単位でゼロに等しいトリプル
整数Aの配列があるとします。-となるようなインデックス(i、j、k)のトリプルの数を見つける必要があります。 0 <=i
-
C++でK個の異なる整数を持つサブ配列
正の整数の配列Aがあるとすると、そのサブ配列内の異なる整数の数が正確にKである場合、Aの適切なサブ配列(連続)を呼び出すことができます。したがって、配列が[1,2,3,1 、2]には、1、2、3の3つの異なる整数があります。Aの適切なサブ配列の数を見つける必要があります。 したがって、入力が[1,2,3,1,4]のようで、K =3の場合、出力は4になります。これは、正確に4つの異なる整数を持つ3つのサブ配列を形成できるため、これらは[1,2,3 ]、[1,2,3,1]、[2,3,1]、[3,1,4]。 これを解決するには、次の手順に従います- 関数atMost()を定義します。これは
-
C++でのK個の連続するビットフリップの最小数
配列Aがあるとします。これには0と1のみが含まれます。ここで、Kビットフリップは、長さKの(連続した)サブ配列を選択し、同時にサブ配列のビットを反転することで構成されます。配列に0がないように、必要なKビットフリップの最小数を見つける必要があります。そのような可能性がない場合は、-1を返します。 したがって、入力が[0,0,0,1,0,1,1,0]のようで、K =3の場合、最初の試行で3回操作を実行する必要があるため、出力は3になります。 A[0]をA[3]にフリップすると、配列は[1,1,1,1,0,1,1,0]になり、2回目の実行ではA[4]をA[6]にフリップします。 [1,1,1,1
-
C++のSquareful配列の数
正の整数の配列Aがあるとすると、隣接する要素のすべてのペアについて、それらの合計が完全な正方形である場合、配列は平方であると言えます。二乗であるAの順列の数を見つける必要があります。 2つの順列A1とA2は、A1[i]がA2[i]と同じではないようなインデックスiがある場合にのみ、同じにはなりません。 したがって、入力が[3,30,6]の場合、[3,6,30]、[30,6,3]のような2つの順列があるため、出力は2になります。 これを解決するには、次の手順に従います- 関数isSqr()を定義します。これにはnが必要です。 x:=nの平方根 (x * x)がnと同じ場合に
-
C++でストーンをマージするための最小コスト
N個の石の山が一列に並んでいると仮定します。ここで、i番目の山には石[i]個の石があります。移動は、K個の連続する杭を1つの杭にマージすることで構成されます。この移動のコストは、これらのK個の杭の石の総数に等しくなります。すべての石の山を1つの山に統合するための最小コストを見つける必要があります。そのような解決策がない場合は、-1を返します。 したがって、入力が[3,2,4,1]のようで、K =2の場合、出力は20になります。これは、[3、2、4、1]から開始するためです。次に、[3、2]を5のコストでマージすると、[5、4、1]が残ります。その後、5のコストで[4、1]をマージし、[5、5
-
C++で繰り返される数字の数
正の整数Nがあるとすると、少なくとも1つの繰り返し桁を持つN以下の正の整数の数を見つける必要があります。 したがって、入力が99の場合、出力は9になります。これは、11、22、33、44、55、66、77、88、99のような数値があるためです。 これを解決するには、次の手順に従います- 関数A()を定義します。これにはm、n、が必要です。 ret:=1 初期化i:=0の場合、i
-
C++での文字のストリーム
次のようにStreamCheckerクラスを実装するとします- StreamChecker(words)-これはコンストラクターであり、指定された単語でデータ構造を初期化します。 =1の場合、クエリされた最後のk文字(クエリされたばかりの文字を含め、古いものから新しいものの順に)が指定されたリストの単語の1つを綴る場合にtrueを返します。 したがって、入力がword list =[ce、 g、 lm]のような場合は、クエリを何度も呼び出して[a、b、c、e、f、g、h、i、j、k 、l、m]の場合、出力はe、g、mの場合はtrueになり、その他の場合はfalseになります。
-
C++での最長の重複部分文字列
文字列Sがあると仮定し、2回以上発生する重複した連続するすべてのサブ文字列を検討します。 (オカレンスが重複する場合があります。)、可能な限り長い長さの重複したサブストリングを見つける必要があります。そのような部分文字列がない場合は、空白の文字列を返します。答えは非常に大きい可能性があるため、mod 10 ^ 9+7で返します。 したがって、入力が「ababbaba」のような場合、出力は「bab」になります これを解決するには、次の手順に従います- m:=1e9 + 7 関数add()を定義します。これには、a、b、が必要です。 return((a mod m)+(b
-
C++で合計してターゲットになる部分行列の数
行列とターゲット値があるとすると、合計がターゲットと同じである空でないサブマトリックスの数を見つける必要があります。ここで、部分行列[(x1、y1)、(x2、y2)]は、範囲x1とx2にxがあり、範囲y1とy2にyがあるすべてのセルmatrix[x][y]のセットです。 2つの部分行列[(x1、y1)、(x2、y2)]と[(x1、y1)、(x2、y2)]は、座標が異なる場合は異なります。たとえば、x1が異なる場合などです。 x1と同じ。 したがって、入力が次のような場合 0 1 0 1 1 1 0 1 0 target =0の場合、出
-
C++での最短の一般的なスーパーシーケンス
2つの文字列str1とstr2があるとすると、サブシーケンスとしてstr1とstr2の両方を持つ最短の文字列を見つける必要があります。結果は複数ある可能性があるため、そのうちの1つのみを返します。 ご存知のように、文字列Sは、Tからいくつかの文字を削除すると(おそらく0で、文字はTから任意の場所で選択されます)、文字列Sになる場合は文字列Tのサブシーケンスと呼ばれます。 したがって、入力が「acab」、「bac」のような場合、出力は「bacab」になります。これは、指定された2つの文字列がこれのサブシーケンスであるためです。 これを解決するには、次の手順に従います- 関数getLC
-
C++の辞書式順序の最後の部分文字列
文字列としてsがあるとすると、辞書式順序でsの最後の部分文字列を見つける必要があります。 したがって、入力が「abbbcabbc」のような場合、出力は「cabbc」になります これを解決するには、次の手順に従います- i:=0、j:=1、k:=0 j + k
-
C++で配列を厳密に増やす
2つの配列arr1とarr2があり、これらは整数を格納できると仮定します。 arr1を厳密に増やすために必要な操作の最小数を見つける必要があります。ここでは、2つのインデックス0 <=i
-
C++のネットワークにおける重要な接続
n台のサーバーがあるとします。そして、これらは0からn-1まで番号が付けられ、無向のサーバー間接続によって接続され、ネットワークを形成します。ここで、connections [i] =[a、b]はサーバーaとbの間の接続を表します。すべてのサーバーは、直接または他のサーバーを介して接続されています。ここで、重要な接続とは、それが削除されると、一部のサーバーが他のサーバーに到達できなくなる接続です。重要な接続をすべて見つける必要があります。 したがって、入力がn =4で、接続=[[0,1]、[1,2]、[2,0]、[1,3]]、のような場合 その場合、出力は[[1,3]]になります
-
C++で母音の順列を数える
数nが1つあるとすると、これらの規則を使用して、長さnの文字列をいくつ形成できるかを数える必要があります。各文字は小文字の母音です。各母音「a」の後には「e」のみを続けることができます。各母音「e」の後には、「a」または「i」のみを続けることができます。各母音「i」の後に別の「i」を続けることはできません。各母音「o」の後には、「i」または「u」のみを続けることができます。各母音「u」の後には「a」のみを続けることができます。答えが大きすぎる可能性があるため、10 ^ 9+7を法とする答えが見つかります。 したがって、入力が2の場合、出力は10になります。これは、可能なすべての文字列が「ae
-
C++での最大等周波数
正の整数の配列numがあるとすると、指定された配列numの配列プレフィックスの可能な限り長い長さを返す必要があります。これにより、このプレフィックスから1つの要素を削除して、そこに出現するすべての数値が削除されるようになります。同じ頻度です。残りの要素がない場合に1つの要素を削除した後でも、出現するすべての番号は同じ頻度(0)であると見なされます。 したがって、入力が[3,3,2,2,6,4,4,6]の場合、出力は7になります。したがって、インデックス4から要素6を削除すると、サブ配列は[3、 3,2,2,4,4]すべての要素が2回出現しました。 これを解決するには、次の手順に従います-
-
C++でのジョブスケジューリングの最大利益
n個の異なるタスクがあり、すべてのタスクがstartTime[i]からendTime[i]まで実行されるようにスケジュールされていると仮定します。そのタスクでは、利益[i]を得ることができます。 startTime、endTime、および利益のリストがわかっているので、時間範囲が重複するサブセットに2つのタスクがないように、取得できる最大の利益を見つける必要があります。時間Xで終了するタスクを選択すると、時間Xで開始する別のタスクを開始できます。 したがって、入力がstartTime =[1,2,3,3]の場合、endTime=[3,4,5,6]利益=[500,100,400,700]