AtCoder Beginner Contest 170 B Je vais expliquer le problème "Crane and Turtle".
URL du problème: https://atcoder.jp/contests/abc170/tasks/abc170_b
Il y a des animaux dans le jardin. Comme information ・ Nombre total d'animaux dans le jardin $ X $, ・ Nombre total d'étapes $ Y $ Est donnée. Le nombre de pattes de grue est de 2 $ et le nombre de pattes de tortue est de 4 $.
Déterminez s'il existe une combinaison de numéros de grue et de tortue qui correspond aux informations $ X $, $ Y $. production: -Output existant "" Oui "` -Output comme "" Non "qui n'existe pas
・ $ 1 \ leq X \ leq 100 $ ・ $ 1 \ leq Y \ leq 100 $ ・ Toutes les valeurs d'entrée sont des entiers
Heureusement, les contraintes sur $ X $ et $ Y $ sont petites, vous pouvez donc faire ce qui suit:
・ Entrez $ X, Y $
-Déclarer la fonction drapeau $ flag $ et l'initialiser avec 0
・ Soit le nombre de tortues $ i $, prends $ i $ dans la section de $ (0, X) $, et répète le processus suivant.
Si $ Y-2i $ est divisible par $ 4 $ et son quotient est $ X-i $
Sort «Oui» et termine la boucle suivante
Cela soulève le drapeau de combinaison, alors ajoutez 1 à $ flag $
・ Si $ flag = 0 $, il n'y a pas de combinaison, donc afficher " Non "
Un exemple de réponse dans Python 3 est le suivant. (C ++ et Java peuvent être résolus par la même solution)
{B.py}
x,y = map(int,input().split())
flag = 0
for i in range(x+1):
if (y - 2*i)%4 == 0 and (y - 2 * i)//4 == x - i:
flag += 1
print("Yes")
break
if flag == 0:
print("No")
Si le nombre de grues est $ a $ et le nombre de tortues est $ b $, les équations simultanées suivantes seront valables.
\begin{cases}
a+b = X \\
2a+4b = Y
\end{cases}
Si vous résolvez ceci
\begin{cases}
a = \frac{4x-Y}{2} \\
b = \frac{-2x+Y}{2} \\
\end{cases}
Vous pouvez obtenir deux solutions. Il vous suffit de déterminer si les deux sont des solutions entières et supérieures à 0. </ b> (La contrainte étant petite, cette fois la solution 1 Mais je peux me permettre de respecter le délai d'exécution) </ font>
{B2.Py}
x,y = map(int,input().split())
a = (4*x-y)/2
b = (-2*x+y)/2
if a%1 == 0 and 0 <= a and b%1 == 0 and 0 <=b:
print("Yes")
else:
print("No")
En général, il est souvent résolu par la solution 1 au lieu de la solution 2, voici donc quelques exemples de solutions C ++ et Java résolues par la solution 1.
{B1.cpp}
#include<bits/stdc++.h>
using namespace std;
int main(){
int x,y;
cin >> x >> y;
int flag = 0;
for (int i = 0; i <= x; i++){
if ((y-2*i)%4 == 0 && (y - 2 * i)/4 == x-i){
flag++;
cout << "Yes" << endl;
break;
}
}
if (flag == 0){
cout << "No" << endl;
}
}
{B1.cpp}
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int x = scan.nextInt();
int y = scan.nextInt();
int flag = 0;
for (int i = 0; i <= x; i++){
if ((y-2*i)%4 == 0 && (y - 2 * i)/4 == x-i){
flag++;
System.out.println("Yes");
break;
}
}
if (flag == 0){
System.out.println("No");
}
}
}
Recommended Posts