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

AtCoder ABC 127 A&B&C&D AtCoder - 127

Je serai de retour pour résoudre E & F dans un proche avenir.

2019/05/27 Correction du code B

A - Ferris Wheel

	private void solveA() {
		int a = nextInt();
		int b = nextInt();

		if (a <= 5) {
			out.println(0);
		} else if (a <= 12) {
			out.println(b / 2);
		} else {
			out.println(b);
		}
	}

B - Algae

	private void solveB() {
		int r = nextInt();
		int d = nextInt();
		int x2000 = nextInt();

		int pre = x2000;
		for (int i = 1; i <= 10; i++) {
			pre = r * pre - d;
			out.println(pre);
		}

	}

C - Prison

4 2 1 3 2 4

--La première porte s'ouvre avec les touches 1,2,3 --La deuxième porte s'ouvre avec les clés 2, 3 et 4

Key:1 Key:2 Key:3 Key:4
Gate:1 O O O
Gate:2 O O O
La clé pour tout ouvrir

Je l'ai remplacé par un numéro.

Key:1 Key:2 Key:3 Key:4
Gate:1 1 1 1
Gate:2 1 1 1
total 1 2 2 1

Une clé avec total = nombre de portes peut ouvrir toutes les portes. Pour le traitement tel que l'ajout d'une certaine plage à une certaine plage, la méthode Imos est plus rapide.

Je publierai donc la liste habituelle des sites de référence

--Site de référence (méthode Imos et somme cumulée)

		int n = nextInt();
		int m = nextInt();

		//Pour mémo quelle touche numérique est requise à chaque porte
		int[] wk = new int[n];

		for (int i = 0; i < m; i++) {
			int l = nextInt() - 1;
			int r = nextInt() - 1;
			wk[l] += 1;
			if (r + 1 < n) {
				wk[r + 1] -= 1;
			}
		}

		//
		for (int i = 1; i < n; i++) {
			wk[i] += wk[i - 1];
		}
		int cnt = 0;
		for (int i = 0; i < n; i++) {
			if (wk[i] == m) {
				cnt++;
			}
		}

		out.println(cnt);

D - Integer Cards

  1. Disposer A (cartes prises) (ici par ordre croissant)
  2. Organisez B (nombre de feuilles) et C (entier) dans l'ordre C (ordre décroissant ici)
  3. Comparez avec [B, C] dans l'ordre croissant de A
  4. Comparez jusqu'à B feuilles pour voir si C est plus grand que A, et réécrivez A si C est plus grand
  5. Répétez 3-4

--Pour la 3ème partie, le traitement suivant est effectué dans le code, mais c'est parce que "B et C sont disposés dans l'ordre décroissant, donc la partie une fois réécrite avec C ne sera pas réécrite après cela (une fois réécrite C plus grand que C n'apparaît pas) " ――Si vous ne le faites pas, vous manquerez de temps en raison d'un traitement supplémentaire.

 //Il ne sert à rien de réécrire (comparer) au même endroit, alors décalez le début
        int start = 0;

--Code complet

	private void solveD() {
		int n = nextInt();
		int m = nextInt();
		long[] a = LongStream.range(0, n).map(i -> nextLong()).toArray();

		//Trier par ordre croissant
		Arrays.sort(a);

		int[][] bc = IntStream.range(0, m).collect(() -> new int[m][2],
				(t, i) -> {
					t[i][0] = nextInt();
					t[i][1] = nextInt();
				},
				(t, u) -> {
					Stream.concat(Arrays.stream(t), Arrays.stream(u));
				});

		//Trier par ordre décroissant de C
		Arrays.sort(bc, (x, y) -> -Integer.compare(x[1], y[1]));
		//Il ne sert à rien de réécrire (comparer) au même endroit, alors décalez le début
		int start = 0;
		for (int j = 0; j < m; j++) {
			int max = Integer.min((start + bc[j][0]), n);
			for (int k = start; k < max; k++) {
				if (bc[j][1] > a[k]) {
					//a[i]Est plus petit est réécrit
					a[k] = bc[j][1];
					//Se préparer à décaler le prochain départ
					start = k + 1;
				} else {
					//Déjà trié, donc un[i]Plus besoin de comparer si c'est plus gros
					break;
				}
			}

		}
		//total
		long res = Arrays.stream(a).sum();

		out.println(res);
	}

Recommended Posts

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 --029- A & B & C
ABC --022 --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 --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
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"