C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

円形の駅から最短距離を取得するためのC++コード


2つの数値sとtがあり、n個の要素を持つ別の配列Dがあるとします。ドリームランド地下鉄の円線には、n個の異なる駅があります。隣接するステーションのすべてのペア間の距離がわかっています。D[i]はステーションiとi+1の間の距離であり、D [n-1]は(n-1)と0番目のステーションの間の距離です。 sからtまでの最短距離を見つける必要があります。

したがって、入力がs=1のような場合。 t =3; D =[2、3、4、9]の場合、出力は5になります。

ステップ

これを解決するには、次の手順に従います-

n := size of D
Define an array arr of size (n + 1), and fill with 0
for initialize i := 1, when i <= n, update (increase i by 1), do:
   arr[i] := D[i - 1]
   sum1 := sum1 + arr[i]
if s > t, then:
   swap s and t
for initialize i := s, when i < t, update (increase i by 1), do:
   sum2 := sum2 + arr[i]
return minimum of sum2 and (sum1 - sum2)

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
int solve(int s, int t, vector<int> D){
   int n = D.size(), sum1 = 0, sum2 = 0;
   vector<int> arr(n + 1, 0);
   for (int i = 1; i <= n; i++){
      arr[i] = D[i - 1];
      sum1 += arr[i];
   }
   if (s > t)
      swap(s, t);
   for (int i = s; i < t; i++)
      sum2 += arr[i];
   return min(sum2, sum1 - sum2);
}
int main(){
   int s = 1;
   int t = 3;
   vector<int> D = { 2, 3, 4, 9 };
   cout << solve(s, t, D) << endl;
}

入力

1, 3, { 2, 3, 4, 9 }

出力

5

  1. C++でのターゲットカラーまでの最短距離

    配列の色があり、1、2、3の3色があるとします。いくつかのクエリを実行しました。各クエリは2つの整数iとcで構成されており、指定されたインデックスiとターゲットカラーcの間の最短距離を見つける必要があります。解決策がない場合は、-1を返します。したがって、colors配列が[1,1,2,1,3,2,2,3,3]のようであり、querys配列が[[1,3]、[2,2]、[6,1]のようである場合]]、出力は[3,0,3]になります。これは、インデックス1から最も近い3がインデックス4(3ステップ離れている)にあるためです。次に、インデックス2から最も近い2は、インデックス2自体にあります(0ステ

  2. C++で特定のノードから距離kにあるすべてのノードを出力します

    この問題では、二分木、ターゲットノード、整数Kが与えられます。ターゲットノードから距離Kにあるツリーのすべてのノードを印刷する必要があります。 。 二分木 は、各ノードに最大2つのノード(1つまたは2つ/なし)を持つ特別なツリーです。 問題を理解するために例を見てみましょう K =2 ターゲットノード:9 出力 − 5 1 3. 説明 − 距離は、ノードの上位、下位、または同じレベルで取得できます。したがって、それに応じてノードを返します。 この問題を解決するには、ターゲットノードからK距離離れたノードのタイプを理解する必要があります。 上記の試験から、k個の離