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

AtCoder ABC 030 A&B&C AtCoder - 030

Un problème

	private void solveA() {
		int a = nextInt();
		int b = nextInt();
		int c = nextInt();
		int d = nextInt();
		if (b * c > a * d) {
			out.println("TAKAHASHI");
		} else if (b * c < a * d) {
			out.println("AOKI");
		} else {
			out.println("DRAW");
		}
	}

Problème B

--Mendoi calcule l'angle de l'aiguille des minutes de l'horloge

	private void solveB() {
		int n = nextInt();
		int m = nextInt();

		double smallHand = n % 12 * 30 + m * 0.5;//n % 12 * (360 / 12) + m * (360 / 12 /  60)
		double longHand = m % 60 * 6;//m % 60 * (360 / 60)

		double res = Double.max(smallHand, longHand) - Double.min(smallHand, longHand);
		/*
		 * 23:10 est supérieur à 180
		 */
		if (res > 180) {
			out.println(360 - res);
		} else {
			out.println(res);
		}
	}

Problème C: Dichotomie

--Utiliser la dichotomie

	private void solveC2() {
		int n = nextInt();
		int m = nextInt();
		long x = nextInt();
		long y = nextInt();
		long[] aA = LongStream.range(0, n).map(i -> nextLong()).toArray();
		long[] bA = LongStream.range(0, m).map(i -> nextLong()).toArray();

		/*
		 * true = airport A
		 * false = airport B
		 */
		boolean isAirportA = true;
		long currentTime = 0;
		long moveCnt = 0;
		while (true) {
			/*
			 *Départ aéroport A ou départ B
			 */
			if (isAirportA) {
				/*
				 *Trouvez un vol à l'aéroport A qui peut décoller de l'heure actuelle
				 */
				int aI = Arrays.binarySearch(aA, currentTime);
				aI = aI >= 0 ? aI : ~aI;
				//Suite à une recherche de deux minutes, si vous atteignez la dernière position d'index, c'est déjà terminé
				if (aI >= n) {
					break;
				}
				/*
				 *Heure de départ du prochain aéroport B
				 */
				currentTime = aA[aI] + x;
				/*
				 *Le prochain est l'aéroport B
				 */
				isAirportA = false;
				moveCnt++;
			} else {
				/*
				 *Le contenu remplace simplement toutes les valeurs de l'aéroport A par B
				 */
				int bI = Arrays.binarySearch(bA, currentTime);
				bI = bI >= 0 ? bI : ~bI;
				if (bI >= m) {
					break;
				}
				currentTime = bA[bI] + y;
				isAirportA = true;
				moveCnt++;
			}
		}
		/*
		 *X lorsque le nombre de mouvements est impair->Je suis juste allé à Y
		 *Je n'ai pas pu faire un aller-retour.
		 *Par conséquent, le mouvement de cette époque est poire
		 */
		if ((moveCnt & 1) == 1) {
			moveCnt -= 1;
		}
		/*
		 *Le nombre de fois où la moitié du nombre de personnes dans l'avion pourrait faire un aller-retour
		 */
		out.println(moveCnt / 2);

	}

Problème C: Une autre solution (déterminée uniquement par pour, sans utiliser de dichotomie)

«J'ai pu trouver une dichotomie et l'implémenter immédiatement, mais c'est un peu sale, donc si je cherchais une autre méthode, je sentais que je pouvais l'implémenter ici aussi, alors je l'ai essayée. ―― Plutôt que de rechercher tous les $ A [i] et B [i] $ à chaque fois, si vous gardez l'index au milieu, pourquoi ne pas simplement tourner les deux tableaux une fois? L'idée

--Trouver l'heure de départ d'un aéroport

	/*
	 *Recherche complète?
	 */
	private void solveC() {
		int n = nextInt();
		int m = nextInt();
		long x = nextInt();
		long y = nextInt();
		long[] aA = LongStream.range(0, n).map(i -> nextLong()).toArray();
		long[] bA = LongStream.range(0, m).map(i -> nextLong()).toArray();

		int bI = 0;
		long currentTime = 0;
		long moveCnt = 0;
		for (int i = 0; i < n; i++) {
			//Les heures de départ inférieures à l'heure actuelle ne peuvent pas être utilisées
			if (currentTime > aA[i]) {
				continue;
			}
			//Peut partir d'un aéroport
			currentTime = aA[i] + x;
			//Commencez à chercher du temps à l'aéroport B
			for (int j = bI; j < m; j++) {
				//Les heures de départ inférieures à l'heure actuelle ne peuvent pas être utilisées
				if (currentTime > bA[j]) {
					continue;
				}
				/*
				 *Cette fois peut être utilisée, donc
				 *・ Réglez l'heure de départ du prochain aéroport A
				 *・ Définissez l'index pour démarrer la recherche horaire du prochain aéroport B
				 */
				currentTime = bA[j] + y;
				bI = j + 1;
				//J'ai pu quitter l'aéroport B donc j'ai pu faire un aller-retour
				moveCnt++;
				break;
			}
		}
		out.println(moveCnt);
	}

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 --128 --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 --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 --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
Concours de programmation diverta 2019 A & B & C & D
AtCoder Beginner Contest 169 A, B, C avec rubis
Problème atcoder ABC113 C
problème atcoder ABC115 C
AtCoder Beginner Contest 170 A, B, C jusqu'au rubis
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"