AtCoder ABC 025 A&B&C AtCoder - 025
	private void solveA() {
		char[] wk = next().toCharArray();
		int n = nextInt();
		int cnt = 0;
		for (int i = 0; i < wk.length; i++) {
			for (int j = 0; j < wk.length; j++) {
				cnt++;
				if (n == cnt) {
					out.println((char) wk[i] + "" + (char) wk[j]);
					return;
				}
			}
		}
	}
Hmmm. Stream semble n'avoir aucun mérite même s'il est utilisé dans un tel endroit.
	private void solveB() {
		int n = nextInt();
		int a = nextInt();
		int b = nextInt();
		long res = 0;
		res = IntStream.range(0, n).reduce(0, (sum, i) -> {
			String direction = next();
			int meter = nextInt();
			long move = meter < a ? a : meter > b ? b : meter;
			switch (direction) {
			case "East":
				sum -= move;
				break;
			case "West":
				sum += move;
				break;
			default:
				throw new IllegalArgumentException();
			}
			return sum;
		});
		//--------------------------------------------------------
		//		String[] direction = new String[n];
		//		int[] meter = new int[n];
		//
		//		for (int i = 0; i < n; i++) {
		//			direction[i] = next();
		//			meter[i] = nextInt();
		//			long move = meter[i] < a ? a : meter[i] > b ? b : meter[i];
		//			switch (direction[i]) {
		//			case "East":
		//				res -= move;
		//				break;
		//			case "West":
		//				res += move;
		//				break;
		//			default:
		//				throw new IllegalArgumentException();
		//			}
		//		}
		//--------------------------------------------------------
		out.println(res == 0 ? 0 : res > 0 ? "West " + res : "East " + res * -1);
	}
――Dans l'explication, ça a commencé à partir du virage = 9, mais il y avait une partie que je ne pouvais pas rattraper, alors j'ai décidé de comparer tous les points lorsque j'ai mis les pierres dans l'ordre du virage = 1 ( En conséquence, on l'appelle une fonction récursive 623530 fois) ――Je veux mettre les deux au meilleur endroit, donc j'adopterai le score maximum à ce tour
	private void solveC() {
		int[][] b = new int[2][3];
		for (int i = 0; i < 2; i++) {
			for (int j = 0; j < 3; j++) {
				b[i][j] = nextInt();
			}
		}
		int[][] c = new int[3][2];
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 2; j++) {
				c[i][j] = nextInt();
			}
		}
		/*
		 *L'une ou l'autre pierre a déjà été placée, personne ne l'a encore placée
		 *Afin d'exprimer[][]utilisation
		 *Si c'est 0, personne n'est mis
		 * boolean[][]Mais vous pouvez, mais pour le débogage 1/-Je voulais voir 1
		 */
		int[] res = calcPointC(b, c, new int[3][3], 0, true);
		out.println(res[0]);
		out.println(res[1]);
	}
	//	int cnt = 1;
	/**
	 *Enquête récursive
	 * @param b
	 * @param c
	 * @param board
	 * @param turn
	 * @param who
	 * @return
	 */
	private int[] calcPointC(int[][] b, int[][] c, int[][] board, int turn, boolean who) {
		if (turn == 9) {
			int chokudai = 0;
			int chokuko = 0;
			/*
			 *J'ai fini de tout mettre, alors j'ai commencé à calculer
			 */
			for (int i = 0; i < 3; i++) {
				for (int j = 0; j < 3; j++) {
					if (i < 2) {
						if (board[i][j] == board[i + 1][j]) {
							chokudai += b[i][j];
						} else {
							chokuko += b[i][j];
						}
					}
					if (j < 2) {
						if (board[i][j] == board[i][j + 1]) {
							chokudai += c[i][j];
						} else {
							chokuko += c[i][j];
						}
					}
				}
			}
			return new int[] { chokudai, chokuko };
		}
		List<int[]> resList = new ArrayList<int[]>();
		/*
		 *Découvrez le score maximum au tour de qui
		 *Le score lorsque le score maximum de celui qui fait le mieux
		 */
		for (int i = 0; i < 3; ++i) {
			for (int j = 0; j < 3; ++j) {
				//				if (i == 0 && j == 0) {
				//					out.println(cnt++);
				//				}
				/*
				 *Déjà placé
				 */
				if (board[i][j] != 0) {
					continue;
				}
				if (who) {
					board[i][j] = 1;
				} else {
					board[i][j] = -1;
				}
				/*
				 *qui est au tour
				 *Pour le moment, enregistrez le nombre de points que vous obtiendrez si vous le mettez dans cette position
				 *En fin de compte, voici une pression pour connaître le score maximum au tour de qui
				 */
				resList.add(calcPointC(b, c, board, turn + 1, !who));
				/*
				 *Réinitialisez la pierre placée dans cette position pour changer la position
				 */
				board[i][j] = 0;
			}
		}
		/*
		 *La raison pour laquelle le maximum de points est retourné en alternance est que c'est une prémisse que chaque personne fera de son mieux.
		 *Le résultat du renvoi alterné du score maximum est résultat
		 */
		if (who) {
			//Puisque c'est au tour de chokudai, retournez le tableau contenant la valeur maximale de chokudai
			return resList.stream().max(Comparator.comparing(x -> x[0])).get();
		} else {
			//Puisque c'est au tour de chokuko, retournez le tableau contenant la valeur maximale de chokuko
			return resList.stream().max(Comparator.comparing(x -> x[1])).get();
		}
	}
        Recommended Posts