Example #1
0
    static object Solve()
    {
        var(n, k) = Read2();
        var s = Console.ReadLine();

        var r = new List <char>();

        var comp = Comparer2 <int> .Create(i => s[i], i => i);

        var set = new IndexedMultiSet <int>(comp);

        for (int i = 0; i < n - k; i++)
        {
            set.Add(i);
        }

        var t = -1;

        for (int i = n - k; i < n; i++)
        {
            set.Add(i);
            while (set.GetFirst() < t)
            {
                set.RemoveAt(0);
            }

            t = set.RemoveAt(0);
            r.Add(s[t]);
        }

        return(string.Join("", r));
    }
Example #2
0
        public ImmutableArray <T> Sort(Comparison <T> comparison)
        {
            Requires.NotNull(comparison, nameof(comparison));

            var self = this;

            return(self.Sort(Comparer2 <T> .Create(comparison)));
        }
Example #3
0
        /// <summary>
        /// 通过[战魂类型 + 战魂性格]二分快速查表
        /// </summary>
        /// <param name="petType">战魂类型</param>
        /// <param name="petCharacter">战魂性格</param>
        /// <returns></returns>
        public static PetRecommendDataBase Query(this List <PetRecommendDataBase> sorted, uint petType, uint petCharacter)
        {
            var key = new PetRecommendDataBase()
            {
                petType = petType, petCharacter = petCharacter
            };
            var comparer = new Comparer2();
            var index    = sorted.BinarySearch(key, comparer);

            return(index >= 0 ? sorted[index] : default(PetRecommendDataBase));
        }
Example #4
0
        /// <summary>
        /// 通过[索引ID + 每日使用次数]二分快速查表
        /// </summary>
        /// <param name="dwID">索引ID</param>
        /// <param name="useTimes">每日使用次数</param>
        /// <returns></returns>
        public static IncreaseDataBase Query(this List <IncreaseDataBase> sorted, uint dwID, uint useTimes)
        {
            var key = new IncreaseDataBase()
            {
                dwID = dwID, useTimes = useTimes
            };
            var comparer = new Comparer2();
            var index    = sorted.BinarySearch(key, comparer);

            return(index >= 0 ? sorted[index] : default(IncreaseDataBase));
        }
Example #5
0
        /// <summary>
        /// 通过[ID + 索引]二分快速查表
        /// </summary>
        /// <param name="dwID">ID</param>
        /// <param name="indexID">索引</param>
        /// <returns></returns>
        public static LandAndFarmDataBase Query(this List <LandAndFarmDataBase> sorted, uint dwID, uint indexID)
        {
            var key = new LandAndFarmDataBase()
            {
                dwID = dwID, indexID = indexID
            };
            var comparer = new Comparer2();
            var index    = sorted.BinarySearch(key, comparer);

            return(index >= 0 ? sorted[index] : default(LandAndFarmDataBase));
        }
Example #6
0
        /// <summary>
        /// 通过[索引ID + 状态]二分快速查表
        /// </summary>
        /// <param name="wdID">索引ID</param>
        /// <param name="wdState">状态</param>
        /// <returns></returns>
        public static HomeLandViewDatabase Query(this List <HomeLandViewDatabase> sorted, ushort wdID, ushort wdState)
        {
            var key = new HomeLandViewDatabase()
            {
                wdID = wdID, wdState = wdState
            };
            var comparer = new Comparer2();
            var index    = sorted.BinarySearch(key, comparer);

            return(index >= 0 ? sorted[index] : default(HomeLandViewDatabase));
        }
Example #7
0
        /// <summary>
        /// 通过[编号 + 等级]二分快速查表
        /// </summary>
        /// <param name="id">编号</param>
        /// <param name="lv">等级</param>
        /// <returns></returns>
        public static HeartSkillDataBase Query(this List <HeartSkillDataBase> sorted, uint id, uint lv)
        {
            var key = new HeartSkillDataBase()
            {
                id = id, lv = lv
            };
            var comparer = new Comparer2();
            var index    = sorted.BinarySearch(key, comparer);

            return(index >= 0 ? sorted[index] : default(HeartSkillDataBase));
        }
Example #8
0
        /// <summary>
        /// 通过[鼓舞类型 + 次数]二分快速查表
        /// </summary>
        /// <param name="inspireType">鼓舞类型</param>
        /// <param name="inspireIndex">次数</param>
        /// <returns></returns>
        public static InspireDataBase Query(this List <InspireDataBase> sorted, uint inspireType, uint inspireIndex)
        {
            var key = new InspireDataBase()
            {
                inspireType = inspireType, inspireIndex = inspireIndex
            };
            var comparer = new Comparer2();
            var index    = sorted.BinarySearch(key, comparer);

            return(index >= 0 ? sorted[index] : default(InspireDataBase));
        }
        /// <summary>
        /// 通过[职业 + 等级]二分快速查表
        /// </summary>
        /// <param name="job">职业</param>
        /// <param name="suitlv">等级</param>
        /// <returns></returns>
        public static GridStrengthenSuitDataBase Query(this List <GridStrengthenSuitDataBase> sorted, uint job, uint suitlv)
        {
            var key = new GridStrengthenSuitDataBase()
            {
                job = job, suitlv = suitlv
            };
            var comparer = new Comparer2();
            var index    = sorted.BinarySearch(key, comparer);

            return(index >= 0 ? sorted[index] : default(GridStrengthenSuitDataBase));
        }
Example #10
0
        /// <summary>
        /// 通过[BuffID + 等级]二分快速查表
        /// </summary>
        /// <param name="dwBuffID">BuffID</param>
        /// <param name="dwLevel">等级</param>
        /// <returns></returns>
        public static BuffUpgradeDataBase Query(this List <BuffUpgradeDataBase> sorted, ushort dwBuffID, ushort dwLevel)
        {
            var key = new BuffUpgradeDataBase()
            {
                dwBuffID = dwBuffID, dwLevel = dwLevel
            };
            var comparer = new Comparer2();
            var index    = sorted.BinarySearch(key, comparer);

            return(index >= 0 ? sorted[index] : default(BuffUpgradeDataBase));
        }
Example #11
0
        /// <summary>
        /// 通过[玩家等级 + 日常ID]二分快速查表
        /// </summary>
        /// <param name="dwLv">玩家等级</param>
        /// <param name="dwID">日常ID</param>
        /// <returns></returns>
        public static RewardFindDataBase Query(this List <RewardFindDataBase> sorted, uint dwLv, uint dwID)
        {
            var key = new RewardFindDataBase()
            {
                dwLv = dwLv, dwID = dwID
            };
            var comparer = new Comparer2();
            var index    = sorted.BinarySearch(key, comparer);

            return(index >= 0 ? sorted[index] : default(RewardFindDataBase));
        }
Example #12
0
        /// <summary>
        /// 通过[编号 + 等级]二分快速查表
        /// </summary>
        /// <param name="wdID">编号</param>
        /// <param name="wdLevel">等级</param>
        /// <returns></returns>
        public static SkillDatabase Query(this List <SkillDatabase> sorted, ushort wdID, ushort wdLevel)
        {
            var key = new SkillDatabase()
            {
                wdID = wdID, wdLevel = wdLevel
            };
            var comparer = new Comparer2();
            var index    = sorted.BinarySearch(key, comparer);

            return(index >= 0 ? sorted[index] : default(SkillDatabase));
        }
Example #13
0
        /// <summary>
        /// 通过[主类ID + 子类ID]二分快速查表
        /// </summary>
        /// <param name="mainID">主类ID</param>
        /// <param name="childID">子类ID</param>
        /// <returns></returns>
        public static RankTypeDataBase Query(this List <RankTypeDataBase> sorted, uint mainID, uint childID)
        {
            var key = new RankTypeDataBase()
            {
                mainID = mainID, childID = childID
            };
            var comparer = new Comparer2();
            var index    = sorted.BinarySearch(key, comparer);

            return(index >= 0 ? sorted[index] : default(RankTypeDataBase));
        }
Example #14
0
        /// <summary>
        /// 通过[大类ID + 细类ID]二分快速查表
        /// </summary>
        /// <param name="ID">大类ID</param>
        /// <param name="SubID">细类ID</param>
        /// <returns></returns>
        public static ConsignmentCateIDConf Query(this List <ConsignmentCateIDConf> sorted, uint ID, uint SubID)
        {
            var key = new ConsignmentCateIDConf()
            {
                ID = ID, SubID = SubID
            };
            var comparer = new Comparer2();
            var index    = sorted.BinarySearch(key, comparer);

            return(index >= 0 ? sorted[index] : default(ConsignmentCateIDConf));
        }
Example #15
0
        /// <summary>
        /// 通过[等级 + 宠物ID]二分快速查表
        /// </summary>
        /// <param name="level">等级</param>
        /// <param name="petID">宠物ID</param>
        /// <returns></returns>
        public static PetUpGradeDataBase Query(this List <PetUpGradeDataBase> sorted, uint level, uint petID)
        {
            var key = new PetUpGradeDataBase()
            {
                level = level, petID = petID
            };
            var comparer = new Comparer2();
            var index    = sorted.BinarySearch(key, comparer);

            return(index >= 0 ? sorted[index] : default(PetUpGradeDataBase));
        }
Example #16
0
        /// <summary>
        /// 通过[坐骑ID + 等级]二分快速查表
        /// </summary>
        /// <param name="rideId">坐骑ID</param>
        /// <param name="level">等级</param>
        /// <returns></returns>
        public static RideFeedData Query(this List <RideFeedData> sorted, uint rideId, uint level)
        {
            var key = new RideFeedData()
            {
                rideId = rideId, level = level
            };
            var comparer = new Comparer2();
            var index    = sorted.BinarySearch(key, comparer);

            return(index >= 0 ? sorted[index] : default(RideFeedData));
        }
Example #17
0
        /// <summary>
        /// 通过[装备ID + 精炼等级]二分快速查表
        /// </summary>
        /// <param name="equipId">装备ID</param>
        /// <param name="refineLev">精炼等级</param>
        /// <returns></returns>
        public static EquipRefineDataBase Query(this List <EquipRefineDataBase> sorted, uint equipId, byte refineLev)
        {
            var key = new EquipRefineDataBase()
            {
                equipId = equipId, refineLev = refineLev
            };
            var comparer = new Comparer2();
            var index    = sorted.BinarySearch(key, comparer);

            return(index >= 0 ? sorted[index] : default(EquipRefineDataBase));
        }
Example #18
0
        /// <summary>
        /// 通过[大类 + 小类]二分快速查表
        /// </summary>
        /// <param name="firID">大类</param>
        /// <param name="secID">小类</param>
        /// <returns></returns>
        public static BibleDataBase Query(this List <BibleDataBase> sorted, uint firID, uint secID)
        {
            var key = new BibleDataBase()
            {
                firID = firID, secID = secID
            };
            var comparer = new Comparer2();
            var index    = sorted.BinarySearch(key, comparer);

            return(index >= 0 ? sorted[index] : default(BibleDataBase));
        }
        /// <summary>
        /// 通过[武魂ID + 等级]二分快速查表
        /// </summary>
        /// <param name="id">武魂ID</param>
        /// <param name="level">等级</param>
        /// <returns></returns>
        public static WeaponSoulUpgradeDataBase Query(this List <WeaponSoulUpgradeDataBase> sorted, uint id, uint level)
        {
            var key = new WeaponSoulUpgradeDataBase()
            {
                id = id, level = level
            };
            var comparer = new Comparer2();
            var index    = sorted.BinarySearch(key, comparer);

            return(index >= 0 ? sorted[index] : default(WeaponSoulUpgradeDataBase));
        }
Example #20
0
        /// <summary>
        /// 通过[职业 + 性别]二分快速查表
        /// </summary>
        /// <param name="professionID">职业</param>
        /// <param name="sexID">性别</param>
        /// <returns></returns>
        public static SelectRoleDataBase Query(this List <SelectRoleDataBase> sorted, uint professionID, uint sexID)
        {
            var key = new SelectRoleDataBase()
            {
                professionID = professionID, sexID = sexID
            };
            var comparer = new Comparer2();
            var index    = sorted.BinarySearch(key, comparer);

            return(index >= 0 ? sorted[index] : default(SelectRoleDataBase));
        }
Example #21
0
        /// <summary>
        /// 通过[职业 + 等级]二分快速查表
        /// </summary>
        /// <param name="dwJob">职业</param>
        /// <param name="dwLevel">等级</param>
        /// <returns></returns>
        public static RobotDataBase Query(this List <RobotDataBase> sorted, uint dwJob, uint dwLevel)
        {
            var key = new RobotDataBase()
            {
                dwJob = dwJob, dwLevel = dwLevel
            };
            var comparer = new Comparer2();
            var index    = sorted.BinarySearch(key, comparer);

            return(index >= 0 ? sorted[index] : default(RobotDataBase));
        }
Example #22
0
        /// <summary>
        /// 通过[SkillID + 等级]二分快速查表
        /// </summary>
        /// <param name="skillID">SkillID</param>
        /// <param name="lv">等级</param>
        /// <returns></returns>
        public static ClanSkillDataBase Query(this List <ClanSkillDataBase> sorted, uint skillID, uint lv)
        {
            var key = new ClanSkillDataBase()
            {
                skillID = skillID, lv = lv
            };
            var comparer = new Comparer2();
            var index    = sorted.BinarySearch(key, comparer);

            return(index >= 0 ? sorted[index] : default(ClanSkillDataBase));
        }
Example #23
0
        /// <summary>
        /// 通过[ID + 时装档次]二分快速查表
        /// </summary>
        /// <param name="base_id">ID</param>
        /// <param name="suitLv">时装档次</param>
        /// <returns></returns>
        public static SuitDataBase Query(this List <SuitDataBase> sorted, uint base_id, uint suitLv)
        {
            var key = new SuitDataBase()
            {
                base_id = base_id, suitLv = suitLv
            };
            var comparer = new Comparer2();
            var index    = sorted.BinarySearch(key, comparer);

            return(index >= 0 ? sorted[index] : default(SuitDataBase));
        }
Example #24
0
        /// <summary>
        /// 通过[宠物品质 + 成长状态]二分快速查表
        /// </summary>
        /// <param name="quality">宠物品质</param>
        /// <param name="growStatus">成长状态</param>
        /// <returns></returns>
        public static PetGuiYuanDataBase Query(this List <PetGuiYuanDataBase> sorted, uint quality, uint growStatus)
        {
            var key = new PetGuiYuanDataBase()
            {
                quality = quality, growStatus = growStatus
            };
            var comparer = new Comparer2();
            var index    = sorted.BinarySearch(key, comparer);

            return(index >= 0 ? sorted[index] : default(PetGuiYuanDataBase));
        }
Example #25
0
        /// <summary>
        /// 通过[背包ID + 解锁序号]二分快速查表
        /// </summary>
        /// <param name="packId">背包ID</param>
        /// <param name="gridIndex">解锁序号</param>
        /// <returns></returns>
        public static UnlockStoreDataBase Query(this List <UnlockStoreDataBase> sorted, ushort packId, ushort gridIndex)
        {
            var key = new UnlockStoreDataBase()
            {
                packId = packId, gridIndex = gridIndex
            };
            var comparer = new Comparer2();
            var index    = sorted.BinarySearch(key, comparer);

            return(index >= 0 ? sorted[index] : default(UnlockStoreDataBase));
        }
Example #26
0
        /// <summary>
        /// 通过[副本ID + 波数]二分快速查表
        /// </summary>
        /// <param name="copyId">副本ID</param>
        /// <param name="waveId">波数</param>
        /// <returns></returns>
        public static CopyTargetDataBase Query(this List <CopyTargetDataBase> sorted, uint copyId, uint waveId)
        {
            var key = new CopyTargetDataBase()
            {
                copyId = copyId, waveId = waveId
            };
            var comparer = new Comparer2();
            var index    = sorted.BinarySearch(key, comparer);

            return(index >= 0 ? sorted[index] : default(CopyTargetDataBase));
        }
            public void Sort(Comparison <T> comparison)
            {
                Requires.NotNull(comparison, nameof(comparison));

                if (Count > 1)
                {
                    // Array.Sort does not have an overload that takes both bounds and a Comparison.
                    // We could special case _count == _elements.Length in order to try to avoid
                    // the IComparer allocation, but the Array.Sort overload that takes a Comparison
                    // allocates such an IComparer internally, anyway.
                    Array.Sort(_elements, 0, _count, Comparer2 <T> .Create(comparison));
                }
            }
Example #28
0
    static void Main()
    {
        var n  = int.Parse(Console.ReadLine());
        var ss = Array.ConvertAll(new bool[n], _ => Console.ReadLine());

        var comp = Comparer2 <string> .Create(s => s.TrimStart('0').Length, s => s.TrimStart('0'), s => - s.Length);

        var set = new IndexedMultiSet <string>(comp);

        foreach (var s in ss)
        {
            set.Add(s);
        }

        Console.WriteLine(string.Join("\n", set));
    }
Example #29
0
        private void SortListBox(ListBox list, ComboBox combo)
        {
            List <string> buff_list = new List <string>();

            foreach (string i in list.Items)
            {
                buff_list.Add(i);
            }
            switch (combo.SelectedIndex)
            {
            case 0:
                buff_list.Sort();
                break;

            case 1:
                Comparer1 comp1 = new Comparer1();
                buff_list.Sort(comp1);
                break;

            case 2:
                Comparer2 comp2 = new Comparer2();
                buff_list.Sort(comp2);
                break;

            case 3:
                Comparer3 comp3 = new Comparer3();
                buff_list.Sort(comp3);
                break;

            default:
                return;
            }
            list.Items.Clear();
            foreach (string i in buff_list)
            {
                list.Items.Add(i);
            }
            list.Update();
        }
Example #30
0
        static void Main(string[] args)
        {
            var heapSort  = new HeapSortStrategy();
            var shellSort = new ShellSortStrategy();

            var comparer1 = new Comparer1();
            var comparer2 = new Comparer2();


            var fractions = new List <Fraction>();

            fractions.Add(new Fraction(1, 2));
            fractions.Add(new Fraction(-1, 2));
            fractions.Add(new Fraction(1, 3));
            fractions.Add(new Fraction(10, 2));
            fractions.Add(new Fraction(11, 3));
            Console.WriteLine("Heap Sort Source:");
            foreach (var item in fractions)
            {
                Console.Write($"{item.ToString()} ");
            }
            Console.WriteLine(); Console.WriteLine();


            var result = new List <Fraction>();

            ////////
            heapSort.SortArray(out result, ref fractions, SortOrder.BYINCREASING, comparer1, null);
            foreach (var item in result)
            {
                Console.Write($"{item.ToString()} ");
            }
            Console.WriteLine();

            heapSort.SortArray(out result, ref fractions, SortOrder.BYINCREASING, comparer2, null);
            foreach (var item in result)
            {
                Console.Write($"{item.ToString()} ");
            }
            Console.WriteLine();
            Console.WriteLine();

            //DECREASING
            heapSort.SortArray(out result, ref fractions, SortOrder.BYDECREASING, comparer1, null);
            foreach (var item in result)
            {
                Console.Write($"{item.ToString()} ");
            }
            Console.WriteLine();

            heapSort.SortArray(out result, ref fractions, SortOrder.BYDECREASING, comparer2, null);
            foreach (var item in result)
            {
                Console.Write($"{item.ToString()} ");
            }
            Console.WriteLine();

            //////
            Console.WriteLine(); Console.WriteLine(); Console.WriteLine();
            ////////
            var fractions2 = new List <Fraction>();

            fractions2.Add(new Fraction(1, 2));
            fractions2.Add(new Fraction(-1, 2));
            fractions2.Add(new Fraction(1, 3));
            fractions2.Add(new Fraction(10, 2));
            fractions2.Add(new Fraction(11, 3));
            Console.WriteLine("Shell Sort Source");
            foreach (var item in fractions2)
            {
                Console.Write($"{item.ToString()} ");
            }
            Console.WriteLine(); Console.WriteLine();

            shellSort.SortArray(out result, ref fractions2, SortOrder.BYINCREASING, comparer1, null);
            foreach (var item in result)
            {
                Console.Write($"{item.ToString()} ");
            }
            Console.WriteLine();

            shellSort.SortArray(out result, ref fractions2, SortOrder.BYINCREASING, comparer2, null);
            foreach (var item in result)
            {
                Console.Write($"{item.ToString()} ");
            }
            Console.WriteLine();
            Console.WriteLine();

            //DECREASING
            shellSort.SortArray(out result, ref fractions2, SortOrder.BYDECREASING, comparer1, null);
            foreach (var item in result)
            {
                Console.Write($"{item.ToString()} ");
            }
            Console.WriteLine();

            shellSort.SortArray(out result, ref fractions2, SortOrder.BYDECREASING, comparer2, null);
            foreach (var item in result)
            {
                Console.Write($"{item.ToString()} ");
            }
            Console.WriteLine();

            Console.ReadLine();
        }