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

C++でのミーティングスケジューラ


2人のスロット1とスロット2の可用性タイムスロットリストと会議期間dがあるとすると、両方で機能し、期間dの最も早いタイムスロットを見つける必要があります。要件を満たす共通のタイムスロットがない場合は、空の配列を表示します。ここで、タイムスロットの形式は、開始から終了までの包括的な時間範囲を表す2つの要素[start、end]の配列です。同じ人の2つの可用性スロットが互いに交差していないと想定できます。つまり、同じ人物の任意の2つのタイムスロット[s1、e1]および[s2、e2]に対して、s1>e2またはs2>eのいずれかです。したがって、入力がs1 =[[10,50]、[60,120]、[140,210]]、s2 =[[0,15]、[60,70]]、期間=8の場合、出力は[ 60,68]。

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

  • i:=0およびj:=0、1つの配列ansを作成し、s1およびs2を並べ替えます。
  • whilei
  • end:=s1 [i、1]とs2 [j、1]の最小値
  • start:=s1 [i、0]とs2 [j、0]の最小値
  • 終了–開始> =期間の場合、
    • startと(start + duration)をans配列に挿入し、ansを返します。
  • それ以外の場合、s1 [i、1]
  • それ以外の場合は、jを1増やします
  • 回答を返す
  • 理解を深めるために、次の実装を見てみましょう-

    #include <bits/stdc++.h>
    using namespace std;
    void print_vector(vector<auto> v){
       cout << "[";
       for(int i = 0; i<v.size(); i++){
          cout << v[i] << ", ";
       }
       cout << "]"<<endl;
    }
    using namespace std;
    bool cmp(vector <int> a, vector <int> b){
       return a[0]<b[0];
    }
    class Solution {
       public:
       vector<int> minAvailableDuration(vector<vector<int>>& slots1, vector<vector<int>>& slots2, int duration) {
          int i =0;
          int j = 0;
          vector <int> ans;
          sort(slots1.begin(),slots1.end(),cmp);
          sort(slots2.begin(),slots2.end(),cmp);
          while(i<slots1.size() && j<slots2.size()){
             int end = min(slots1[i][1],slots2[j][1]);
             int start = max(slots1[i][0],slots2[j][0]);
             if(end-start>=duration){
                ans.push_back(start);
                ans.push_back(start+duration);
                return ans;
             } else if(slots1[i][1]<slots2[j][1]) {
                i++;
             } else {
             j++;}
          }
          return ans;
       }
    };
    main(){
       vector<vector<int>> v = {{10,50},{60,120},{140,210}};
       vector<vector<int>> v1 = {{0,15},{60,70}};
       Solution ob;
       print_vector(ob.minAvailableDuration(v, v1, 8));
    }

    入力

    [[10,50],[60,120],[140,210]]
    [[0,15],[60,70]]
    8

    出力

    [60, 68, ]

    1. C++でプロセスを強制終了します

      n個のプロセスがあるとします。ここでは、各プロセスにPIDまたはプロセスIDと呼ばれる一意のIDがあり、そのPPID(親プロセスID)もそこにあります。 各プロセスには1つの親プロセスしかありませんが、1つ以上の子プロセスがある場合があります。 これは木の構造のようなものです。 PPID =0のプロセスは1つだけです。これは、このプロセスに親プロセスがないことを意味します。すべてのPIDは一意の正の整数になります。 プロセスのリストを表すために2つの整数のリストを使用します。最初のリストには、各プロセスのPIDが含まれ、2番目のリストには対応するPPIDが含まれます。したがって、2つのリ

    2. C++でのリスのシミュレーション

      木、リス、そしていくつかのナッツがあります。位置は、2Dグリッドのセルで表されます。あなたの目標は、リスがすべてのナッツを集めて、それらを1つずつ木の下に置くための最小距離を見つけることです。リスは一度に最大で1つのナットしかとることができず、隣接するセルに向かって上下左右の4つの方向に移動できます。距離は移動回数で表されます。 したがって、入力が高さ:5幅:7木の位置:[2,2]リス:[4,4]ナッツ:[[3,0]、[2,5]]の場合、出力は12になります。 、 これを解決するには、次の手順に従います- 関数calc()を定義します。これには、x1、y1、x2、y2、が必要で