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

タスクスケジューラnC++


CPUが実行する必要のあるタスクを表すchar配列があるとします。これには大文字のAからZが含まれ、異なる文字は異なるタスクを表します。タスクは、元の順序なしで実行できます。各タスクは1つの間隔で実行できます。間隔ごとに、CPUは1つのジョブを終了するか、単にアイドル状態になる可能性があります。ただし、nと呼ばれる非負の冷却間隔があります。これは、2つの同じタスクの間に、CPUが異なるタスクを実行している、または単にアイドル状態になっている間隔が少なくともn個ある必要があることを意味します。指定されたすべてのタスクを完了するためにCPUが取る間隔の最小数を見つける必要があります。したがって、入力が[A、A、A、B、B、B]で、nが2の場合、出力は8になります。A→B→アイドル→A→B→アイドル→A→B

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

  • マップmを作成し、タスク配列に格納されているすべての文字の頻度を格納します

  • 優先キューpqを定義する

  • mに存在するキーと値のペアごとに、頻度値をpqに挿入します

  • ans:=0、サイクル:=n + 1

  • pqが空ではない間

    • アレイの温度を定義し、時間を設定します:=0

    • 範囲0のiの場合、pqは空ではなく、i −サイクル

      • pqのtop要素をtempに挿入し、topをpqから削除し、tempを1増やします

    • 0から温度のサイズまでの範囲のiの場合

      • temp[i]を1つ下げます

      • temp [i]が0でない場合は、temp[i]をpqに挿入します

    • ans:=ans + pqが空の場合の時間、それ以外の場合はサイクル

  • ansを返す

例(C ++)

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int leastInterval(vector<char>& t, int n) {
      map <char,int> m;
      for(int i =0;i<t.size();i++){
         m[t[i]]++;
      }
      map <char, int> :: iterator i = m.begin();
      priority_queue <int> pq;
      while(i != m.end()){
         pq.push(i->second);
         i++;
      }
      int ans = 0;
      int cycle = n + 1;
      while(!pq.empty()){
         vector <int> temp;
         int time = 0;
         for(int i = 0; !pq.empty() && i < cycle; i++){
            temp.push_back(pq.top());
            pq.pop();
            time++;
         }
         for(int i = 0;i < temp.size(); i++){
            temp[i]-- ;
            if(temp[i])pq.push(temp[i]);
         }
         ans += pq.empty()? time : cycle;
      }
      return ans;
   }
};
main(){
   vector<char> v = {'A','A','A','B','B','B'};
   Solution ob;
   cout << (ob.leastInterval(v, 2)) ;
}

入力

{'A','A','A','B','B','B'}
2

出力

8

  1. Windowsタスクスケジューラでスケジュールされたタスクの名前を変更する方法

    Windowsタスクスケジューラ は、定期的に実行するタスクの実行を自動化できるため、おそらく最も便利ですが、あまり使用されていないMicrosoftWindowsの機能の1つです。これにより、オペレーティングシステムは重要なシステムタスクをスケジュールできるだけでなく、電子メールの送信、シャットダウンのスケジュール設定、PCのスリープからの復帰、Windows Defenderの更新、Windowsの発言、曲の再生などを行うことができます。 Windowsタスクスケジューラで多数のタスクを設定している場合は、タスクを認識するために、簡潔な説明と簡単なタイトルを書く必要があります。問題は、

  2. Windows 10 で壊れたタスク スケジューラを修正する

    オペレーティング システムを最近アップグレードまたはダウングレードした場合タスク スケジューラが壊れているか、上記のプロセスで破損している可能性があります。Tak スケジューラを実行しようとすると、「タスク XML には、形式が正しくないか、範囲外の値が含まれています」または「タスクに含まれる値が含まれています」というエラー メッセージが表示されます。予期しないノードです。」いずれにせよ、タスク スケジューラを開くとすぐに同じエラー メッセージのポップアップが多数表示されるため、タスク スケジューラをまったく使用できません。 タスク スケジューラを使用すると、ユーザーが設定した特定のトリガ