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

AtCoder ABC 054 A&B&C AtCoder - 054

Un problème

--Comparez les nombres de A et B --2 <3 <4 <5 <6 <7 <8 <9 <10 <11 <12 <13 <1

		int alice = nextInt();
		int bob = nextInt();

		if (alice == bob) {
			out.println("Draw");
		} else if (alice == 1) {
			out.println("Alice");
		} else if (bob == 1) {
			out.println("Bob");
		} else if (alice != bob) {
			out.println(alice > bob ? "Alice" : "Bob");
		}

		out.println("");

Problème B

La description est écrite en ligne dans la source


	private void solveB() {
		int numN = nextInt();
		int numM = nextInt();
		String[] wkA = new String[numN];
		String[] wkB = new String[numM];

		for (int i = 0; i < wkA.length; i++) {
			wkA[i] = next();
		}
		for (int i = 0; i < wkB.length; i++) {
			wkB[i] = next();
		}

		boolean res = chkB(wkA, 0, wkB, 0);
		out.println(res ? "Yes" : "No");
	}


	private boolean chkB(String[] wkA, int currentA, String[] wkB, int aPos) {
		boolean res = false;

		//Impossible de rechercher si wkA a moins de wkB restants
		if (wkA.length - currentA < wkB.length) {
			return false;
		}
		//wkA[]La longueur restante est wkB[]Impossible de rechercher si moins
		if (wkA[currentA].length() - aPos < wkB[0].length()) {
			return false;
		}
		//Tout d'abord, déterminez la position de A
		//Par conséquent, vérifiez où la colonne B actuelle de B apparaît dans la colonne A actuelle de A.
		//Obtenez la valeur sur l'axe horizontal de A
		//* Il est possible que plusieurs axes horizontaux de A puissent être obtenus.
		//Vérifiez où la colonne B actuelle de B apparaît dans la colonne A actuelle de A
		boolean aPosWk = wkA[currentA].startsWith(wkB[0], aPos);
		if (aPosWk) {
			//Lorsque l'axe horizontal de A apparaît, le A actuel+À partir de l'axe horizontal de la colonne 1, currentB dans la colonne B+Vérifiez si 1 apparaît

			for (int i = 0; i < wkB.length; i++) {
				res = wkA[currentA + i].startsWith(wkB[0 + i], aPos);
				if (!res) {
					break;
				}
			}

		}
		//Si l'axe horizontal de A n'apparaît pas, aPos+Rechercher la première colonne
		//Si cet aPos ne correspond pas, aPos+1 et recherchez à nouveau
		if (!res) {
			//B colonne courantB+Si 1 n'apparaît pas, recherchez à nouveau l'axe horizontal de A
			int len = wkA[currentA].indexOf(wkB[0], aPos + 1);
			//Rechercher à nouveau car il y a encore des candidats dans la ligne
			if (len >= 0) {
				res = chkB(wkA, currentA, wkB, len);
			}

		}

		//Si aPos est différent de zéro, définissez le prochain currentId
		if (!res && aPos == 0) {
			//Si l'axe horizontal de A n'apparaît pas, currentA+Rechercher la première ligne
			res = chkB(wkA, currentA + 1, wkB, 0);
		}
		return res;
	}

Problème C

Graphique non orienté Référence: 1 Référence: 2

Pour le moment, l'exemple d'entrée 1 est exprimé comme une matrice adjacente.

Entrée 1

1 2 1 3 2 3

Convertir (mettez True partout où vous le pouvez)

1 2 3
1 T T
2 T T
3 T T

Puisqu'il s'agit d'un graphe orienté, c'est une matrice symétrique.


	private void solveC() {

		int numN = nextInt();
		int numM = nextInt();

		boolean[][] wk = new boolean[numN][numN];

		for (int i = 0; i < numM; i++) {
			int iA = nextInt();
			int iB = nextInt();
			wk[iA - 1][iB - 1] = true;
			wk[iB - 1][iA - 1] = true;
		}
		boolean[] visited = new boolean[numN];
		visited[0] = true;
		int res = chkSolveC(wk, 0, visited);
		out.println(res);
	}

--Condition de fin de récurrence

Avec récursif, je voulais ajouter +1 à currentI lors de l'appel de chkSolveC, mais si j'y réfléchis attentivement, je sors le i où je peux aller dans la matrice adjacente et le passe comme argument currentI, donc +1 est inutile.


	private int chkSolveC(boolean[][] wk, int currentI, boolean[] visited) {

		boolean res = true;
		for (int i = 0; i < visited.length; i++) {
			if (!visited[i]) {
				res = false;
			}
		}
		if (res) {
			return 1;
		}

		int resCnt = 0;
		boolean[] wkG = wk[currentI];
		for (int i = 0; i < wkG.length; i++) {
			if (wkG[i] && !visited[i]) {
				visited[i] = true;
				resCnt += chkSolveC(wk, i, visited);
				visited[i] = false;
			}

		}

		return resCnt;
	}

Recommended Posts

ABC --013-A et B et 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 --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 --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
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"