5年 はまこー
第14回日本情報オリンピック
問題解説
問題1 水道料金 (Water Rate)
• 水道料金の安い会社を選んだら何円?
• X社:1リットルあたりA円
• Y社:基本料金B円 + 上限Cリットル超過分 * 追加料金C円
• 入力
• X社(A : 料金/L)
• Y社(B : 基本料金、C : 使用量上限、D : 追加料金/L)
• P : JOI家の使用量
• 出力
• X社とY社で、安いほうを出力
問題1 水道料金 (Water Rate)
• 必要なもの:標準入出力、四則演算、条件分岐
• 変数:A, B, C, D, P, X, Y;
• 入力:scanf(“%d %d %d %d %d”, &A, &B, &C, &D, &P);
• X社とY社の水道料金をそれぞれ求める。
• X = A * P;
• Y = B;
• if(P > C) Y = Y + (P - C) * D;
• X社とY社で安いほうを出力する。
• if(X < Y) printf(“%dn”, X);
• else printf(“%dn”, Y);
問題2 クリスマスパーティー (Christmas Party)
• 友達は何点獲得した?
• JOI君は友達をN人呼んでとあるゲームをMラウンドした。
• JOI君がターゲットを1人えらぶ。
• 友達はターゲットになった人を予想してかく。
• ターゲットを発表し、当たってたら+1点。
• ターゲットは、はずした人数 X点を加算。
• 入力
• 友達の人数N, ゲーム回数M
• iラウンド目のターゲットの人の番号
• iラウンド目の予想番号
• 出力
• それぞれの友達のスコアを出力
問題2 クリスマスパーティー (Christmas Party)
• 必要なもの:ループ制御、配列
• 変数:N, M, A, 予想ターゲット T[100],プレイヤーのスコア S[100]
• 入力
• scanf(“%d %d”, &N, &M);
• for(M回) scanf(“%d”, &T[i]);
• 入力しながらスコア計算
• 予想ターゲットを入力
• 合ってたら S[プレイヤー番号]++, S[ターゲット番号 - 1]++;
• 結果を出力
問題3 気象予報士 (Weather Forecaster)
• 何分後に雲がくる?
• JOI市:南北 H km, 東西 W km
• 現在の雲の状況
• c ・・・ 雲がある
• .(ピリオド) ・・・ 雲がない
• 雲は1km/分で東に移動
• 最終的にどうなるかを出力。
• くる場合:何分後かを出力
• こない場合:-1を出力
• 行頭や行末に余計な空白を出力しないこと
問題3 気象予報士 (Weather Forecaster)
• 必要なもの:文字列制御
• 変数:H, W, Field, 雲フラグCFlag, 入力文字列F[101]
• 入力
• JOI市の大きさ scanf(“%d %d”, &H, &W);
• 状況を入力して計算
• 各行の雲の状況 scanf(“%s”, F);
• 一字ごとに調べる
• cだったら Field を0にし、雲フラグ値(現在地 + 1)をセット
• .だったら雲フラグを調べ、雲フラグがなければ -1、
雲フラグがあれば、現在地 – 雲フラグ値 + 1をFieldにセット
• 結果を出力
JOIを終えて
• どうでしたか?
• 1年生は来年も頑張りましょう。
• 今年より1問多く解くことを目標に頑張ってください。
• ソフト開発などに活かしていきましょう。
• もっと勉強したい人は、毎週AtCoderに参加してみましょう。
• 解説放送も見ると◎

第14回日本情報オリンピック問題解説

  • 1.
  • 2.
    問題1 水道料金 (WaterRate) • 水道料金の安い会社を選んだら何円? • X社:1リットルあたりA円 • Y社:基本料金B円 + 上限Cリットル超過分 * 追加料金C円 • 入力 • X社(A : 料金/L) • Y社(B : 基本料金、C : 使用量上限、D : 追加料金/L) • P : JOI家の使用量 • 出力 • X社とY社で、安いほうを出力
  • 3.
    問題1 水道料金 (WaterRate) • 必要なもの:標準入出力、四則演算、条件分岐 • 変数:A, B, C, D, P, X, Y; • 入力:scanf(“%d %d %d %d %d”, &A, &B, &C, &D, &P); • X社とY社の水道料金をそれぞれ求める。 • X = A * P; • Y = B; • if(P > C) Y = Y + (P - C) * D; • X社とY社で安いほうを出力する。 • if(X < Y) printf(“%dn”, X); • else printf(“%dn”, Y);
  • 4.
    問題2 クリスマスパーティー (ChristmasParty) • 友達は何点獲得した? • JOI君は友達をN人呼んでとあるゲームをMラウンドした。 • JOI君がターゲットを1人えらぶ。 • 友達はターゲットになった人を予想してかく。 • ターゲットを発表し、当たってたら+1点。 • ターゲットは、はずした人数 X点を加算。 • 入力 • 友達の人数N, ゲーム回数M • iラウンド目のターゲットの人の番号 • iラウンド目の予想番号 • 出力 • それぞれの友達のスコアを出力
  • 5.
    問題2 クリスマスパーティー (ChristmasParty) • 必要なもの:ループ制御、配列 • 変数:N, M, A, 予想ターゲット T[100],プレイヤーのスコア S[100] • 入力 • scanf(“%d %d”, &N, &M); • for(M回) scanf(“%d”, &T[i]); • 入力しながらスコア計算 • 予想ターゲットを入力 • 合ってたら S[プレイヤー番号]++, S[ターゲット番号 - 1]++; • 結果を出力
  • 6.
    問題3 気象予報士 (WeatherForecaster) • 何分後に雲がくる? • JOI市:南北 H km, 東西 W km • 現在の雲の状況 • c ・・・ 雲がある • .(ピリオド) ・・・ 雲がない • 雲は1km/分で東に移動 • 最終的にどうなるかを出力。 • くる場合:何分後かを出力 • こない場合:-1を出力 • 行頭や行末に余計な空白を出力しないこと
  • 7.
    問題3 気象予報士 (WeatherForecaster) • 必要なもの:文字列制御 • 変数:H, W, Field, 雲フラグCFlag, 入力文字列F[101] • 入力 • JOI市の大きさ scanf(“%d %d”, &H, &W); • 状況を入力して計算 • 各行の雲の状況 scanf(“%s”, F); • 一字ごとに調べる • cだったら Field を0にし、雲フラグ値(現在地 + 1)をセット • .だったら雲フラグを調べ、雲フラグがなければ -1、 雲フラグがあれば、現在地 – 雲フラグ値 + 1をFieldにセット • 結果を出力
  • 8.
    JOIを終えて • どうでしたか? • 1年生は来年も頑張りましょう。 •今年より1問多く解くことを目標に頑張ってください。 • ソフト開発などに活かしていきましょう。 • もっと勉強したい人は、毎週AtCoderに参加してみましょう。 • 解説放送も見ると◎