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

マンハッタン距離の合計がC++で最小になるような点を見つけます


K次元空間にn個の異なる点があり、nの値が範囲(2、105)にあり、kの値が範囲(1〜5)にあるとします。結果の点からn点までのマンハッタン距離の合計が最小になるように点を決定する必要があります。

2点P1(x1、y1)とP2(x2、y2)の間のマンハッタン距離は| x1 –x2|です。 + | y1 –y2|。次元が3で、(1、1、1)、(2、2、2)、(3、3、3)のような3つのポイントがあるとすると、出力は(2、2、2)になります。

この問題を解決するには、すべてのK次元の点を並べ替え、各k次元の中央の要素から出力を取得する必要があります。

#include<iostream>
#include<vector>
#include<cmath>
#include<algorithm>
using namespace std;
void minimizeHanhattan(int n, int k, vector<vector<int> >& pointList) {
   for (int i = 0; i < k; ++i) //sort in all k dimension
      sort(pointList[i].begin(), pointList[i].end());
   for (int i = 0; i < k; ++i)
      cout << pointList[i][(ceil((double)n / 2) - 1)] << " ";
}
int main() {
   int n = 4, k = 4;
   vector<vector<int> > point = { { 1, 5, 2, 4 },
      { 6, 2, 0, 6 },
      { 9, 5, 1, 3 },
      { 6, 7, 5, 9 } };
   minimizeHanhattan(n, k, point);
}

出力

2 2 3 6

  1. Xのような最小数Xを見つけてください! C++では少なくともY個の末尾のゼロが含まれています

    数Yを取る必要があります、Xのような最小の数Xを見つけます!少なくともY個のトレーニングゼロが含まれています。たとえば、Y =2の場合、Xの値は10です。Xとして! =3228800。Y個のゼロがあります。 二分探索を使用してこれを解決できます。 Nの後続ゼロの数! N!の因数5の数で与えられます。 Xは、範囲[0、5 * Y]で二分探索を使用して見つけることができます。 例 #include<iostream> using namespace std; int factorCount(int n, int X) {    if (X < n) &nb

  2. C ++でa%b =kとなるような配列内のすべてのペア(a、b)を検索します

    配列Aがあるとすると、その配列から、a%b =kとなるようにすべてのペア(a、b)を取得する必要があります。配列がA=[2、3、4、5、7]、k =3であるとすると、ペアは(7、4)、(3、4)、(3、5)、(3、7)になります。 これを解決するために、リストをトラバースして、指定された条件が満たされているかどうかを確認します。 例 #include <iostream> using namespace std; bool displayPairs(int arr[], int n, int k) {    bool pairAvilable = true;