[JAVA] ABC - 020 - A & B & C.

AtCoder ABC 020 A&B&C AtCoder - 020

** 16.05.2019 ** - Hinzufügung des Problemnamens

Ein Quiz

	private void solveA() {
		int n = nextInt();

		out.println(n == 1 ? "ABC" : "chokudai");
	}

B - Takahashi-Kun- und Zeichenkettenkomprimierung

	private void solveB() {
		String res = IntStream.range(0, 2).mapToObj(i -> next()).collect(Collectors.joining());

		out.println(Integer.parseInt(res) * 2);
	}

C - Wand durch: AC mit DFS (Memo Recursive)

Die hypothetische Lösung lautet wie folgt

  1. Kürzeste Routenberechnung mit Worshall Floyd / Bellmanford / Dyxtra
  2. Eingrenzen Sie t durch Dichotomie

Zuerst habe ich genauso darüber nachgedacht wie die angenommene Lösungsmethode, also habe ich sie mit Worshall Floyd implementiert, aber obwohl sie die Probe oder meinen angenommenen Testfall durchläuft, wird ungefähr ein Viertel WA, wenn ich sie tatsächlich dem Richter vorwerfe. Ich kenne den Grund für WA nicht, also habe ich aufgegeben und es mit DFS implementiert. Ich muss es irgendwo wieder mit der angenommenen Lösungsmethode lösen.   ** Wenn Sie ein Worshall Floyd sind, sagen Sie mir bitte, dass jemand wirklich auf die Quelle schaut und WA wird **

Ein Memorandum bei Implementierung mit Memokonvertierung (TLE-Gegenmaßnahmen)

――Einige der für selbstverständlich gehaltenen Implementierungsmethoden sind langsamer als erwartet. ――Erstens war es die ganze Zeit TLE. Als Ergebnis der Überprüfung beim Ändern eines Codes konnte TLE sofort aufgelöst werden, indem nur Folgendes gestoppt wurde (während des Änderns kann es ohne Rückgabewert ungültig sein. Es war jedoch auch auf subtile Weise wirksam, es für nichtig zu erklären.

	private void solveC() {
		int h = nextInt();
		int w = nextInt();
		long t = nextLong();
		char[][] wk = new char[h][w];

		int sX = 0;
		int sY = 0;
		int gX = 0;
		int gY = 0;
		for (int i = 0; i < wk.length; i++) {
			wk[i] = next().toCharArray();
			for (int j = 0; j < wk[i].length; j++) {
				if (wk[i][j] == 'S') {
					sX = i;
					sY = j;
				} else if (wk[i][j] == 'G') {
					gX = i;
					gY = j;
				}
			}
		}
		long low = 1;
		long high = t;
		long[][] memo = new long[h][w];

		while (high - low != 1) {
			long mid = (high + low) / 2;
			for (long[] l : memo) {
				Arrays.fill(l, Long.MAX_VALUE);
			}
			dfsC(wk, h, w, t, sX, sY, mid, 0, memo, new boolean[h][w]);
			if (memo[gX][gY] <= t) {
				low = mid;
			} else {
				high = mid;
			}
		}

		out.println(low);
	}


	static final int[] dx = new int[] { 0, 0, -1, 1 };
	static final int[] dy = new int[] { 1, -1, 0, 0 };

	private void dfsC(char[][] wk, int h, int w, long t, int currentH, int currentW, long x, long val,
			long[][] dist, boolean[][] pass) {

		/*
		 *Suchbereich überschreiten
		 *Oder
		 *Bereits gesucht
		 */
		if (currentH < 0 || currentH >= h || currentW < 0 || currentW >= w || pass[currentH][currentW]) {
			return;
		}

		/*
		 *Keine weitere Suche erforderlich, wenn der aktuelle Wert kleiner als der bereits vorhandene Wert ist
		 *Keine weitere Suche erforderlich, wenn der aktuelle Wert t überschreitet
		 */
		if (dist[currentH][currentW] < val || val > t) {
			return;
		} else {
			/*
			 *Aktualisieren Sie den Wert, da es sich um ein Suchziel handelt
			 *Ich möchte es wirklich auf min setzen, aber ich kann es nicht rechtzeitig schaffen
			 */
			dist[currentH][currentW] = val;
		}
		/*
		 *Weil es G ist, endet es
		 */
		if (wk[currentH][currentW] == 'G' || (val > 0 && wk[currentH][currentW] == 'S')) {
			return;
		}
		pass[currentH][currentW] = true;
		/*
		 *Suche in 4 Richtungen
		 */
		for (int i = 0; i < 4; i++) {
			int wkH = currentH + dx[i];
			int wkW = currentW + dy[i];
			if (wkH < 0 || wkH >= h || wkW < 0 || wkW >= w) {
				continue;
			}
			long currVal = 0;
			switch (wk[wkH][wkW]) {
			case 'S':
			case 'G':
			case '.':
				currVal = 1;
				break;
			case '#':
				currVal = x;
				break;
			default:
				break;
			}

			dfsC(wk, h, w, t, wkH, wkW, x, val + currVal, dist, pass);
		}
		pass[currentH][currentW] = false;
	}

Recommended Posts

ABC - 013-A & B & C.
ABC - 036-A & B & C.
ABC - 010 - A & B & C.
ABC - 028 - A & B & C.
ABC - 015 - A & B & C.
ABC - 128 - A & B & C.
ABC - 012-A & B & C.
ABC - 018 - A & B & C.
ABC - 017 - A & B & C.
ABC - 029 - A & B & C.
ABC - 022 - A & B & C.
ABC - 019 - A & B & C.
ABC - 020 - A & B & C.
ABC - 030 - A & B & C.
ABC - 127 - A & B & C.
ABC - 007 - A & B & C.
ABC - 132 - A & B & C.
ABC - 026 - A & B & C.
ABC - 014 - A & B & C.
ABC - 016 - A & B & C.
ABC - 011-A & B & C.
ABC - 031 - A & B & C.
ABC - 021 - A & B & C.
ABC - 025 - A & B & C.
ABC - 024 - A & B & C.
ABC - 027 - A & B & C.
ABC - 080 - A & B & C.
ABC - 129 - A & B & C & D.
ABC - 133 - A & B & C & D.
ABC - 122 - A & B & C & D.
ABC - 125 - A & B & C & D.
ABC - 130 - A & B & C & D.
ABC - 126 - A & B & C & D.
ABC - 134 - A & B & C & D & E.
ABC - 131 - A & B & C & D & E.
diverta 2019 Programmierwettbewerb A & B & C & D.
AtCoder Anfängerwettbewerb 169 A, B, C mit Rubin
atcoder ABC113 C Problem
ABC093 C - Gleiche Ganzzahlen
atcoder ABC115 C Problem
AtCoder Anfängerwettbewerb 170 A, B, C bis Rubin
Eine Person, die C ++ schreibt, hat versucht, Java zu schreiben
Machen Sie einen SOAP-Aufruf in C #
Rufen Sie C-Sprachfunktionen von Swift aus auf
NLP4J 100 Sprachverarbeitungsklopfen mit NLP4J # 34 "A B"