なにも わからぬ

パソコンとプログラミング関係をメモっていきたい

仙台の地下鉄が高いのでプログラミングの練習

f:id:htkb:20170130181032j:plain ようやくAtCoderのビギナーの問題が全部解けたので競プロ始めました。これから過去問でアルゴリズムと高校数学の復習をしながら早く人間になれるように頑張ります。

でなんかグラフ探索を身近な例で試してみたいと思い、遅いくせに高い仙台市営地下鉄とJRを使った運賃による重み付きグラフ探索とかどうかなと思いついたんだけど、全然グラフ探索なんかする必要のないクソ問題になってしまったので晒します。

f:id:htkb:20170130181023j:plain

N町から仙台までは電車で1駅、地下鉄は仙台までにN町駅を含めてB個駅がある。それぞれの地下鉄駅周辺の住人は「徒歩」「地下鉄」「電車(N町以外からはN町まで歩いて)」のいずれかでできるだけ安く仙台に行きたいと考えている。ただし人類は衰退したので、地下鉄1駅分歩くたびにC円の清涼飲料水を飲まなければならない。N町から仙台の電車賃がA円のとき、地下鉄の各駅において住人に利用される最大の仙台駅までの運賃を、N町駅から順に改行を入れて出力せよ。

標準入力
A B C
条件
A > 0, B > 1, C > 0
コード例
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int trainFare = sc.nextInt();
        int subwayCount = sc.nextInt();
        int drink = sc.nextInt();

        for (int i = 0; i < subwayCount; i++) {
            System.out.println(Math.min(drink*(subwayCount-i), trainFare+drink*i) - 1);
        }

    }
}
入力例 1
190 5 100
出力例 1
189
289
299
199
99

アカンこれABCの2問目未満の内容や……!次は普通に迷路でも作ってルート探索しよう……。