Submission #262863

#TimeUsernameProblemLanguageResultExecution timeMemory
262863idk321Vision Program (IOI19_vision)Java
33 / 100
253 ms21892 KiB
import java.util.Arrays;
import java.util.Comparator;
import java.util.TreeSet;

public class vision {
	public void construct_network(int H, int W, int K) {
		int commands = 0;
		TreeSet<int[]> uniqueCommands = new TreeSet<int[]>(new ArrayComparator());
		for (int i = 0; i < H; i++) {
			for (int j = 0; j < W; j++) {

				for (int k = i; k < H; k++) {
					int remaining = K - k + i;
					if (remaining >= 0) {
						if (j + remaining < W) {
							int[] command = {i * W + j, k * W + j + remaining};
							uniqueCommands.add(command);
						}
						if (j - remaining >= 0) {
							int[] command = {i * W + j, k * W + j - remaining};
							//System.out.println(Arrays.toString(command));
							uniqueCommands.add(command);
						}
					}
				}
			}
		}

		for (int[] command : uniqueCommands) {
			grader.add_and(command);
			commands++;
		}

		int[] command = new int[commands];
		for (int i = H * W, j = 0; j < commands; i++, j++) command[j] = i;
		grader.add_or(command);
	}

	private static class ArrayComparator implements Comparator<int[]> {
		@Override
		public int compare(int[] o1, int[] o2) {
			int min1 = Math.min(o1[0], o1[1]);
			int min2 = Math.min(o2[0], o2[1]);
			int compare = Integer.compare(min1, min2);
			if (compare != 0) return compare;
			int max1 = Math.max(o1[0], o1[1]);
			int max2 = Math.max(o2[0], o2[1]);
			return Integer.compare(max1, max2);
		}
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...