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

ボールが円管内で衝突する回数を調べるPythonプログラム


円管にn個のボールがあるとします。チューブの長さは100メートルで、最初は、チューブ内の各ボールは、開始点と呼ばれる点から1メートル離れています。これで、ボールはチューブ内をさまざまな方向に循環して移動し始めます。ボールはチューブ内を毎秒0.1メートル移動します。 2つのボールが一点で出会うと、衝突が発生し、ボールの進行方向が変わります。このプロセスが長時間続く場合は、10 ^ 9+6秒としましょう。ボールが衝突した回数を調べる必要があります。開始点からのボールの初期距離が入力として与えられます。

したがって、入力がinput_array =[0、10]のような場合、出力は400000

になります。

ボールは2つあり、スタートラインからの初期距離が入力として与えられます。方向が同じであれば、衝突することはありません。しかし、それらの方向が異なる場合、それらは時々衝突します。 1つのボールが別のボールと正確に400000回衝突します。

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

  • リストinput_arrayを並べ替える
  • size:=input_arrayのサイズ
  • lap_count:=(10 ^ 5)* 2
  • output:=2 * lap_count *(size / 2)のフロア値*(size-(size / 2)のフロア値)
  • 停止:=0
  • 0からサイズ-1の範囲のiの場合、実行します
  • 停止が1と同じでない場合、
    • input_array [i]+1がinput_array[i+ 1]と同じ場合、
      • 出力:=出力+ 2
      • 停止:=1
    • それ以外の場合、
      • 停止:=0
  • それ以外の場合、
    • 停止:=0
  • 出力を返す

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

def solve(input_array):
   input_array.sort()
   size = len(input_array)
   lap_count = (10**5)*2
   output = 2*lap_count*(size//2)*(size - size//2)
   stop = 0
   for i in range(size - 1):
      if stop != 1:
         if input_array[i] + 1 == input_array[i+1]:
            output+=2
            stop = 1
         else:
            stop = 0
      else:
         stop = 0
   return output
print(solve([0, 10]))

入力

[0, 10]

出力

400000

  1. Pythonでgodownに入れることができるボックスの数を調べるプログラム

    整数を含む2つの配列があるとします。 1つのリストには、いくつかのユニット幅ボックスの高さが含まれ、別の配列には、godownの部屋の高さが含まれます。部屋には0...nの番号が付けられ、部屋の高さは配列godownのそれぞれのインデックスに示されます。ゴダウンに押し込める箱の数を調べなければなりません。いくつかの点に注意する必要があります ボックスを重ねることはできません。 ボックスの順序は変更できます。 ボックスは、左からでも右からでも、どの側からでもゴダウンに入れることができます。ボックスが部屋の高さよりも高い場合、そのボックスとその右側のすべてのボックスをゴダウンに押

  2. カットされたキューブの数を調べるPythonプログラム

    次元a、b、およびcのいくつかの立方体があり、それらを使用して、次元axbxcの新しいボックスが作成されたとします。 a、b、およびcは互いに素です。 gcd(a、b)=gcd(b、c)=gcd(c、d)=1.図に示すように、ボックスを1つのスライスで2つに切断する必要があります。箱がこのようにカットされているかどうか、いくつの立方体が2つのピースにカットされているかを確認する必要があります。可能な3次元を含む配列が提供されており、そこから答えを見つける必要があります。 カットは、頂点P、Q、およびRを通過する平面になるようにこのように行われます。 したがって、入力がn =3、inp