1. 程式人生 > >hihoCoder題二 : 補提交卡詳解(C#題庫)

hihoCoder題二 : 補提交卡詳解(C#題庫)



using System;
using System.Collections.Generic;
namespace ConsoleApp4
{
    class Program
    {
        static void Main(string[] args)
        {
           
            int T = Convert.ToInt32(Console.ReadLine());//測試資料的組數
            List<int> days = new List<int>();//儲存資料的組數的最大連續天數結果
            for (int j = 0; j < T; j++)
            {
                string NM = Console.ReadLine();//儲存未簽到天數總數以及補提交卡數
                string[] data = (Console.ReadLine()).Split(' ');//儲存未儲存天數的具體資料
                int n = Convert.ToInt32(NM.Split(' ')[0]);//n未簽到天數總數
                int m = Convert.ToInt32(NM.Split(' ')[1]);//m補提交卡數
                int[] notSignDays = new int[n + 2];
                notSignDays[n + 1] = 100;
                notSignDays[0] = 0;
                //0  34 77 82 83 84  100
                //0   1  2  3  4  5   6
                for (int i = 1; i < notSignDays.Length - 1; i++)
                {
                    notSignDays[i] = Convert.ToInt32(data[i - 1]);
                }

                int continuityMaxDays = 0;
                if (m >= n)
                {
                    continuityMaxDays = 100;
                }
                else
                {
                    for (int i = 1; i < notSignDays.Length - m; i++)
                    {
                        #region 總結規律
                        ////m=1 n=5
                        ////1
                        //notSignDays[1+m] - notSignDays[1-1]-1;
                        ////2
                        //notSignDays[2+m] - notSignDays[2-1] - 1;
                        ////3
                        //notSignDays[3+m] - notSignDays[3-1] - 1;
                        ////4
                        //notSignDays[5] - notSignDays[3] - 1;
                        ////5
                        //notSignDays[6] - notSignDays[4] - 1;

                        ////m=2 n=5
                        ////1   1+M  -  1-1
                        //notSignDays[3] - notSignDays[0] - 1;
                        ////2
                        //notSignDays[4] - notSignDays[1] - 1;
                        ////3
                        //notSignDays[5] - notSignDays[2] - 1;
                        ////4
                        //notSignDays[6] - notSignDays[3] - 1;
                        #endregion                 
                        if (notSignDays[i + m] - notSignDays[i - 1] - 1 > continuityMaxDays)
                        {
                            continuityMaxDays = notSignDays[i + m] - notSignDays[i - 1] - 1;
                        }

                    }

                }
                days.Add(continuityMaxDays);
            }
            foreach (var item in days)
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }
    }
}