fork download
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. public class Test
  7. {
  8. public static void Main()
  9. {
  10. int[] a = Enumerable.Range(1,16).ToArray();
  11. int maxlen = a.Length/2;
  12. var res = MakePairs(a, maxlen);
  13. Console.WriteLine(res[res.Count-1]);
  14. }
  15.  
  16. static List<Tuple<NodeList,NodeList>> MakePairs(int[] nums, int maxlen)
  17. {
  18. var sums = new List<NodeList>();
  19. for(int i = 0; i < nums.Length; i++)
  20. {
  21. var num = nums[i];
  22. for(int j = sums.Count - 1; j >= 0; j--)
  23. {
  24. var list = sums[j];
  25. if(list.Length >= maxlen)
  26. continue;
  27. var node = new Node { Number = num, Next = list.First };
  28. var nodeList = new NodeList { First = node, Length = list.Length + 1, Sum = list.Sum + num };
  29. sums.Add(nodeList);
  30. }
  31. sums.Add(new NodeList { First = new Node { Number = num }, Length = 1, Sum = num });
  32. }
  33. // string.Join(",", sums.Select(x => x.Sum.ToString()).ToArray() ).Dump();
  34. sums.Sort((x,y) => x.Sum.CompareTo(y.Sum));
  35. var res = new List<Tuple<NodeList,NodeList>>();
  36. for(int i = 0; i < sums.Count; i++)
  37. for(int j = i + 1; j < sums.Count; j++)
  38. {
  39. if(sums[i].Sum != sums[j].Sum)
  40. break;
  41. res.Add(Tuple.Create(sums[i], sums[j]));
  42. }
  43. return res;
  44. }
  45.  
  46. class Node
  47. {
  48. public int Number { get; set; }
  49. public Node Next { get; set; }
  50. // public Node(int number, Node next = null)
  51. // {
  52. // Number = number;
  53. // Next = next;
  54. // }
  55. }
  56.  
  57. class NodeList
  58. {
  59. public Node First { get; set; }
  60. public int Length { get; set; }
  61. public int Sum { get; set; }
  62.  
  63. public override string ToString()
  64. {
  65. var sb = new StringBuilder();
  66. var cur = First;
  67. for(int i = 0; i < Length; i++)
  68. {
  69. sb.Append(cur.Number.ToString());
  70. sb.Append(',');
  71. cur = cur.Next;
  72. }
  73. if(sb.Length > 0)
  74. sb.Length -= 1;
  75. return sb.ToString();
  76. }
  77. // public NodeList(Node first, int length, int sum)
  78. // {
  79. // First = first;
  80. // Length = length;
  81. // Sum = sum;
  82. // }
  83. }
  84.  
  85. class Result
  86. {
  87. public NodeList First { get; set; }
  88. public NodeList Second { get; set; }
  89. public int TailIndex { get; set; }
  90. }
  91.  
  92. }
Time limit exceeded #stdin #stdout 5s 315456KB
stdin
Standard input is empty
stdout
Standard output is empty