白駿16162歌姫と三段高音解題(JAVA)


質問リンク

質問する


I'm in my dream~eam~eam ♬
三段高音に感動した嘉熙は高音京津大会を見学することにした.「音義界の名前を数字で表現しましょう.」「1オクターブ」は1で表現され、1音上がるごとにその音を表現する回数が1増えると考えられます.音Aを起点とし、D音を高音とする場合、第1項をA、公差をDとする等差数列とし、この等差数列の項数をXとする場合、この等差数列をX段高音と呼ぶ.以下はA=1,D=2の六段高音である.

このような試合は問題があり、1人以上の参加者が同時に高音を歌うため、正常に審査することができない.したがって,数桁表現の参加者の音が順次与えられると,できるだけ中,音Aから始め,D音のX段高音で最大のXを求める.彼らを助けるプログラムを作成しましょう.

入力


第1行目では、参加者の負数を表す整数N(1≦N≦2×104)、高音の第1項と公差を表す整数A、D(1≦A、D≦107)がスペースで区切られている.
2行目では,参加者の音を表すN個の整数を順に空白に分割する.この値は107を超えない正の整数です.

しゅつりょく


Aからは、D音で上がるX段高音で、できるだけ最大のXを出力します.

に答える


参加者のトーンを配置し、これらのトーンの中でtargetValueと同じトーンかどうかを探します.可能な場合はmaxStackを1ずつ増やし、targetValueで次のステップに変更します.

ソースコード

import java.util.*;
import java.io.*;

public class Main {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st = new StringTokenizer(br.readLine());
        final int NUMBER_OF_VALUE = Integer.parseInt(st.nextToken());
        int targetValue = Integer.parseInt(st.nextToken());
        final int VALUE_GAP = Integer.parseInt(st.nextToken());
        int value[] = new int[NUMBER_OF_VALUE];

        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < NUMBER_OF_VALUE; i++) {
            value[i] = Integer.parseInt(st.nextToken());
        }
        int maxStack = 0;
        for (int i = 0; i < NUMBER_OF_VALUE; i++) {
            if (value[i] != targetValue) {
                continue;
            }
            maxStack++;
            targetValue += VALUE_GAP;
        }

        sb.append(maxStack);
        sb.append("\n");
        bw.write(sb.toString());

        bw.flush();
        br.close();
        bw.close();

    }


}