private static void PrintHappySubsets(TreeMultiSet <List <int> > set) { foreach (var subset in set) { for (int i = 0; i < subset.Value; i++) { foreach (var element in subset.Key) { Console.Write("{0} ", element); } if (i < subset.Value - 1) { Console.WriteLine(); } } Console.WriteLine(); } }
static void Main(string[] args) { int number = int.Parse(Console.ReadLine()); string inputLine = Console.ReadLine(); string[] tokens = inputLine.Split(' '); int[] array = new int[tokens.Length]; for (int i = 0; i < array.Length; i++) { array[i] = int.Parse(tokens[i]); } Comparer <List <int>, int> comparer = new Comparer <List <int>, int>(); TreeMultiSet <List <int> > set = new TreeMultiSet <List <int> >(comparer); FindHappySequences(array, number, set); PrintHappySubsets(set); }
private static void FindHappySequences(int[] array, int number, TreeMultiSet <List <int> > set) { for (int startIndex = 0; startIndex < array.Length; startIndex++) { int currentSum = 0; List <int> newSequence = new List <int>(); for (int endIndex = startIndex; endIndex < array.Length; endIndex++) { int newElement = array[endIndex]; currentSum += newElement; newSequence.Add(newElement); if (currentSum == number) { List <int> happySequence = new List <int>(newSequence); set.Add(happySequence); if (set.AllElementsCount() == 11) { set.RemoveLargestElement(); } } } } }