Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- *
- * @author Abhinav Shalabh Kulshrestha
- */
- class ScalesIOI2015code {
- int[] correct = new int[6];// to store grader generated Correct sequence
- int[] w = new int[6];
- int[][] p6 = new int[729][6];
- int count = 0; //for counting permutations
- public void permutation(int n, int[] arr) {
- int x;
- if (n <= 0) {
- System.arraycopy(arr, 0, p6[count], 0, arr.length);
- count++;
- return;
- }
- for (int i = 0; i < n; i++) {
- x = arr[i];
- arr[i] = arr[n - 1];
- arr[n - 1] = x;
- permutation(n - 1, arr);
- x = arr[i];
- arr[i] = arr[n - 1];
- arr[n - 1] = x;
- }//end for
- }//end permutation
- int getLightest(int a, int b, int c) {//grader function
- int pa, pb, pc;
- int z, lightest = 0;
- pa = pb = pc = 0;
- for (z = 0; z < 6; z++) {
- if (correct[z] == a) {
- pa = z;
- }
- if (correct[z] == b) {
- pb = z;
- }
- if (correct[z] == c) {
- pc = z;
- }
- }
- if ((pa < pb) && (pa < pc)) {
- lightest = pa;
- }
- if ((pb < pa) && (pb < pc)) {
- lightest = pb;
- }
- if ((pc < pb) && (pc < pa)) {
- lightest = pc;
- }
- return (correct[lightest]);
- }
- int getMedian(int a, int b, int c) {//grader function
- int pa, pb, pc;
- int z, median = 0;
- pa = pb = pc = 0;
- for (z = 0; z < 6; z++) {
- if (correct[z] == a) {
- pa = z;
- }
- if (correct[z] == b) {
- pb = z;
- }
- if (correct[z] == c) {
- pc = z;
- }
- }
- if (((pb < pa) && (pa < pc)) || ((pc < pa) && (pa < pb))) {
- median = pa;
- }
- if (((pa < pb) && (pb < pc)) || ((pc < pb) && (pb < pa))) {
- median = pb;
- }
- if (((pa < pc) && (pc < pb)) || ((pb < pc) && (pc < pa))) {
- median = pc;
- }
- return (correct[median]);
- }
- int getHeaviest(int a, int b, int c) {//grader function
- int pa, pb, pc;
- int z, heaviest = 0;
- pa = pb = pc = 0;
- for (z = 0; z < 6; z++) {
- if (correct[z] == a) {
- pa = z;
- }
- if (correct[z] == b) {
- pb = z;
- }
- if (correct[z] == c) {
- pc = z;
- }
- }
- if ((pa > pb) && (pa > pc)) {
- heaviest = correct[pa];
- }
- if ((pb > pa) && (pb > pc)) {
- heaviest = correct[pb];
- }
- if ((pc > pb) && (pc > pa)) {
- heaviest = correct[pc];
- }
- return (heaviest);
- }
- int getNextLightest(int a, int b, int c, int d){//grader function
- int pd = 0;
- int z, nlt;
- for (z = 0; z < 6; z++) {
- if (correct[z] == d) {
- pd = z;
- break;
- }
- }
- nlt = getLightest(a,b,c);
- for(z = pd + 1; z <6;z++){
- if((correct[z] == a)||(correct[z] == b)||(correct[z] == c)){
- nlt = correct[z];
- break;
- }
- }
- return nlt;
- }
- void orderCoins(){//original task function
- int x1,x2,b1,b2,a1,a2,l,m;
- x1 = x2 = b1 = b2 = a1 = a2 = l = m = 0;
- // 1 call
- l = getLightest(1,2,3);
- if(l == 1){
- x1 = 2;
- x2 = 3;
- }
- if(l == 2){
- x1 = 1;
- x2 = 3;
- }
- if(l == 3){
- x1 = 1;
- x2 = 2;
- }
- // 2 call
- m = getMedian(4,5,6);
- if(m == 4){
- b1 = 5;
- b2 = 6;
- }
- if(m == 5){
- b1 = 4;
- b2 = 6;
- }
- if(m == 6){
- b1 = 4;
- b2 = 5;
- }
- int t1,t2,t3,t4;
- t1 = t2 = t3 = t4 = 0;
- // 3 call
- t1 = getNextLightest(b1,x1,x2,m);
- if(t1 == b1){
- //4 call
- t2 = getLightest(x1,x2,m);
- if(t2 == m){
- //5 call
- t3 = getNextLightest(x1,x2,l,b1);
- if((t3 == x1)||(t3 == x2)){
- a1 = t3;
- a2 = x1 + x2 - t3;
- //6 call
- t4 = getMedian(b2,l,m);
- if(t4 == b2){
- w[0] = l; w[1] = b2; w[2] = m; w[3] = b1; w[4] = a1; w[5] = a2;
- }
- if(t4 == l){
- w[0] = b2; w[1] = l; w[2] = m; w[3] = b1; w[4] = a1; w[5] = a2;
- }
- if(t4 == m){
- w[0] = b2; w[1] = m; w[2] = l; w[3] = b1; w[4] = a1; w[5] = a2;
- }
- }
- if(t3 == l){
- // 6 call
- t4 = getHeaviest(x1,x2,l);
- if((t4 == x1)||(t4 == x2)){
- a1 = t4;
- a2 = x1 + x2 - t4;
- w[0] = b2; w[1] = m; w[2] = b1; w[3] = l; w[4] = a2; w[5] = a1;
- }
- }
- }
- if((t2 == x1)||(t2 == x2)){
- a1 = t2;
- a2 = x1 + x2 - t2;
- // 5 call
- t3 = getNextLightest(l,a2,b2,m);
- if(t3 == l){
- //6 call
- t4 = getMedian(a1,b2,a2);
- if(t4 == a1){
- w[0] = l; w[1] = b2; w[2] = a1; w[3] = a2; w[4] = m; w[5] = b1;
- }
- if(t4 == b2){
- w[0] = l; w[1] = a1; w[2] = b2; w[3] = a2; w[4] = m; w[5] = b1;
- }
- if(t4 == a2){
- w[0] = l; w[1] = a1; w[2] = a2; w[3] = b2; w[4] = m; w[5] = b1;
- }
- }else if(t3 == a2) {
- //6 call
- t4 = getMedian(l,b2,a1);
- if(t4 == l){
- w[0] = b2; w[1] = l; w[2] = a1; w[3] = m; w[4] = b1; w[5] = a2;
- }
- if(t4 == b2){
- w[0] = l; w[1] = b2; w[2] = a1; w[3] = m; w[4] = b1; w[5] = a2;
- }
- if(t4 == a1){
- w[0] = l; w[1] = a1; w[2] = b2; w[3] = m; w[4] = b1; w[5] = a2;
- }
- }else if(t3 == b2){
- //6 call
- t4 = getLightest(l,b1,b2);
- if(t4 == l){
- w[0] = l; w[1] = b1; w[2] = a1; w[3] = a2; w[4] = m; w[5] = b2;
- }
- if(t4 == b1){
- w[0] = b1; w[1] = l; w[2] = a1; w[3] = a2; w[4] = m; w[5] = b2;
- }
- if(t4 == b2){
- w[0] = b2; w[1] = l; w[2] = a1; w[3] = a2; w[4] = m; w[5] = b1;
- }
- }
- }
- }else if((t1 == x1)||(t1 == x2)){
- a1 =t1;
- a2 = x1+x2 -t1;
- //4 call
- t2 = getMedian(l,a2,b1);
- if(t2 == l){
- //5 call
- t3 = getNextLightest(a1,l,b2,m);
- if( t3 == a1){
- //6 call
- t4 = getMedian(a1,b2,a2);
- if(t4 == a1){
- w[0] = b1; w[1] = l; w[2] = a2; w[3] = m; w[4] = a1; w[5] = b2;
- }
- if(t4 == b2){
- w[0] = b1; w[1] = l; w[2] = m; w[3] = a1; w[4] = b2; w[5] = a2;
- }
- if(t4 == a2){
- w[0] = b1; w[1] = l; w[2] = m; w[3] = a1; w[4] = a2; w[5] = b2;
- }//end t4
- }// end t3
- if( t3 == b2){
- //6 call
- t4 = getMedian(l,a2,b2);
- if(t4 == l){
- w[0] = b1; w[1] = m; w[2] = b2; w[3] = l; w[4] = a1; w[5] = a2;
- }
- if(t4 == a2){
- w[0] = b1; w[1] = l; w[2] = a2; w[3] = m; w[4] = b2; w[5] = a1;
- }
- if(t4 == b2){
- w[0] = b1; w[1] = l; w[2] = m; w[3] = b2; w[4] = a1; w[5] = a2;
- }//end t4
- }//end t3
- if(t3 == l){
- //6 call
- t4 = getMedian(a1,b2,a2);
- if(t4 == a1){
- w[0] = b1; w[1] = m; w[2] = l; w[3] = b2; w[4] = a1; w[5] = a2;
- }
- if(t4 == b2){
- w[0] = b1; w[1] = m; w[2] = l; w[3] = a1; w[4] = b2; w[5] = a2;
- }
- if(t4 == a2){
- w[0] = b1; w[1] = m; w[2] = l; w[3] = a1; w[4] = a2; w[5] = b2;
- }// end t4
- }//end t3
- } // end t2
- if(t2 == a2){
- //5 call
- t3 = getHeaviest(a2,b2,m);
- if(t3 == a2){
- //6 call
- t4 = getNextLightest(b2,m,b1,l);
- if( t4 == b2){
- w[0] = l; w[1] = b2; w[2] = m; w[3] = a1; w[4] = a2; w[5] = b1;
- }//end t4
- if( t4 == m){
- w[0] = b2; w[1] = l; w[2] = m; w[3] = a1; w[4] = a2; w[5] = b1;
- }
- if( t4 == b1){
- w[0] = b2; w[1] = m; w[2] = l; w[3] = a1; w[4] = a2; w[5] = b1;
- }// end t4
- }// end t3
- if(t3 == b2){
- //6 call
- t4 = getNextLightest(l,b2,b1,a1);
- if( t4 == l){
- w[0] = l; w[1] = a2; w[2] = b1; w[3] = m; w[4] = b2; w[5] = a1;
- }//end t4
- if( t4 == b2){
- w[0] = l; w[1] = a2; w[2] = b1; w[3] = m; w[4] = a1; w[5] = b2;
- }
- if( t4 == b1){
- w[0] = l; w[1] = a1; w[2] = a2; w[3] = b1; w[4] = m; w[5] = b2;
- }// end t4
- }// end t3
- if(t3 == m){
- //6 call
- t4 = getNextLightest(l,a2,m,b2);
- if( t4 == l){
- w[0] = b2; w[1] = l; w[2] = a2; w[3] = m; w[4] = a1; w[5] = b1;
- }//end t4
- if( t4 == a2){
- w[0] = l; w[1] = b2; w[2] = a2; w[3] = m; w[4] = a1; w[5] = b1;
- }
- if( t4 == m){
- w[0] = l; w[1] = a2; w[2] = b2; w[3] = m; w[4] = a1; w[5] = b1;
- }// end t4
- }// end t3
- }// end t2
- if(t2 == b1){
- //5 call
- t3 = getNextLightest(b2,m,l,a2);
- if(t3 == b2){
- // 6 call
- t4 = getMedian(l,m,b1);
- if(t4 == l){
- w[0] = b2; w[1] = m; w[2] = l; w[3] = a1; w[4] = b1; w[5] = a2;
- }
- if(t4 == m){
- w[0] = b2; w[1] = l; w[2] = m; w[3] = a1; w[4] = b1; w[5] = a2;
- }
- if(t4 == b1){
- w[0] = l; w[1] = b1; w[2] = m; w[3] = a1; w[4] = a2; w[5] = b2;
- }// end t4
- }// end t3
- if( t3 == m){
- //6 call
- t4 = getMedian(a1,a2,b2);
- if(t4 == a1){
- w[0] = l; w[1] = b1; w[2] = a2; w[3] = m; w[4] = a1; w[5] = b2;
- }
- if(t4 == a2){
- w[0] = l; w[1] = a1; w[2] = b1; w[3] = a2; w[4] = m; w[5] = b2;
- }
- if(t4 == b2){
- w[0] = l; w[1] = b1; w[2] = a2; w[3] = m; w[4] = b2; w[5] = a1;
- }//end t4
- }//end t3
- if(t3 == l){
- // 6 call
- t4 = getMedian(a1,b2,m);
- if(t4 == a1){
- w[0] = l; w[1] = b1; w[2] = m; w[3] = a1; w[4] = b2; w[5] = a2;
- }
- if(t4 == b2){
- w[0] = l; w[1] = b1; w[2] = m; w[3] = b2; w[4] = a1; w[5] = a2;
- }
- if(t4 == m){
- w[0] = l; w[1] = b2; w[2] = m; w[3] = a1; w[4] = b1; w[5] = a2;
- }//end t4
- }// end t3
- }//end t2
- }//end t1
- }//end orderCoins
- void answer(){//task function
- System.out.println("The correct order of coin is:");
- for(int i = 0; i < 6; i++){
- if(i < 5)
- System.out.print(w[i]+" < ");
- else
- System.out.print(w[i]);
- }//end
- System.out.println();
- }//end answer
- }//end class
- public class ScalesIOI2015{
- public static void main(String args[]) {
- ScalesIOI2015code s1 = new ScalesIOI2015code();
- int[][] p6copy = new int[729][6];
- int[] arr2 = {1,2,3,4,5,6};
- int n2 = arr2.length;
- s1.permutation(n2, arr2);
- for(int i2 = 0; i2 < 729; i2++)
- System.arraycopy(s1.p6[i2], 0, p6copy[i2], 0, 6);
- for(int i2 = 0; i2 < 720; i2++){
- System.arraycopy(p6copy[i2], 0, s1.correct, 0, 6);
- System.out.print(" For Grader generated CORRECT sequence: " +(i2+1)+"::-");
- for(int j2 =0; j2 < 6;j2++)
- System.out.print(" " +s1.correct[j2]);
- s1.orderCoins();
- for(int ct = 0; ct < 6; ct++){
- if(s1.correct[ct] != s1.w[ct])
- System.out.println("There is an error.");
- }
- System.out.println();
- s1.answer();
- }
- }//end main
- }//end class
Add Comment
Please, Sign In to add comment