結果
| 問題 | 
                            No.198 キャンディー・ボックス2
                             | 
                    
| コンテスト | |
| ユーザー | 
                             nanophoto12
                         | 
                    
| 提出日時 | 2015-12-13 23:16:52 | 
| 言語 | C#(csc)  (csc 3.9.0)  | 
                    
| 結果 | 
                             
                                WA
                                 
                             
                            
                            (最新)
                                AC
                                 
                             
                            (最初)
                            
                            
                         | 
                    
| 実行時間 | - | 
| コード長 | 1,569 bytes | 
| コンパイル時間 | 823 ms | 
| コンパイル使用メモリ | 108,032 KB | 
| 実行使用メモリ | 18,944 KB | 
| 最終ジャッジ日時 | 2024-11-21 20:40:03 | 
| 合計ジャッジ時間 | 2,589 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge3 / judge4 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 4 | 
| other | AC * 25 WA * 1 | 
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.9.0-6.21124.20 (db94f4cc) Copyright (C) Microsoft Corporation. All rights reserved.
ソースコード
using System;
using System.Collections.Generic;
using System.Linq;
namespace No198
{
	class MainClass
	{
		private static long Calculate(long target, long[] values)
		{
			return values.Sum (v => Math.Abs (target - v));
		}
		public static void Main (string[] args)
		{			
			var b = Convert.ToInt64(Console.ReadLine ());
			var n = Convert.ToInt32 (Console.ReadLine ());
			long[] data = new long[n];
			for (int i = 0; i < n; i++) {
				data [i] = Convert.ToInt64 (Console.ReadLine ());
			}
			var sum = data.Sum () + b;
			var maxValue = sum / n;
			var minValue = data.Min ();
			var midValue = (maxValue + minValue) / 2L;
			var min = long.MaxValue;
			do {
				var maxOperation = Calculate (maxValue, data);
				var minOperation = Calculate (minValue, data);
				var midOperation = Calculate (midValue, data);
				min = Math.Min (min, maxOperation);
				min = Math.Min (min, minOperation);
				min = Math.Min (min, midOperation);
				if (maxOperation > minOperation) {
					maxValue = (midValue + maxValue) / 2;
					midValue = (maxValue + minValue) / 2;
				} else {
					minValue = (midValue + minValue) / 2;
					midValue = (maxValue + minValue) / 2;
				}
			} while (maxValue - midValue > 1 && midValue - minValue > 1);
			{
				var maxOperation = Calculate (maxValue, data);
				var minOperation = Calculate (minValue, data);
				var midOperation = Calculate (midValue, data);
				min = Math.Min (min, maxOperation);
				min = Math.Min (min, minOperation);
				min = Math.Min (min, midOperation);
			}
			Console.WriteLine (min.ToString ());
		}
	}
}
            
            
            
        
            
nanophoto12