全問不正解だったのできちんと解き直します!!
問題1は こちら
↓自分の以前の回答
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int result = 0;
// 整数の入力
int n = sc.nextInt();
int k = sc.nextInt();
for (int i = 0; i < n; i++) {
int a = sc.nextInt();
if (a > k) {
result = result + a - k;
}
}
System.out.println(result);
}
}
特に何も気にしていなかった「オーバーフローに注意してください」
→これresultがintだったのがダメだったのですね。resultをlong型にしたら通りました!いえい。
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long result = 0; // ここがオーバーフローしてた
// 整数の入力
int n = sc.nextInt();
int k = sc.nextInt();
for (int i = 0; i < n; i++) {
int a = sc.nextInt();
if (a > k) {
result = result + a - k;
}
}
System.out.println(result);
}
}
次に第二問です。
問題は こちら
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int result = 0;
// 整数の入力
int n = sc.nextInt();
int m = sc.nextInt();
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
if (a == 0 && b == 0 && c == 0 && m == 0) {
System.out.println(n + " 0 0");
return;
}
for (int aNum = 0; aNum < n + 1; aNum++) {
int x = (m - b * n - (a - b) * aNum);
int y = c - b;
int cNum = x / y;
int bNum = n - aNum - cNum;
if (a * aNum + b * bNum + c * cNum == m && aNum >= 0 && bNum >= 0 && cNum >= 0) {
System.out.println(aNum + " " + bNum + " " + cNum);
return;
}
}
System.out.println("-1 -1 -1");
}
}
Mの変数が10^12までOKなので、Mをint→longにします。
また、脚の本数を数えるときにintの演算とlong型のmを比較しているので、軒並みa,b,cもlong型に変換してみます。
また、resultという謎変数が残っていたので消しておきます。
最初の分岐を3つとも同じ脚の本数だった場合を追加しました。
そして、2匹の脚が同じ本数だった場合を考慮できていなかったので、その考慮を追加しました。
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 整数の入力
long n = sc.nextInt();
long m = sc.nextLong();
long a = sc.nextInt();
long b = sc.nextInt();
long c = sc.nextInt();
if (a == b && a == c) {
// 3匹の足の本数が同じ場合
if (a * n == m) {
System.out.println(n + " 0 0");
return;
}
System.out.println("-1 -1 -1");
return;
}
if (a == b || b == c || c == a) {
long aNum = 0;
long bNum = 0;
long cNum = 0;
if (a == b) {
long x = m - b * n;
long y = c - b;
cNum = x / y;
bNum = n - cNum;
}
if (b == c) {
long x = m - c * n;
long y = a - c;
aNum = x / y;
cNum = n - aNum;
}
if (c == a) {
long x = m - a * n;
long y = b - a;
bNum = x / y;
aNum = n - bNum;
}
if (a * aNum + b * bNum + c * cNum == m && aNum >= 0 && bNum >= 0 && cNum >= 0) {
System.out.println(aNum + " " + bNum + " " + cNum);
return;
}
System.out.println("-1 -1 -1");
return;
}
for (long aNum = 0; aNum < n + 1; aNum++) {
long x = (m - b * n - (a - b) * aNum);
long y = c - b;
long cNum = x / y;
long bNum = n - aNum - cNum;
if (a * aNum + b * bNum + c * cNum == m && aNum >= 0 && bNum >= 0 && cNum >= 0) {
System.out.println(aNum + " " + bNum + " " + cNum);
return;
}
}
System.out.println("-1 -1 -1");
}
}
ゴミみたいなコードができてしまいました本当に申し訳ありません。
まあとりあえず動くようになったので許してください。
第三問と第四問についても後日また解き直したいと思います!