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

C++でのストレートの手


リマが整数の配列として与えられたカードの手を持っていると仮定します。ここで、彼女はカードをグループにシャッフルして、各グループのサイズがWで、連続するW枚のカードで構成されるようにします。可能かどうかを確認する必要があります。

したがって、カードが[1,2,3,6,2,3,4,7,8]であり、W =3の場合、彼女は[1,2,3]のようにカードを再配置できるため、答えは真になります。 、[2,3,4]、[6,7,8]

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

  • マップmを定義し、手にある各要素の頻度をmに保存します
  • 手のサイズは0ではありません
    • prev:=0
    • it:=mの最初のキーと値のペアへのポインタ
    • 0からW–1の範囲のiの場合
      • 値が0の場合、:=次のペアを指します
      • i> 0で、そのキー– 1=prevまたはi=0の場合、
        • 値を1つ減らします
        • prev:=キー
      • それ以外の場合はfalseを返します
      • it:=次のペアを指す
    • n:=n – W
  • trueを返します。

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   bool isNStraightHand(vector<int>& hand, int W) {
      map <int, int> m;
      int n = hand.size();
      if(n % W != 0) return false;
      for(int i = 0; i < n; i++){
         m[hand[i]]++;
      }
      while(n){
         map <int, int> :: iterator it = m.begin();
         int prev = 0;
         for(int i = 0; i < W; i++){
            while(it->second == 0) it++;
            if((i > 0 && it->first - 1 == prev) || i == 0){
               it->second--;
               prev = it->first;
            }else{
               return false;
            }
            it++;
         }
         n -= W;
      }
      return true;
   }
};
main(){
   vector<int> v = {1,2,3,6,2,3,4,7,8};
   Solution ob;
   cout << (ob.isNStraightHand(v, 3));
}

入力

[1,2,3,6,2,3,4,7,8]
3

出力

1

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

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

  2. C++の長方形エリアII

    (軸に沿った)長方形のリストがあるとします。ここで、各rectangle [i] ={x1、y1、x2、y2}です。ここで、(x1、y1)は左下隅のポイントであり、(x2、y2)は右上隅のポイントです。 i番目の長方形。 平面内のすべての長方形でカバーされる総面積を見つける必要があります。答えは非常に大きい可能性があるため、モジュロ10 ^ 9+7を使用できます。 したがって、入力が次のような場合 その場合、出力は6になります。 これを解決するには、次の手順に従います- m =10 ^ 9 + 7 関数add()を定義します。これには、a、b、が必要です。 r