AtCoder Anfängerwettbewerb 170 B Problem "Crane and Turtle" Erklärung (Python3, C ++, Java)

AtCoder Beginner Contest 170 B Ich werde das Problem "Crane and Turtle" erklären.

Problem-URL: https://atcoder.jp/contests/abc170/tasks/abc170_b

Problemzusammenfassung

Es gibt einige Tiere im Garten. Als Information ・ Gesamtzahl der Tiere im Garten $ X $, ・ Gesamtzahl der Beine $ Y $ Ist gegeben. Die Anzahl der Kranschenkel beträgt $ 2 $ und die Anzahl der Schildkrötenbeine beträgt $ 4 $.

Stellen Sie fest, ob es eine Kombination aus Kran- und Schildkrötennummern gibt, die den Informationen $ X $, $ Y $ entspricht. Ausgabe: -Ausgabe vorhandener "Ja" -Ausgabe als "Nein", die nicht existiert

Zwang

・ $ 1 \ leq X \ leq 100 $ ・ $ 1 \ leq Y \ leq 100 $ ・ Alle Eingabewerte sind Ganzzahlen

Kommentar

Lösung 1 (vollständige Suche)

Glücklicherweise sind die Einschränkungen für $ X $ und $ Y $ gering, sodass Sie Folgendes tun können.

・ Geben Sie $ X, Y $ ein

Ein Beispiel für die Antwort in Python 3 lautet wie folgt. (C ++ und Java können mit derselben Lösung gelöst werden)

Lösungsbeispiel in Python3 (Lösung 1)

{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")
  • Für i im Bereich (x + 1) wird gesetzt, weil der Wert von i im Intervall von $ (0, x) $ genommen wird. Für i im Bereich (x) wird der Wert von i im Intervall von $ (0, x-1) $ genommen.

Lösung 2

Wenn die Anzahl der Kraniche $ a $ und die Anzahl der Schildkröten $ b $ beträgt, gelten die folgenden simultanen Gleichungen.


  \begin{cases}
    a+b = X \\
    2a+4b = Y
  \end{cases}

Wenn Sie das lösen


  \begin{cases}
    a = \frac{4x-Y}{2} \\
    b = \frac{-2x+Y}{2} \\
  \end{cases}

Sie können zwei Lösungen erhalten. Sie müssen nur feststellen, ob beide ganzzahlige Lösungen und größer als 0 sind. </ b> (Da die Einschränkung gering ist, ist diesmal Lösung 1 Aber ich kann es mir leisten, das Ausführungszeitlimit einzuhalten) </ font>

Lösungsbeispiel in Python3 (Lösung 2)

{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")

Im Allgemeinen wird es häufig von Lösung 1 anstelle von Lösung 2 gelöst. Hier sind einige Beispiele für C ++ - und Java-Lösungen, die von Lösung 1 gelöst werden.

Beispielantwort in C ++ (Lösung 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;
  }
}
Lösungsbeispiel in Java (Lösung 1)

{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