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

猜你喜欢

转载自blog.csdn.net/weixin_41995872/article/details/80431747