abhinav3512

Untitled

Jan 14th, 2017
449
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 14.60 KB | None | 0 0
  1.  
  2. /**
  3.  *
  4.  * @author Abhinav Shalabh Kulshrestha
  5.  */
  6. class ScalesIOI2015code {
  7.    
  8.     int[] correct = new int[6];// to store grader generated Correct sequence
  9.     int[] w = new int[6];
  10.     int[][] p6 = new int[729][6];
  11.    
  12.     int count = 0; //for counting permutations
  13.     public void permutation(int n, int[] arr) {
  14.         int x;
  15.         if (n <= 0) {
  16.             System.arraycopy(arr, 0, p6[count], 0, arr.length);
  17.             count++;
  18.             return;
  19.         }
  20.         for (int i = 0; i < n; i++) {
  21.             x = arr[i];
  22.             arr[i] = arr[n - 1];
  23.             arr[n - 1] = x;
  24.             permutation(n - 1, arr);
  25.             x = arr[i];
  26.             arr[i] = arr[n - 1];
  27.             arr[n - 1] = x;
  28.         }//end for
  29.     }//end permutation  
  30. int getLightest(int a, int b, int c) {//grader function
  31.         int pa, pb, pc;
  32.         int z, lightest = 0;
  33.         pa = pb = pc = 0;
  34.         for (z = 0; z < 6; z++) {
  35.             if (correct[z] == a) {
  36.                 pa = z;
  37.             }
  38.             if (correct[z] == b) {
  39.                 pb = z;
  40.             }
  41.             if (correct[z] == c) {
  42.                 pc = z;
  43.             }
  44.         }
  45.         if ((pa < pb) && (pa < pc)) {
  46.             lightest = pa;
  47.         }
  48.         if ((pb < pa) && (pb < pc)) {
  49.             lightest = pb;
  50.         }
  51.         if ((pc < pb) && (pc < pa)) {
  52.             lightest = pc;
  53.         }
  54.         return (correct[lightest]);
  55.     }
  56.  
  57.     int getMedian(int a, int b, int c) {//grader function
  58.         int pa, pb, pc;
  59.         int z, median = 0;
  60.         pa = pb = pc = 0;
  61.         for (z = 0; z < 6; z++) {
  62.             if (correct[z] == a) {
  63.                 pa = z;
  64.             }
  65.             if (correct[z] == b) {
  66.                 pb = z;
  67.             }
  68.             if (correct[z] == c) {
  69.                 pc = z;
  70.             }
  71.         }
  72.         if (((pb < pa) && (pa < pc)) || ((pc < pa) && (pa < pb))) {
  73.             median = pa;
  74.         }
  75.         if (((pa < pb) && (pb < pc)) || ((pc < pb) && (pb < pa))) {
  76.             median = pb;
  77.         }
  78.         if (((pa < pc) && (pc < pb)) || ((pb < pc) && (pc < pa))) {
  79.             median = pc;
  80.         }
  81.         return (correct[median]);
  82.     }
  83.  
  84.     int getHeaviest(int a, int b, int c) {//grader function
  85.         int pa, pb, pc;
  86.         int z, heaviest = 0;
  87.         pa = pb = pc = 0;
  88.         for (z = 0; z < 6; z++) {
  89.             if (correct[z] == a) {
  90.                 pa = z;
  91.             }
  92.             if (correct[z] == b) {
  93.                 pb = z;
  94.             }
  95.             if (correct[z] == c) {
  96.                 pc = z;
  97.             }
  98.         }
  99.         if ((pa > pb) && (pa > pc)) {
  100.             heaviest = correct[pa];
  101.         }
  102.         if ((pb > pa) && (pb > pc)) {
  103.             heaviest = correct[pb];
  104.         }
  105.         if ((pc > pb) && (pc > pa)) {
  106.             heaviest = correct[pc];
  107.         }
  108.         return (heaviest);
  109.     }
  110.    
  111.      int getNextLightest(int a, int b, int c, int d){//grader function
  112.         int  pd = 0;
  113.         int z, nlt;
  114.         for (z = 0; z < 6; z++) {
  115.             if (correct[z] == d) {
  116.                 pd = z;
  117.                 break;
  118.             }
  119.         }
  120.         nlt = getLightest(a,b,c);
  121.          for(z = pd + 1; z <6;z++){
  122.              if((correct[z] == a)||(correct[z] == b)||(correct[z] == c)){
  123.                  nlt = correct[z];
  124.                  break;
  125.              }
  126.          }                        
  127.         return nlt;
  128.     }
  129.    
  130.      void orderCoins(){//original task function
  131.          int x1,x2,b1,b2,a1,a2,l,m;
  132.          x1 = x2 = b1 = b2 = a1 = a2 = l = m = 0;
  133.          // 1  call  
  134.          l = getLightest(1,2,3);        
  135.          if(l == 1){
  136.            x1 = 2;
  137.            x2 = 3;
  138.          }
  139.          if(l == 2){
  140.            x1 = 1;
  141.            x2 = 3;
  142.          }
  143.          if(l == 3){
  144.              x1 = 1;
  145.              x2 = 2;
  146.          }
  147.          // 2 call
  148.          m = getMedian(4,5,6);
  149.          if(m == 4){
  150.            b1 = 5;
  151.            b2 = 6;
  152.          }
  153.          if(m == 5){
  154.            b1 = 4;
  155.            b2 = 6;
  156.          }
  157.          if(m == 6){
  158.            b1 = 4;
  159.            b2 = 5;
  160.          }
  161.          
  162.          int t1,t2,t3,t4;
  163.          t1 = t2 = t3 = t4 = 0;
  164.          // 3 call
  165.          t1 = getNextLightest(b1,x1,x2,m);
  166.          if(t1 == b1){
  167.              //4 call
  168.              t2 = getLightest(x1,x2,m);
  169.              if(t2 == m){
  170.                  //5 call
  171.                  t3 = getNextLightest(x1,x2,l,b1);
  172.                  if((t3 == x1)||(t3 == x2)){
  173.                      a1 = t3;
  174.                      a2 = x1 + x2 - t3;
  175.                      //6 call
  176.                      t4 = getMedian(b2,l,m);
  177.                      if(t4 == b2){                        
  178.                         w[0] = l; w[1] = b2; w[2] = m; w[3] = b1; w[4] = a1; w[5] = a2;
  179.                  }
  180.                      if(t4 == l){                        
  181.                         w[0] = b2; w[1] = l; w[2] = m; w[3] = b1; w[4] = a1; w[5] = a2;
  182.                  }
  183.                      if(t4 == m){                        
  184.                         w[0] = b2; w[1] = m; w[2] = l; w[3] = b1; w[4] = a1; w[5] = a2;
  185.                  }
  186.              }
  187.                  if(t3 == l){
  188.                      // 6 call
  189.                      t4 = getHeaviest(x1,x2,l);
  190.                      if((t4 == x1)||(t4 == x2)){
  191.                          a1 = t4;
  192.                          a2 = x1 + x2 - t4;
  193.                          w[0] = b2; w[1] = m; w[2] = b1; w[3] = l; w[4] = a2; w[5] = a1;
  194.                      }                    
  195.                  }
  196.          }    
  197.          if((t2 == x1)||(t2 == x2)){
  198.              a1 = t2;
  199.              a2 = x1 + x2 - t2;
  200.              // 5 call
  201.              t3 = getNextLightest(l,a2,b2,m);
  202.              if(t3 == l){
  203.                  //6 call
  204.                  t4 = getMedian(a1,b2,a2);
  205.                  if(t4 == a1){
  206.                       w[0] = l; w[1] = b2; w[2] = a1; w[3] = a2; w[4] = m; w[5] = b1;
  207.                  }
  208.                  if(t4 == b2){
  209.                       w[0] = l; w[1] = a1; w[2] = b2; w[3] = a2; w[4] = m; w[5] = b1;
  210.                  }
  211.                  if(t4 == a2){
  212.                       w[0] = l; w[1] = a1; w[2] = a2; w[3] = b2; w[4] = m; w[5] = b1;
  213.                  }
  214.              }else if(t3 == a2) {
  215.                  //6 call
  216.                  t4 = getMedian(l,b2,a1);
  217.                  if(t4 == l){
  218.                       w[0] = b2; w[1] = l; w[2] = a1; w[3] = m; w[4] = b1; w[5] = a2;
  219.                  }
  220.                  if(t4 == b2){
  221.                       w[0] = l; w[1] = b2; w[2] = a1; w[3] = m; w[4] = b1; w[5] = a2;
  222.                  }
  223.                  if(t4 == a1){
  224.                       w[0] = l; w[1] = a1; w[2] = b2; w[3] = m; w[4] = b1; w[5] = a2;
  225.                  }
  226.              }else if(t3 == b2){
  227.                  //6 call
  228.                  t4 = getLightest(l,b1,b2);
  229.                  if(t4 == l){
  230.                       w[0] = l; w[1] = b1; w[2] = a1; w[3] = a2; w[4] = m; w[5] = b2;
  231.                  }
  232.                   if(t4 == b1){
  233.                       w[0] = b1; w[1] = l; w[2] = a1; w[3] = a2; w[4] = m; w[5] = b2;
  234.                  }
  235.                    if(t4 == b2){
  236.                       w[0] = b2; w[1] = l; w[2] = a1; w[3] = a2; w[4] = m; w[5] = b1;
  237.                  }
  238.              }
  239.              }
  240.          }else if((t1 == x1)||(t1 == x2)){
  241.              a1 =t1;
  242.              a2 = x1+x2 -t1;
  243.              //4 call
  244.              t2 = getMedian(l,a2,b1);
  245.              if(t2 == l){
  246.                  //5 call
  247.                  t3 = getNextLightest(a1,l,b2,m);
  248.                  if( t3 == a1){
  249.                    //6 call
  250.                    t4 = getMedian(a1,b2,a2);
  251.                    if(t4 == a1){
  252.                       w[0] = b1; w[1] = l; w[2] = a2; w[3] = m; w[4] = a1; w[5] = b2;
  253.                    }
  254.                    if(t4 == b2){
  255.                       w[0] = b1; w[1] = l; w[2] = m; w[3] = a1; w[4] = b2; w[5] = a2;
  256.                    }
  257.                    if(t4 == a2){
  258.                       w[0] = b1; w[1] = l; w[2] = m; w[3] = a1; w[4] = a2; w[5] = b2;
  259.                    }//end t4
  260.                  }// end t3
  261.                   if( t3 == b2){
  262.                       //6 call
  263.                       t4 = getMedian(l,a2,b2);
  264.                       if(t4 == l){
  265.                         w[0] = b1; w[1] = m; w[2] = b2; w[3] = l; w[4] = a1; w[5] = a2;  
  266.                       }
  267.                       if(t4 == a2){
  268.                         w[0] = b1; w[1] = l; w[2] = a2; w[3] = m; w[4] = b2; w[5] = a1;  
  269.                       }
  270.                       if(t4 == b2){
  271.                         w[0] = b1; w[1] = l; w[2] = m; w[3] = b2; w[4] = a1; w[5] = a2;  
  272.                       }//end t4
  273.                   }//end t3
  274.                   if(t3 == l){
  275.                       //6 call
  276.                       t4 = getMedian(a1,b2,a2);
  277.                       if(t4 == a1){
  278.                          w[0] = b1; w[1] = m; w[2] = l; w[3] = b2; w[4] = a1; w[5] = a2;  
  279.                       }
  280.                       if(t4 == b2){
  281.                          w[0] = b1; w[1] = m; w[2] = l; w[3] = a1; w[4] = b2; w[5] = a2;  
  282.                       }
  283.                       if(t4 == a2){
  284.                          w[0] = b1; w[1] = m; w[2] = l; w[3] = a1; w[4] = a2; w[5] = b2;  
  285.                       }// end t4
  286.                   }//end t3
  287.              } // end t2
  288.              if(t2 == a2){
  289.                  //5 call
  290.                  t3 = getHeaviest(a2,b2,m);
  291.                  if(t3 == a2){
  292.                      //6 call
  293.                      t4 = getNextLightest(b2,m,b1,l);
  294.                      if( t4 == b2){
  295.                          w[0] = l; w[1] = b2; w[2] = m; w[3] = a1; w[4] = a2; w[5] = b1;  
  296.                      }//end t4
  297.                      if( t4 == m){
  298.                          w[0] = b2; w[1] = l; w[2] = m; w[3] = a1; w[4] = a2; w[5] = b1;  
  299.                      }
  300.                      if( t4 == b1){
  301.                          w[0] = b2; w[1] = m; w[2] = l; w[3] = a1; w[4] = a2; w[5] = b1;  
  302.                      }// end t4
  303.                  }// end t3
  304.                  if(t3 == b2){
  305.                      //6 call
  306.                      t4 = getNextLightest(l,b2,b1,a1);
  307.                      if( t4 == l){
  308.                          w[0] = l; w[1] = a2; w[2] = b1; w[3] = m; w[4] = b2; w[5] = a1;  
  309.                      }//end t4
  310.                      if( t4 == b2){
  311.                          w[0] = l; w[1] = a2; w[2] = b1; w[3] = m; w[4] = a1; w[5] = b2;  
  312.                      }
  313.                      if( t4 == b1){
  314.                          w[0] = l; w[1] = a1; w[2] = a2; w[3] = b1; w[4] = m; w[5] = b2;  
  315.                      }// end t4
  316.                  }// end t3
  317.                  if(t3 == m){
  318.                      //6 call
  319.                      t4 = getNextLightest(l,a2,m,b2);
  320.                      if( t4 == l){
  321.                          w[0] = b2; w[1] = l; w[2] = a2; w[3] = m; w[4] = a1; w[5] = b1;  
  322.                      }//end t4
  323.                      if( t4 == a2){
  324.                          w[0] = l; w[1] = b2; w[2] = a2; w[3] = m; w[4] = a1; w[5] = b1;  
  325.                      }
  326.                      if( t4 == m){
  327.                          w[0] = l; w[1] = a2; w[2] = b2; w[3] = m; w[4] = a1; w[5] = b1;  
  328.                      }// end t4
  329.                  }// end t3
  330.              }// end t2
  331.              if(t2 == b1){
  332.                  //5 call
  333.                  t3 = getNextLightest(b2,m,l,a2);
  334.                  if(t3 == b2){
  335.                      // 6 call
  336.                      t4 = getMedian(l,m,b1);
  337.                      if(t4 == l){
  338.                         w[0] = b2; w[1] = m; w[2] = l; w[3] = a1; w[4] = b1; w[5] = a2;    
  339.                      }
  340.                      if(t4 == m){
  341.                         w[0] = b2; w[1] = l; w[2] = m; w[3] = a1; w[4] = b1; w[5] = a2;    
  342.                      }
  343.                      if(t4 == b1){
  344.                         w[0] = l; w[1] = b1; w[2] = m; w[3] = a1; w[4] = a2; w[5] = b2;    
  345.                      }// end t4  
  346.                  }// end t3
  347.                  if( t3 == m){
  348.                      //6 call
  349.                      t4 = getMedian(a1,a2,b2);
  350.                      if(t4 == a1){
  351.                        w[0] = l; w[1] = b1; w[2] = a2; w[3] = m; w[4] = a1; w[5] = b2;  
  352.                      }
  353.                      if(t4 == a2){
  354.                        w[0] = l; w[1] = a1; w[2] = b1; w[3] = a2; w[4] = m; w[5] = b2;  
  355.                      }
  356.                      if(t4 == b2){
  357.                        w[0] = l; w[1] = b1; w[2] = a2; w[3] = m; w[4] = b2; w[5] = a1;  
  358.                      }//end t4
  359.                  }//end t3
  360.                  if(t3 == l){
  361.                      // 6 call
  362.                     t4 = getMedian(a1,b2,m);
  363.                       if(t4 == a1){
  364.                        w[0] = l; w[1] = b1; w[2] = m; w[3] = a1; w[4] = b2; w[5] = a2;  
  365.                      }
  366.                      if(t4 == b2){
  367.                        w[0] = l; w[1] = b1; w[2] = m; w[3] = b2; w[4] = a1; w[5] = a2;  
  368.                      }
  369.                      if(t4 == m){
  370.                        w[0] = l; w[1] = b2; w[2] = m; w[3] = a1; w[4] = b1; w[5] = a2;  
  371.                      }//end t4
  372.                  }// end t3
  373.              }//end t2
  374.          }//end t1
  375.      }//end orderCoins
  376.      void answer(){//task function
  377.          System.out.println("The correct order of coin is:");
  378.          for(int i = 0; i < 6; i++){
  379.              if(i < 5)
  380.                  System.out.print(w[i]+" < ");
  381.              else
  382.                  System.out.print(w[i]);  
  383.          }//end
  384.          System.out.println();
  385.      }//end answer    
  386. }//end class  
  387. public class ScalesIOI2015{
  388.     public static void main(String args[]) {        
  389.         ScalesIOI2015code s1 = new ScalesIOI2015code();          
  390.         int[][] p6copy = new int[729][6];
  391.         int[] arr2 = {1,2,3,4,5,6};
  392.         int n2 = arr2.length;
  393.         s1.permutation(n2, arr2);
  394.          for(int i2 = 0; i2 < 729; i2++)            
  395.             System.arraycopy(s1.p6[i2], 0, p6copy[i2], 0, 6);
  396.         for(int i2 = 0; i2 < 720; i2++){            
  397.             System.arraycopy(p6copy[i2], 0, s1.correct, 0, 6);  
  398.                 System.out.print(" For Grader generated CORRECT sequence: " +(i2+1)+"::-");
  399.                 for(int j2 =0; j2 < 6;j2++)
  400.                     System.out.print(" " +s1.correct[j2]);
  401.                 s1.orderCoins();
  402.                 for(int ct = 0; ct < 6; ct++){
  403.                     if(s1.correct[ct] != s1.w[ct])
  404.                         System.out.println("There is an error.");
  405.                 }
  406.                 System.out.println();
  407.                 s1.answer();
  408.         }
  409.     }//end main    
  410. }//end class
Add Comment
Please, Sign In to add comment