[JAVA] ABC --022 --A & B & C

AtCoder ABC 022 A&B&C AtCoder - 022

** PostScript 2019/05/14 ** Problème B: modification du code pour obtenir le total de res

Un problème

--Vérifiez si le poids est dans la plage appropriée pour chaque prise

	private void solveA() {
		int n = nextInt();
		int s = nextInt();
		int t = nextInt();
		int w = nextInt();

		long sum = w;
		int res = 0;
		for (int i = 0; i < n; i++) {
			if (i != 0) {
				sum += nextInt();
			}
			if (s <= sum && sum <= t) {
				res++;
			}
		}

		out.println(res);
	}

Problème B

(2019/05/14 Correction de code pour obtenir le total de res)

		int numN = nextInt();

		Map<Integer, Long> tmp = IntStream.range(0, numN).map(i -> nextInt()).mapToObj(i -> new Integer(i))
				.collect(Collectors.groupingBy(s -> s, Collectors.counting()));

		long res = tmp.values().stream().mapToLong(i -> i - 1).sum();

		//		long res = tmp.values().stream().filter(i -> i.longValue() > 1).reduce(0L, (sum, i) -> sum += (i - 1));

		//		int[] wk = IntStream.range(0, numN).map(i -> nextInt()).toArray();
		//		Map<Integer, Long> tmp = Arrays.stream(wk).mapToObj(i -> new Integer(i))
		//				.collect(Collectors.groupingBy(s -> s, Collectors.counting()));
		//		long res = tmp.values().stream().filter(i -> i.longValue() > 1).reduce(0L, (sum, i) -> sum += (i - 1));

		out.println(res);

Problème C: méthode Worshall Floyd

―― Sortez de 1 et revenez à 1 ――Cependant, vous ne pouvez pas emprunter la même route

--Résultat du calcul de graphWithOutStart basé sur l'exemple 1 (résultat du calcul de la matrice adjacente 鵜 à l'exclusion du sommet 1) --Tous sont des tINF car ils ne passent pas par le sommet 1.

Pic 1 2 3 4 5
1 0 INF INF INF INF
2 INF 0 5 10 3
3 INF 5 0 5 2
4 INF 10 5 0 7
5 INF 3 2 7 0

--Pour comparaison: résultat du calcul du graphique basé sur l'exemple 1 (résultat du calcul du coût minimum pour chaque sommet)

Pic 1 2 3 4 5
Pic 1 0 2 6 1 5
2 2 0 5 3 3
3 6 5 0 5 2
4 1 3 5 0 6
5 5 3 2 6 0
	private void solveC() {
		final long CONST_INF = Long.MAX_VALUE / 10;

		int n = nextInt();
		int m = nextInt();
		long[][] graphWithOutStart = new long[n][n];
		long[][] graph = new long[n][n];
		List<Integer> edgeNearByStart = new ArrayList<Integer>();

		/*
		 *initialisation du graphe
		 * [1]Avec matrice adjacente comprenant[1]Créer une matrice adjacente sans
		 */
		for (int i = 0; i < n; i++) {
			Arrays.fill(graph[i], CONST_INF);
			Arrays.fill(graphWithOutStart[i], CONST_INF);
			graphWithOutStart[i][i] = 0;
			graph[i][i] = 0;
		}

		for (int i = 0; i < m; i++) {

			/*
			 *Selon l'indice-1 et capturer
			 */
			int from = nextInt() - 1;
			int to = nextInt() - 1;
			int cost = nextInt();
			if (from != 0) {
				/*
				 * [1]Graphique excluant
				 */
				graphWithOutStart[from][to] = cost;
				graphWithOutStart[to][from] = cost;
			} else {
				/*
				 * [1]Adjacent aux sommets
				 */
				edgeNearByStart.add(to);
			}
			graph[from][to] = cost;
			graph[to][from] = cost;
		}

		long res = Long.MAX_VALUE;

		Collections.sort(edgeNearByStart);

		/*
		 *Warshall - Méthode Floyd pour mettre à jour les sommets
		 */

		getMinByWarshall(graphWithOutStart, n);

		for (int i = 0; i < edgeNearByStart.size(); i++) {
			for (int j = i + 1; j < edgeNearByStart.size(); j++) {
				int start = edgeNearByStart.get(i);
				int end = edgeNearByStart.get(j);
				/*
				 * [1]De[Sommets adjacents 1]Coût+ [Sommets adjacents 1][Sommets adjacents 2]Coût+ [Sommets adjacents 2]De[1]Coût
				 */
				long total = graph[0][start] + graphWithOutStart[start][end] + graph[0][end];
				//Adoptez une faible valeur
				res = Long.min(res, total);
			}

		}

		out.println(res >= CONST_INF ? -1 : res);

	}

	/**
	 *
	 * @param edge
	 * @param point
	 */
	private void getMinByWarshall(long[][] edge, int point) {
		for (int k = 0; k < point; k++) {
			for (int i = 0; i < point; i++) {
				for (int j = 0; j < point; j++) {
					edge[i][j] = Long.min(edge[i][j], edge[i][k] + edge[k][j]);
				}
			}
		}

	}

Problème C: méthode Worshall Floyd (version de code court)

-Lors du calcul des [sommets adjacents 1-> sommets adjacents 2], j'ai créé une matrice adjacente qui omet le coût de 1 car elle passe deux fois par le même endroit via [1]. Si vous démarrez l'indice de [1] au lieu de [0], vous pouvez calculer le coût sans passer par [Peak 1]. .. .. ――En utilisant cela, vous pouvez calculer par la méthode Worshall Floyd sans créer une matrice adjacente qui omet le sommet 1, ce qui accélère et est facile à voir.


Pic 1 2 3 4 5
Pic 1 0 2 INF 1 12
2 2 0 5 10 3
3 INF 5 0 5 2
4 1 10 5 0 7
5 12 3 2 7 0

--Pour comparaison: calculé à partir de l'indice [1] et calculé à partir de l'indice [0]

Pic 1 2 3 4 5
1 0 INF INF INF INF
2 INF 0 5 10 3
3 INF 5 0 5 2
4 INF 10 5 0 7
5 INF 3 2 7 0

	private void solveC() {
		final long CONST_INF = Long.MAX_VALUE / 10;

		int n = nextInt();
		int m = nextInt();
		long[][] graph = new long[n][n];

		/*
		 *initialisation du graphe
		 * [1]Avec matrice adjacente comprenant[1]Créer une matrice adjacente sans
		 */
		for (int i = 0; i < n; i++) {
			Arrays.fill(graph[i], CONST_INF);
			graph[i][i] = 0;
		}

		for (int i = 0; i < m; i++) {

			/*
			 *Selon l'indice-1 et capturer
			 */
			int from = nextInt() - 1;
			int to = nextInt() - 1;
			int cost = nextInt();
			graph[from][to] = cost;
			graph[to][from] = cost;
		}

		long res = Long.MAX_VALUE;

		/*
		 *Warshall - Méthode Floyd pour mettre à jour les sommets
		 */

		/*
		 *Si vous démarrez l'indice à partir de 1, il ne sera pas mis à jour pour 1
		 */
		for (int k = 1; k < n; k++) {
			for (int i = 1; i < n; i++) {
				for (int j = 1; j < n; j++) {
					graph[i][j] = Math.min(graph[i][j], graph[i][k] + graph[k][j]);
				}
			}
		}

		for (int i = 1; i < n; i++) {
			for (int j = 1; j < n; j++) {
				if (i != j) {
					res = Math.min(res, graph[0][i] + graph[i][j] + graph[j][0]);
				}
			}
		}

		out.println(res >= CONST_INF ? -1 : res);

	}

Recommended Posts

ABC --013-A et B et C
ABC --023 --A & B & C
ABC --036-A et B et C
ABC --010 --A & B & C
ABC --028 --A & B & C
ABC --015 --A & B & C
ABC --012-A et B et C
ABC --018 --A & B & C
ABC --054 --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 et B et 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 --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
Concours de programmation diverta 2019 A & B & C & D
AtCoder Beginner Contest 169 A, B, C avec rubis
Problème atcoder ABC113 C
ABC093 C - Mêmes entiers
problème atcoder ABC115 C
AtCoder Beginner Contest 170 A, B, C jusqu'au rubis
Une personne écrivant C ++ a essayé d'écrire Java
Faire un appel SOAP en C #
Appeler les fonctions du langage C depuis Swift
NLP4J [006-034] 100 coups de traitement de langage avec NLP4J # 34 "A B"