کد این سوال رو برای یکی از دوستان نوشته بودم، اینجا هم قصد چندانی برای توضیح راه حل ندارم، فقط خیلی ساده به راه حل خودم اشاره میکنم اول از همه بریم سراغ سوال
دو کشور سیاه جامگان و سفیدجامگان در حال نبرد با یکدیگرند، تصمیم گرفته اند که بالاخره نتیجه جنگ را با نبرد تن به تن معلوم کنند.

مراسم نبرد تن به تن کلا به این صورت است که هر کشور تعدادی از قوی ترین جنگجویان خود را در آن روز به میدان می آورد. در هر مرحله، رزمی بین قوی ترین جنگجوی باقی مانده از کشور سیاه جامگان و قوی ترین جنگ جوی باقیمانده از کشور سفیدجامگان صورت می گیرد. هر جنگجو قدرتی دارد که با استفاده از آن می توان فهمید که قوی ترین جنگجوی باقیمانده کیست. اگر در یک رزم، جنگجویی با قدرت P با جنگجویی با قدرت Q درافتد به طوری که P>Q باشد، جنگ جوی با قدرت Q کشته شده و قدرت جنگ جوی دیگر به اندازه Q کاهش می یابد. در نهایت کشوری بازنده است که هیچ یک از جنگجویانش زنده نمانند. (اگر قدرت هر دو جنگجو برابر باشد هر دو در این نبرد تلف می شوند.)
حالا ما می خواهیم قبل از این که نبرد آغاز شود، متوجه شویم که چه کشوری پیروز میدان است.
ورودی
در خط اول ورودی، N، تعداد جنگجویان کشور سفیدجامگان آمده است. در خط بعد، N عدد صحیح مثبت آمده که عدد iام، Pi، نشاندهنده قدرت جنگ جوی iام از کشور سفیدجامگان است. سپس در خط سوم، M، تعداد جنگجویان کشور سیاه جامگان آمده است. نهایتا در خط چهارم، M عدد آمده است که عدد iام، Qi، نشان دهنده قدرت جنگ جویان ارتش سیاه جامگان آمده است.
خروجی
در خط اول در صورتی که کشور سفیدجامگان پیروز میدان خواهد بود، عبارت White و در صورتی که کشور سیاه جامگان برنده است، عبارت Black را چاپ کنید. سپس در خط دوم تعداد جنگجویانی را که از کشور برنده، زنده باقی مانده اند را چاپ کنید و در خط سوم قدرت هر یک از این جنگجوهای زنده را پس از نبرد از کوچک به بزرگ بنویسید و آن ها را با یک فاصله از هم جدا کنید.
محدودیت ها
1 , M
1 ≤ Pi , Qi
ورودی و خروجی نمونه

INPUT

4
1 2 3 4
2
10 1

OUTPUT

Black
1
1

قبل از اینکه بریم سراغ کد، توضیح کوتاهی درمورد راه حلی که استفاده کردم رو مینویسم. توجه داشته باشید که این راه حل اصلا بهینه نیست و بدترین حالت ممکنه :)
خب در مرحله اول از مبارزه جنگجوی قدرتمند هر ارتش باهم مبارزه میکنند و نیروی هرکدوم کم میشه،  تا جایی که نیروی یکی تموم بشه و کشته بشه. (تا اینجا یعنی ما باید قوی‌ترین فرد هر ارتش رو پیدا کنیم و نتیجه نبرد اون دو رو پیشبینی کنیم. بطبع جنگجویی که نیروی بیشتری داره برنده میشه)
توی مرحله بعدی هم شیوه کار مثل مرحله قبل است، چنگجوهای قدرتمند باهم مبارزه میکنند و برنده و بازنده مشخص میشه. ( اینجا هم باید جنگجوهای قوی انتخاب بشوند)
این مرحله تا زمانی ادامه پیدا میکنه که یک لشکر دیگه جنگجوی زنده نداشته باشه.
تا اینجا صورت سوال بود، وقتی میخوایم توی هر مرحله نیروی قوی هر لشکر رو پیدا کنیم، میتونیم نیروهای اون لشکر رو بترتیب قدرتشون مرتب کنیم، اولین نفر قویترین نیرو خواهد بود.
دو مبارز انتخاب میشوند و با هم میجنگند. کسی که پیروز شد به لشکر خودش برمیگرده، دوباره نیروهای هر لشکر مرتب میشوند و دو مبارز اول هر لشکر میجنگند.
فک کنم کد زیر گویاتر از توضیح من باشه :)

using System;

public class Test
{
	public static void Main()
	{
		int whiteSoldersCount = Convert.ToInt32(Console.ReadLine());
		int[] whiteSolders = new int[whiteSoldersCount];
		string[] tokens = Console.ReadLine().Split();
		for (int i = 0; i < whiteSoldersCount; i++)
		{
				whiteSolders[i] = Convert.ToInt32(tokens[i]);
		}
		// read black
		int blackSoldersCount = Convert.ToInt32(Console.ReadLine());
		int[] blackSolders = new int[blackSoldersCount];
		tokens = Console.ReadLine().Split();
		for (int i = 0; i < blackSoldersCount; i++)
		{
				blackSolders[i] = Convert.ToInt32(tokens[i]);
		}
		int whiteDeadSolders = 0;
		int blackDeadSolders = 0;
		while (whiteDeadSolders < whiteSoldersCount && blackDeadSolders < blackSoldersCount)
		{
			// sort
			sort(whiteSolders);
			sort(blackSolders);

			// compete
			if (whiteSolders[0] > blackSolders[0])
			{
				whiteSolders[0] -= blackSolders[0];
				blackSolders[0] = 0;
				blackDeadSolders ++;
			}
			else if (whiteSolders[0] < blackSolders[0])
			{
				blackSolders[0] -= whiteSolders[0];
				whiteSolders[0] = 0;
				whiteDeadSolders ++;
			}
			else
			{
				blackSolders[0] = 0;
				whiteSolders[0] = 0;
				blackDeadSolders ++;
				whiteDeadSolders ++;
			}
		}

		// print winner
		if (blackDeadSolders < blackSoldersCount)
		{
			sort(blackSolders);
			Console.WriteLine("Black");
			Console.WriteLine(blackSoldersCount - blackDeadSolders);
			for (int i = blackSoldersCount - 1; i >= 0 ; i--)
				if (blackSolders[i] > 0)
			    Console.Write(blackSolders[i] + " ");
		}
		else
		{
			sort(whiteSolders);
			Console.WriteLine("White");
			Console.WriteLine(whiteSoldersCount - whiteDeadSolders);
			for (int i = whiteSoldersCount - 1; i >= 0 ; i--)
				if (whiteSolders[i] > 0)
			    Console.Write(whiteSolders[i] + " ");
		}

	}

	public static int[] sort(int[] arr) {
		int temp = 0;
		for (int write = 0; write < arr.Length; write++) {
		    for (int sort = 0; sort < arr.Length - 1; sort++) {
		        if (arr[sort] < arr[sort + 1]) {
		            temp = arr[sort + 1];
		            arr[sort + 1] = arr[sort];
		            arr[sort] = temp;
		        }
		    }
		}
		return arr;
	}
}