fork download
  1. // no of ways to divide the given array into 4 equal parts
  2. import java.util.*;
  3. public class Main
  4. {
  5. public static void main(String[] args) {
  6. Scanner sc = new Scanner(System.in);
  7. int n=sc.nextInt();
  8. int[]nums = new int[n];
  9.  
  10. for(int i= 0;i<n;i++){
  11. nums[i]=sc.nextInt();
  12. }
  13. int tot_sum=0;
  14. for(int i=0;i<n;i++){
  15. tot_sum+=nums[i];
  16. }
  17. int lhs=0;
  18. int rhs=0;
  19. int count=0;
  20. int count2=0;
  21. int count_ans=0;
  22. if(tot_sum%4 ==0){
  23. int y=tot_sum/4;
  24.  
  25. //I need current sum
  26. int current_sum=0;
  27.  
  28. HashMap<Integer,Integer>f = new HashMap<>();
  29. HashMap<Integer,Integer>g = new HashMap<>();
  30.  
  31. int current_sumg=0;
  32.  
  33. for(int j=n-1;j>=0;j--){
  34. current_sumg+=nums[j];
  35. g.put(current_sumg,g.getOrDefault(current_sumg,0)+1);
  36. }
  37.  
  38. for(int j=0;j<n-1;j++){
  39. lhs+=nums[j];
  40. rhs=tot_sum-lhs;
  41. current_sum+=nums[j];
  42.  
  43. g.put(current_sumg,g.get(current_sumg)-1);
  44. if(g.get(current_sumg)==0){
  45. g.remove(current_sumg);
  46. }
  47.  
  48. current_sumg-=nums[j];
  49.  
  50. if(lhs == 2*y && rhs ==2*y ){
  51. count=count + f.getOrDefault(current_sum/2,0) ;
  52. count2=count2 +g.getOrDefault(current_sumg/2,0);
  53. count_ans +=count*count2;
  54. }
  55. f.put(current_sum,f.getOrDefault(current_sum,0)+1);
  56. }
  57. }
  58. System.out.print("Number of ways to divide in four equal parts :" + count_ans);
  59. }
  60. }
Runtime error #stdin #stdout #stderr 0.13s 17624KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Exception in thread "main" java.util.NoSuchElementException
	at java.base/java.util.Scanner.throwFor(Scanner.java:937)
	at java.base/java.util.Scanner.next(Scanner.java:1594)
	at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
	at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
	at Main.main(Main.java:7)