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; } }