AtCoder Beginner Contest 167 B Je vais vous expliquer le problème "Programmation linéaire facile".
URL du problème: https://atcoder.jp/contests/abc167/tasks/abc167_b
Il existe des cartes $ A $ avec 1 $, des cartes $ B $ avec 0 $ et des cartes $ C $ avec -1 $. Répondez à quelques-unes des sommes maximales possibles des nombres écrits sur les cartes que vous avez prises lorsque vous avez choisi seulement $ K $ de ces cartes.
・ Toutes les entrées sont des entiers ・ $ 0 \ leq A, B, C $ ・ $ 1 \ leq K \ leq A + B + C \ leq 2 × 10 ^ 9 $
Pour rendre la valeur maximale aussi grande que possible </ b>, la carte est prise en fonction de la valeur de $ K $ comme suit.
Pour $ K \ leq A $ Tout ce que vous avez à faire est de sélectionner et de prendre une carte avec 1 $ écrit dessus.
Si $ A <K \ leq A + B $ Après avoir exécuté la méthode indiquée en 1., sélectionnez la carte avec les $ (K-A) $ $ 0 $ restants écrits dessus.
Si $ A + B <K \ leq A + B + C $ Après avoir exécuté la méthode indiquée en 2., sélectionnez la carte avec les $ (K-A-B) $ $ -1 $ restants écrits dessus.
Dans le cas de 1. La réponse est $ K $ Dans le cas 2. La réponse est $ A $ Dans le cas de 3, la réponse est $ A- (K-A-B) $ Ce sera.
Vous pouvez modifier la sortie de la réponse en fonction de la valeur de $ K $.
Il y a des restrictions
(C ++ ou Java) <font color = "red"> $ -2 ^ {31} $ ~ $ 2 ^ {31} -1 $ </ font>, Puisque $ 2 ^ {31} = 21474883647 $, Dans les limites des contraintes, il serait correct de définir $ K $ comme du type ʻint
.
Vous trouverez ci-dessous des exemples de réponses en Python3, C ++ et 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));
}
}
}