Problem:
ガソリンスタンド

　

白虎サービスエリアのガソリンスタンドには、$1$から$N$の番号が割り当てられた$N$個のレーンがあります。各レーンの先頭の車が給油を行うことができます。

ガソリンスタンドに入場した車は、並んでいる車が最も少ないレーンを選び列の末尾に並びます。そのようなレーンが複数ある場合は、番号が最も小さいレーンを選びます。給油が終わるとその車はレーンから出ていき、その後ろの車が給油を行います。一度レーンを選んだら、他のレーンに移ることはできません。また、レーンに並んでいる車の順番が変わることはありません。

レーンの数、入場した車と給油が終了したレーンの情報が与えられたとき、給油が終了した車のナンバーを順番に出力するプログラムを作成せよ。入場の情報はスタンドに入ってくる車のナンバー、給油終了の情報は先頭の車の給油が終了したレーン番号としてそれぞれ与えられる。ただし、最初はどのレーンにも車は並んでいないものとする。

入力

入力は以下の形式で与えられる。

$N$ $M$
$info_1$
$info_2$
:
$info_M$

１行目にレーンの数$N$ ($1\leq N \leq 10$)と情報の数$M$ ($2 \leq M \leq 10,000$)が与えられる。続く$M$行に各情報$info_i$が与えられる。各$info_i$は以下のいずれかの形式で与えられる。

0 $lane$

または

1 $car$

最初の数字が0の場合、番号が$lane$ ($1 \leq lane \leq N$)であるレーンに並んでいる先頭の車の給油が終了したことを示す。最初の数字が1の場合、ナンバーが$car$ ($1 \leq car \leq 9,999$)である車がスタンドに入場したことを示す。

入力は以下の制約を満たす。

ガソリンスタンドに入って来る車のナンバーは、全て異なる。

最初の数字が0,1である情報は、それぞれ必ず１つ以上ある。

車のいないレーンに対して、最初の数字が0である情報は与えられない。

出力

給油終了の情報ごとに、給油が終了した車のナンバーを1行に出力する。
 

入出力例

入力例

2 7
1 999
1 1000
0 2
1 1001
1 1002
0 1
0 1

出力例

1000
999
1002

Solution in C# (judge verdict: Accepted)

using System.Linq;
using System.Collections.Generic;
using System;

public class hello
{
    public static void Main()
    {
        string[] line = Console.ReadLine().Trim().Split(' ');
        var n = int.Parse(line[0]);
        var m = int.Parse(line[1]);
        var q = new Queue<int>[n];
        for (int i = 0; i < n; i++) q[i] = new Queue<int>();
        for (int i = 0; i < m; i++)
        {
            line = Console.ReadLine().Trim().Split(' ');
            var t = int.Parse(line[1]);
            if (line[0] == "0") Console.WriteLine(q[t - 1].Dequeue());
            else
            {
                var qn = getLane(n, q);
                q[qn].Enqueue(t);
            }
        }
    }
    static int getLane(int n, Queue<int>[] q)
    {
        var min = 10001;
        var res = 0;
        for (int i = 0; i < n; i++)
        {
            var qc = q[i].Count();
            if (qc < min) { min = qc; res = i; }
        }
        return res;
    }
}