ボールが円管内で衝突する回数を調べる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
- input_array [i]+1がinput_array[i+ 1]と同じ場合、
- それ以外の場合、
- 停止:=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
-
Pythonでgodownに入れることができるボックスの数を調べるプログラム
整数を含む2つの配列があるとします。 1つのリストには、いくつかのユニット幅ボックスの高さが含まれ、別の配列には、godownの部屋の高さが含まれます。部屋には0...nの番号が付けられ、部屋の高さは配列godownのそれぞれのインデックスに示されます。ゴダウンに押し込める箱の数を調べなければなりません。いくつかの点に注意する必要があります ボックスを重ねることはできません。 ボックスの順序は変更できます。 ボックスは、左からでも右からでも、どの側からでもゴダウンに入れることができます。ボックスが部屋の高さよりも高い場合、そのボックスとその右側のすべてのボックスをゴダウンに押
-
カットされたキューブの数を調べる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