Advertisement
Guest User

CSES twosets java

a guest
Jun 25th, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.05 KB | None | 0 0
  1. import java.io.*;
  2. import java.math.BigInteger;
  3. import java.util.*;
  4. import java.util.StringTokenizer;
  5.  
  6. public class twosets {
  7. public static void main(String[] args) throws IOException {
  8. FastScanner in = new FastScanner();
  9. long n = in.nextInt();
  10.  
  11. BigInteger tSum = BigInteger.valueOf(n * (n+1)/2);
  12.  
  13. if( !tSum.mod(BigInteger.valueOf(2)).equals(BigInteger.valueOf(0))) {
  14. System.out.println("NO");
  15. }
  16. else {
  17. System.out.println("YES");
  18. List<Integer> set1 = new ArrayList<>();
  19. List<Integer> set2 = new ArrayList<>();
  20. BigInteger target = BigInteger.valueOf((n*(n+1))/4);
  21.  
  22. BigInteger set1Sum = BigInteger.ZERO;
  23.  
  24. for (int i = 1; i <= n; i++) {
  25. //System.out.println(target);
  26. if (set1Sum.add(BigInteger.valueOf(i)).compareTo(target) < 0) {
  27. set1Sum = set1Sum.add(BigInteger.valueOf(i));
  28. set1.add(i);
  29. }
  30. else {
  31. // find the largest number u can add to this while removing a num
  32. // i is the current largest number we have
  33.  
  34. // to replace the number, find the difference between target and n = i, then replace the i'th term with n;
  35.  
  36. BigInteger dif = BigInteger.valueOf(n).subtract(target.subtract(set1Sum));
  37. int diff = Integer.parseInt(dif.toString());
  38. set1.remove(diff-1);
  39. set1.add((int)n);
  40. break;
  41. }
  42. }
  43.  
  44. int c = 0;
  45. for (int i = 1; i <= n; i++) {
  46. if (c < set1.size()) {
  47. if (set1.get(c) != i) {
  48. set2.add(i);
  49. }
  50. else c++;
  51. }
  52. else set2.add(i);
  53. }
  54.  
  55.  
  56.  
  57. System.out.println(set1.size());
  58. for (int x: set1) {
  59. System.out.print(x + " ");
  60. }
  61. System.out.println();
  62.  
  63. System.out.println(set2.size());
  64. for (int x: set2) {
  65. System.out.print(x + " ");
  66. }
  67. System.out.println();
  68. }
  69. }
  70.  
  71. public static class FastScanner {
  72. BufferedReader br;
  73. StringTokenizer st;
  74.  
  75. public FastScanner(String s) {
  76. try {
  77. br = new BufferedReader(new FileReader(s));
  78. } catch (FileNotFoundException e) {
  79. // TODO Auto-generated catch block
  80. e.printStackTrace();
  81. }
  82. }
  83.  
  84. public FastScanner() {
  85. br = new BufferedReader(new InputStreamReader(System.in));
  86. }
  87.  
  88. String nextToken() {
  89. while (st == null || !st.hasMoreElements()) {
  90. try {
  91. st = new StringTokenizer(br.readLine());
  92. } catch (IOException e) {
  93. // TODO Auto-generated catch block
  94. e.printStackTrace();
  95. }
  96. }
  97. return st.nextToken();
  98. }
  99.  
  100. String nextLine() {
  101. st = null;
  102. try {
  103. return br.readLine();
  104. } catch (IOException e) {
  105. // TODO Auto-generated catch block
  106. e.printStackTrace();
  107. }
  108. return null;
  109. }
  110.  
  111. int nextInt() {
  112. return Integer.parseInt(nextToken());
  113. }
  114.  
  115. long nextLong() {
  116. return Long.parseLong(nextToken());
  117. }
  118.  
  119. double nextDouble() {
  120. return Double.parseDouble(nextToken());
  121. }
  122. }
  123. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement