AtCoder Beginner Contest 167 B Ich werde das Problem "Easy Linear Programming" erklären.
Problem-URL: https://atcoder.jp/contests/abc167/tasks/abc167_b
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.
・ Alle Eingänge sind ganze Zahlen ・ $ 0 \ leq A, B, C $ ・ $ 1 \ leq K \ leq A + B + C \ leq 2 × 10 ^ 9 $
Um den Maximalwert so groß wie möglich </ b> zu machen, wird die Karte wie folgt gemäß dem Wert von $ K $ genommen.
Für $ K \ leq A $ Alles was Sie tun müssen, ist eine Karte mit $ 1 $ auszuwählen und zu nehmen.
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.
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
Nachfolgend finden Sie Beispiele für Antworten in Python3, C ++ und Java.
{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))
{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;
}
}
{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));
}
}
}