前回演習問題の解答例
問題1
問題文
数字だけの文字列Sが与えられるので、その数字を全て足してください。
制約
- 1≦|S|≦100000=105
入力
入力は以下の形式で標準入力から与えられる。
S
出力
全て足した数値を求めてください。
入力例 1
123
出力例 1
6
入力例 2
01235
出力例 2
11
解答例
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class Sample1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
scanner.close();
List<String> sList = Arrays.asList(s.split(""));
int total = sList.stream().mapToInt(Integer::parseInt).sum();
System.out.println(total);
}
}
問題2
問題文
Mくんがショッピングサイトのアカウントを新規作成しようとしています。
ショッピングサイトのパスワードには半角英小文字と数字と記号のみ利用可能です。
登録できるのは、8 文字以上で半角英小文字と数字と記号をそれぞれ 1 文字以上含むパスワードです。
Mくんはいつもパスワードに利用している半角英小文字からなる 8 文字の文字列 S があります。
Mくんは S の文字のいくつかを以下のように置き換えて登録する方法を思いつきました。
l
を数字の1
に置き換えるo
を数字の0
に置き換えるa
を記号の@
に置き換えるs
を記号の$
に置き換える
置き換えにはいくつかのパターンがありますが、そのうちショッピングサイトに登録可能なパターンはいくつあるか答えてください。
制約
- ∣S∣=8
- S は英小文字のみからなる
入力
入力は以下の形式で標準入力から与えられる。
S
出力
ショッピングサイトに登録可能な置き換えパターンの数を出力してください。
入力例 1
password
出力例 1
7
登録可能なのは、pas$w0rd
, pa$sw0rd
, pa$$w0rd
, p@ssw0rd
, p@s$w0rd
, p@$sw0rd
, p@$$w0rd
の 7 パターンです。
入力例 2
assassin
出力例 2
0
いくつかの置き換えパターンがありますが、数字を含むパターンはありません。
入力例 3
sayhello
出力例 3
21
解答例
import java.util.Scanner;
public class Sample2 {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
int num = 0;
int mark = 0;
char[] cs = sc.next().toCharArray();
sc.close();
for (char c : cs) {
if (c == 'l' || c == 'o') {
num++;
} else if (c == 'a' || c == 's') {
mark++;
}
}
// long ans = (pow(2, num) - 1) * (pow(2, mark) - 1);
// if (ans > 0 && cs.length == lo + as) {
// ans--;
// }
// System.out.println(ans);
//long ans = ((1<<num)-1) * ((1<<mark)-1);
int ans = (int) ((Math.pow(2,num) -1) * (Math.pow(2,mark) -1));
System.out.println(ans);
System.out.println((ans - (num+mark == cs.length ? 1 : 0)));
}
static long pow(long x, int p) {
if (p == 0) {
return 1;
} else {
return x * pow(x, p - 1);
}
}
}
今回の演習問題
問題1
問題文
コアさんは格闘ゲームにハマっています。このゲームでは 1,2,3 の番号が付いた 3 種類の技を出すことができ、技 i (1≤i≤3) を1 回出すと敵に Ai ダメージを与えられます。ただし、A1≤A2≤A3 とします。
また、これらを技 1→2→3 の順に 1 回ずつ出すとコンボが発生し、3 回分の技のダメージに加えて
さらに B ダメージを敵に与えられます。
「技 1,2,3 の中から自由に 1 つを選んで 1 回出す」という操作を 3 回繰り返すとき、
敵に与えられるダメージの最大値を求めてください。
置き換えにはいくつかのパターンがありますが、そのうちショッピングサイトに登録可能なパターンはいくつあるか答えてください。
制約
- 1≤A1≤A2≤A3≤100
- 1≤B≤100
- 入力はすべて整数
入力
入力は以下の形式で標準入力から与えられる。
A1 A2 A3 B
- 1 行目には A1,A2,A3,B がこの順に半角スペース区切りで与えられる
出力
答えを 1 行で出力してください。
入力例 1
1 2 3 4
出力例 1
10
技 1→2→3 の順に 1 回ずつ出すと良いです。
この場合、技 1 で 1 ダメージ、技 2 で 2 ダメージ、技 3 で 3 ダメージを敵に与えることができ、
さらにコンボが発生することによって 4 ダメージを追加で与えられます。
よって、合計 1+2+3+4=10 ダメージを敵に与えられます。
これより大きなダメージを敵に与えることはできません。
入力例 2
3 9 9 3
出力例 2
27
例えば、技 2 を 3 回連続で出すと良いです。
この場合、9×3=27 ダメージを敵に与えられます。
技 1,2,3 をこの順に 1 回ずつ出す場合、技 1 で 3 ダメージ、技 2 で 9 ダメージ、技 3 で 9 ダメージ、コンボ発生で 3 ダメージを敵に与えられますが、これらの合計は 24 ダメージとなり、
27 ダメージより小さくなります。
入力例 3
77 77 77 77
出力例 3
308
問題2
問題文
0
, 1
からなる長さ N の文字列 S,T が与えられます。S に対して以下の操作を行って T と一致させるための操作回数の最小値を求めてください。
- 1≤i≤N を満たす整数 i を選ぶ。S の i 文字目を現在とは異なる方の文字に変更する。つまり、
0
なら1
、1
なら0
に変更する。その後、S の前後を反転する。
制約
- N は整数
- 1≤N≤106
- S,T は
0
,1
からなる長さ N の文字列
入力
入力は以下の形式で標準入力から与えられる。
N S T
出力
答えを 1 行で出力してください。
入力例 1
3 001 010
出力例 1
2
操作の一例を以下に示します。
- i=2 として操作を行う。S の 2 文字目を
0
から1
に変更し、S の前後を反転する。操作後、S=110
となる。 - i=1 として操作を行う。S の 1 文字目を
1
から0
に変更し、S の前後を反転する。操作後、S=010
となる。
2 回未満の操作で S と T を一致させることはできません。
入力例 2
2 01 11
出力例 2
1
操作の一例を以下に示します。
- i=1 として操作を行う。S の 1 文字目を
0
から1
に変更し、S の前後を反転する。操作後、S=11
となる。
入力例 3
4 1111 1111
出力例 3
0
入力例 4
10 0110111010 1001010011
出力例 4
5
コメント