30/09/2018, 16:54

Đáp án cho bài tập Team formation trên Hackerrank

HackerRank

Team Formation | HackerRank

Help Roy to form teams such that the smallest team is as large as possible.

Đây là lời giải của em, em chỉ tò mò muốn biết là còn cách nào khác để giải bài này không ạ?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO; 

namespace Question10
{
    class Program
    {
        static void Main(String[] args)
        {
            int numCases = Int32.Parse(Console.ReadLine());
            while (numCases > 0)
            {
                List<int> skillList = Console.ReadLine().Split(' ').Skip(1).Select(Int32.Parse).ToList();
                skillList.Sort();

                List<int> teams = new List<int>();
                List<int> nextTeams = new List<int>();

                int minimum = skillList.Count;

                int i = 0;
                while (i < skillList.Count)
                {
                    int currentSkill = skillList[i];
                    while (i < skillList.Count && currentSkill == skillList[i])
                    {
                        int nextTeam = 0;
                        if (teams.Count > 0)
                        {
                            nextTeam = teams.Min();
                            teams.Remove(nextTeam);
                        }
                        nextTeams.Add(nextTeam + 1);
                        i++;
                    }

                    if (i < skillList.Count && skillList[i] - currentSkill == 1)
                    {
                        if (teams.Count > 0)
                        {
                            minimum = Math.Min(teams.Min(), minimum);
                        }

                        teams = nextTeams;
                        nextTeams = new List<int>();
                    }
                    else
                    {
                        if (teams.Count > 0)
                        {
                            minimum = Math.Min(teams.Min(), minimum);
                        }

                        if (nextTeams.Count > 0)
                        {
                            minimum = Math.Min(nextTeams.Min(), minimum);
                        }

                        teams = new List<int>();
                        nextTeams = new List<int>();
                    }
                }

                Console.WriteLine(minimum);

                numCases--;
            }
        }
    }
}
Bài liên quan
0