Rezultati

Up. imeNalogaJezikRezultatČas oddaje
cilinder007-2017 Jungle Speed Java 100/100OK 11. maj '17 @ 18:52

Test Točke Porabljen spomin Porabljen čas Status
#1 9/9 32,715 MiB 0,000 s OK
#2 9/9 29,352 MiB 0,000 s OK
#3 9/9 32,141 MiB 0,000 s OK
#4 9/9 29,324 MiB 0,000 s OK
#5 9/9 29,227 MiB 0,000 s OK
#6 9/9 31,277 MiB 0,000 s OK
#7 9/9 34,887 MiB 0,000 s OK
#8 9/9 37,539 MiB 0,000 s OK
#9 9/9 34,441 MiB 0,000 s OK
#10 9/9 36,949 MiB 0,000 s OK
#11 10/10 37,883 MiB 0,000 s OK

Ocenjevani program (druga.java):
import java.util.*;
import java.util.LinkedList;

public class druga {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Scanner sc = new Scanner(System.in);
		
		int n = Integer.parseInt(sc.nextLine());
		
		
		int[][] karteVRoki = new int[n][72];
		int[][] karteNaKupcku = new int[n][72];
		int[] vrhiKupckov = new int[n];
		
		int a;
		int kupcek = 0;
		
		String buff = sc.nextLine();
		String[] cifre = buff.split(" ");
		int igralec = 0;
		for(String s : cifre) {
			
			karteVRoki[igralec][kupcek] = Integer.parseInt(s);
			
			igralec++;
			if(igralec == n){
				igralec = 0;
				kupcek++;
			}
		}
			
		
		/*while(sc.hasNextInt()) { //deljenje kart
			for(int i = 0; i < n; i++) {//gres po igralcih
				karteVRoki[i][kupcek] = sc.nextInt(); 
			}	
			kupcek++;
		}*/
		
		int igralecNaVrsti = 0;
		
		while(true) {
			int karta = zadnjaKarta(karteVRoki[igralecNaVrsti]);
			//System.out.println("Igralec na vrsti: " + igralecNaVrsti);
			//System.out.println(karta);
			//System.out.println(Arrays.toString(karteVRoki[igralecNaVrsti]));
			
			if(karta == -1) {//nima vec kart v roki
				
				//System.out.println("ima prazno roko, pobira svoj kupcek");
				poberiKupcek(karteVRoki[igralecNaVrsti], karteNaKupcku[igralecNaVrsti]);

				//System.out.println("v roki zdej: " + Arrays.toString(karteVRoki[igralecNaVrsti]));
				//System.out.println("na kupcku: " + Arrays.toString(karteNaKupcku[igralecNaVrsti]));
				karta = zadnjaKarta(karteVRoki[igralecNaVrsti]);
				//System.out.println("nova karta: " +  karta);
				
			}
			vrhiKupckov[igralecNaVrsti] = karta; //nastimamo kaj je na vrhu
			dajNaVrh(karteNaKupcku[igralecNaVrsti], karta); //damo karto na vrh njegovga kupcka
			int pobere = pobere(vrhiKupckov, karta, igralecNaVrsti); //prevermo ce pobere
			if(pobere != -1) {//pobere, je senkrat na vrsti
				//System.out.println("pobira kupcek");
				int[] kupcekZaPobrat = sestaviKupcka(karteNaKupcku[igralecNaVrsti], karteNaKupcku[pobere]);
				insert(karteVRoki[igralecNaVrsti], kupcekZaPobrat);
				vrhiKupckov[pobere] = 0;
				//System.out.println("v roki zdej: " + Arrays.toString(karteVRoki[igralecNaVrsti]));
				//System.out.println("na kupcku: " + Arrays.toString(karteNaKupcku[igralecNaVrsti]));
				igralecNaVrsti--; //je senkrat na vrsti
			}
			
			int zmagovalec = -1;
			if((zmagovalec = winCondition(karteVRoki, karteNaKupcku)) != -1) {
				System.out.print(zmagovalec+1);
				break;
					
			}
			
			igralecNaVrsti++;
			igralecNaVrsti = igralecNaVrsti%n;
			
			 
		}
		
		
		
		
	}
	
	static int winCondition(int[][] karteVRoki, int[][] karteNaKupcku) {
		for(int i = 0; i < karteVRoki.length; i++) {
			if(karteVRoki[i][0] == 0 && karteNaKupcku[i][0] == 0)
				return i;
		}
		
		return -1;
	}
	
	static void poberiKupcek(int[] roka, int[] kupcek) {
		for(int i = kupcek.length-1, j = 0; i >= 0; i--) {
			if(kupcek[i] == 0)
				continue;
			
			roka[j] = kupcek[i];
			j++;
		}
		
		kupcek = new int[72];
	}
	
	static int[] sestaviKupcka(int[] njegov, int[] soigralcev) {
		int[] novKupcek = new int[72];
		
		int k = 0;
		
		for (int i = njegov.length-1; i >= 0; i--) {
			if(njegov[i] == 0)
				continue;
			
			novKupcek[k] = njegov[i];
			njegov[i] = 0;
			k++;
		}
		
		for(int i = soigralcev.length-1; i >= 0; i--) {
			if(soigralcev[i] == 0)
				continue;
			
			novKupcek[k] = soigralcev[i];
			soigralcev[i] = 0;
			k++;
		}
		

		return novKupcek;
	}
	
	static int pobere(int[] karteNaVrhu, int karta, int igralec) {
		for(int i = 0; i < karteNaVrhu.length; i++) {
			if(i == igralec)
				continue;
			if(karteNaVrhu[i] == karta) {
				return i;
			}
		}
		return -1;
		
	}
	
	static int zadnjaKarta(int[] arr) {
		for(int i = arr.length-1; i >=0; i--) {
			if(arr[i] == 0)
				continue;
			
			int karta = arr[i];
			arr[i] = 0;
			return karta;
		}
		
		return -1; //nima vec kart v roki
	}
	
	static void dajNaVrh(int[] arr, int k) {
		for(int i = arr.length-1; i >=0; i--) {
			if(arr[i] == 0)
				continue;
			
			if(i+1 >= arr.length)
				break;
			arr[i+1] = k;
			return;
		}
		
		arr[0] = k;
	}
	
	static void insert(int[] arr, int[] insert) { //vstavi insert pred arr
		int[] buff = new int[72];
		for(int i = 0; i < arr.length; i++) {
			if(arr[i] == 0)
				break;
			buff[i] = arr[i];
		}
		
		int i = 0;
		for(; i < insert.length; i++) {
			if(insert[i] == 0)
				break;
			arr[i] = insert[i];
		}
		
		for(int j = 0;i < buff.length; j++, i++) {
			if(buff[j] == 0)
				break;
			arr[i] = buff[j];
		}
		
		insert = new int[72];
	}

}