AtCoder-Anfängerwettbewerb 167 B Problem "Einfache lineare Programmierung" Erläuterung (Python3, C ++, Java)

AtCoder Beginner Contest 167 B Ich werde das Problem "Easy Linear Programming" erklären.

Problem-URL: https://atcoder.jp/contests/abc167/tasks/abc167_b

Problemzusammenfassung

Es gibt $ A $ -Karten mit $ 1 $, $ B $ -Karten mit $ 0 $ und $ C $ -Karten mit $ -1 $. Beantworten Sie einige der maximal möglichen Summen der Zahlen, die auf den Karten stehen, die Sie genommen haben, als Sie nur $ K $ von diesen Karten ausgewählt haben.

Zwang

・ Alle Eingänge sind ganze Zahlen ・ $ 0 \ leq A, B, C $ ・ $ 1 \ leq K \ leq A + B + C \ leq 2 × 10 ^ 9 $

Kommentar

Um den Maximalwert so groß wie möglich </ b> zu machen, wird die Karte wie folgt gemäß dem Wert von $ K $ genommen.

  1. Für $ K \ leq A $ Alles was Sie tun müssen, ist eine Karte mit $ 1 $ auszuwählen und zu nehmen.

  2. Wenn $ A <K \ leq A + B $ Nachdem Sie die in 1. gezeigte Methode ausgeführt haben, wählen Sie die Karte mit den verbleibenden $ (K-A) $ $ 0 $ aus.

  3. Wenn $ A + B <K \ leq A + B + C $ Wählen Sie nach Ausführung der in 2. gezeigten Methode die Karte mit den verbleibenden $ (K-A-B) $ $ -1 $ aus.

Im Fall von 1. Die Antwort lautet $ K $ In Fall 2. Die Antwort lautet $ A $ Im Fall von 3 lautet die Antwort $ A- (K-A-B) $ Es wird sein.

Sie können die Ausgabe der Antwort abhängig vom Wert von $ K $ ändern.

Es gibt Einschränkungen A+B+C \leq 2×10^9 Obwohl es so ist Der Zahlenbereich, der durch allgemeine "int" -Typen (C ++ und Java) dargestellt werden kann $ -2 ^ {31} $ ~ $ 2 ^ {31} -1 $ </ font>, Da $ 2 ^ {31} = 21474883647 $, Innerhalb der Einschränkungen wäre es in Ordnung, $ K $ als Typ "int" zu definieren.

Nachfolgend finden Sie Beispiele für Antworten in Python3, C ++ und Java.

Beispiel für eine Antwort für jede Sprache

Beispiellösung in Python3

{ABC167B.py}


A,B,C,K = map(int,input().split())
if (K <= A):
  print(K)
elif (A < K <= A+B):
  print(A)
else:
  print(A-(K-A-B))
Lösungsbeispiel in C ++

{ABC167B.cpp}


#include<bits/stdc++.h>
using namespace std;
int main(){
  int a,b,c,k;
  cin >> a >> b >> c >> k;
  if (k <= a){
    cout << k << endl;
  }else if (k <= a+b){
    cout << a << endl;
  }else{
    cout << a-(k-a-b) << endl;
  }
}
Java-Antwortbeispiel

{ABC167B.java}


import java.util.Scanner;
public class Main{
  public static void main(String[] args){
    Scanner scan = new Scanner(System.in);
    int a = scan.nextInt();
    int b = scan.nextInt();
    int c = scan.nextInt();
    int k = scan.nextInt();
    if (k <= a){
      System.out.println(k);
    }else if (k <= a+b){
      System.out.println(a);
    }else{
      System.out.println(a-(k-a-b));
    }
  }
}

Recommended Posts