TopCoder SRM 145 DIV 1 Medium 練習

問題

問題文が長すぎて説明マンドクセ

激しくやるだけ。

using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Collections;
using System.Collections.Generic;

public class VendingMachine {
    int[,] items;
    int N, M, cur;

    public int motorUse(string[] prices, string[] purchases)
    {
        N = prices.Length;
        M = prices[0].Split().Length;
        items = new int[N, M];

        for (int i = 0; i < N; ++i)
        {
            string[] t = prices[i].Split();
            for (int j = 0; j < M; ++j)
                items[i, j] = int.Parse(t[j]);
        }

        int res = 0, prev = -5;
        cur = 0;
        for (int i = 0; i < purchases.Length; ++i)
        {
            string[] tmp = purchases[i].Split(",".ToCharArray());
            string[] tmp2 = tmp[1].Split(":".ToCharArray());
            int shelf = int.Parse(tmp[0]);
            int col = int.Parse(tmp2[0]);
            int time = int.Parse(tmp2[1]);

            if (items[shelf, col] == 0)
                return -1;
            if (time - prev >= 5)
            {
                int to = getMaxCol();
                res += minMove(cur, to);
                cur = to;
            }
            res += minMove(cur, col);
            cur = col;
            items[shelf, col] = 0;
            prev = time;
        }
        int l = getMaxCol();
        return res + minMove(cur, l);
    }

    private int minMove(int cur, int to)
    {
        return Math.Min(Math.Abs(to - cur), M - Math.Abs(to - cur));
    }

    private int getMaxCol()
    {
        int max = -1, maxCol = 0;
        for (int i = 0; i < M; ++i)
        {
            int sum = 0;
            for (int j = 0; j < N; ++j)
                sum += items[j, i];
            if (max < sum)
            {
                max = sum;
                maxCol = i;
            }
        }
        return maxCol;
    }
}