一日一プロ

キュー

擬似タスクスケジューリング

using System;
using System.Collections.Generic;

namespace queue
{
	class MainClass
	{
		public class Process
		{
			public string name;
			public int time;

			public Process(){
				name = "ERROR";
				time = 0;
			}

			public Process(string t_name, int t_time){
				name = t_name;
				time = t_time;
			}
		}

		public static List<Process> queue = new List<Process> ();

		public static void Main (string[] args)
		{
			string[] str = Console.ReadLine ().Split (' ');
			int cmp = int.Parse (str [0]);
			int q = int.Parse (str [1]);
			for (int i = 0; i < cmp; i++) {
				str = Console.ReadLine ().Split (' ');
				Process tmp = new Process (str [0], int.Parse (str [1]));
				que (tmp);
			}

			while (queue.Count > 0) {
				Process tmp = new Process("",0);
				tmp = deque ();
				if (tmp.time > q) {
					tmp.time -= q;
					que (tmp);
					Console.WriteLine ("{0}, {1}", tmp.name, tmp.time);
				} else {
					Console.WriteLine ("Proces END:{0}", tmp.name);
				}
			}
		}

		public static void que(Process task){
			queue.Add (task);
		}

		public static Process deque(){
			Process ret = new Process();
			if (queue.Count != 0) {
				ret = queue [0];
				queue.RemoveAt (0);
			} else {
				;
			}

			return ret;
		}
	}
}