トカゲは変温動物である。暖かい年にはその個体数を増やすが、寒い年には逆に減っていく。
サカモト博士が発見したサカモトカゲ(学名: Plestiodon sakamotus)は、暖かい年には個体数を3増やし、寒い年には個体数を半分(小数点以下切り捨て)にすることが広く知られている(当然ではあるが、0匹になって絶滅してしまえばそれ以降の繁殖は行われない)。
サカモトカゲは上記の性質から、過去の気候状況がわかれば容易に個体数を計算することができる。与えられた過去の気候状況から、サカモトカゲの個体数をシミュレーションせよ。
入力は以下の形式で表される。
D
N1 T1
N2 T2
:
ND TD
ここでDは気候状況のデータの数、Niはi番目のデータにおいて最初に生息しているサカモトカゲの数である。Tiはi番目のデータにおいて過去の気候状況を表す文字からなる文字列である。Ti の各文字は、その年が暖かい年ならば'w'、寒い年ならば'c'である。
入力は以下の条件をすべて満たす。
- 1 <= D <= 100
- 1 <= i <= D を満たすすべての整数iについて、
- 1 <= Ni <= 100
- Tiの文字数をLiとするとき、1 <= Li <= 100
- Tの中に現れる文字はすべて{'w', 'c'}のいずれか
出力は、各気候データについて現在のサカモトカゲの匹数を1行で出力せよ。
3
3 wwc
1 cwcwwwwww
20 wwwwwwwwwwcwwwwwwwwwwc
4
0
27
- 1つめのデータでは、1年目で6匹に増え、2年目で9匹に増え、3年目で4匹に減る。
- 2つめのデータでは、1年目で0匹になるため、それ以降は繁殖しない。
文字列は、使用する言語ごとに取り扱い方に注意する必要がある。 以下では、CとJavaにおいて特に注意すべき点を挙げておく。
- Cには"文字列"という概念を表すデータ構造はなく、"文字の配列(char[])"として取り扱わなければならない。
- 各文字を取り出すには配列と同じように記述すればよい。
- Cの文字列は、最後に"\0"という文字が入るため、配列のサイズは実際の文字数より1つ多く取らなければならない。
- Cで文字列同士が等しいかどうかを判定するには strcmp関数 を用いる。
- string.hをincludeする必要がある
#include <string.h> /* strcmp関数を利用するために必要なヘッダファイル */
char[] str = "str";
str = {'s', 't', 'r', '\0'};
/* 上下どちらも同じ処理 */
char c = str[1]; /* cには't'が入る */
if (strcmp(str1, str2) == 0) {
/* str1とstr2が等しい場合の処理 */
} else {
/* str1とstr2が等しくない場合の処理 */
}
- Javaでは、文字列はStringクラスのインスタンス(≒String型の変数)として表される。
- "String"のSは 大文字 である。
- Javaの文字列から各文字を1文字だけ取り出すには charAtメソッド を用いる。
- Javaで文字列同士が等しいかどうかを判定するには equalsメソッド を用いる。
String str = "str";
char c = str.charAt(1); // cには't'が入る
if (str1.equals(str2)) {
// str1とstr2が等しい場合の処理
} else {
// str1とstr2が等しくない場合の処理
}