問題008(7点)

図のように二股に分かれている容器があります。
1 から10 までの番号が付けられた10 個の玉を容器の開口部A から落とし、左の筒B か右の筒C に玉を入れます。
板D は支点E を中心に左右に回転できるので、板D を動かすことで筒B と筒C のどちらに入れるか決めることができます。
開口部A から落とす玉の並びを与えます。
それらを順番に筒B 又は筒Cに入れていきます。
このとき、筒B と筒C のおのおのが両方とも番号の小さい玉の上に大きい玉を並べられる場合はYES、並べられない場合はNO と半角大文字で出力して終了するプログラムを作成してください。
ただし、容器の中で玉の順序を入れ替えることはできないものとします。
また、続けて同じ筒に入れることができるものとし、筒B, C ともに10 個の玉がすべて入るだけの余裕があるとします。

問題008-図

入力

1 番目の玉の番号(整数)
2 番目の玉の番号(整数)
3 番目の玉の番号(整数)
4 番目の玉の番号(整数)
5 番目の玉の番号(整数)
6 番目の玉の番号(整数)
7 番目の玉の番号(整数)
8 番目の玉の番号(整数)
9 番目の玉の番号(整数)
10 番目の玉の番号(整数)

出力

YES またはNO

入力例1

3
1
4
2
5
6
7
8
9
10

出力例1

YES

入力例2

10
9
8
7
6
5
4
3
2
1

出力例2

NO

考え方

まず、とりあえず最初の玉をBに入れます。
その後、どちらに入れれば得かを考えながら入れていきます。
次の四通りが考えられます。

(i)BにもCにも入れられる場合

大きい数字が入っている方に入れた方が得です。


6


B
C
2
4

この場合Cに入れた方が得。

(ii)Bにしか入れられない場合

Bに入れましょう。

(iii)Cにしか入れられない場合

Cに入れましょう。

(iv)BにもCにも入れられない場合

「NO」と出力して終了しましょう。



//
//A008.java
//

import java.io.*;

public class A008{
    public static void main(String[] args)throws IOException{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

        //10個の玉の番号
        int[] ball=new int[10];
        //データを入力
        for(int i=0;i<ball.length;i++){
            ball[i]=Integer.parseInt(br.readLine());
        }

        //筒Bと筒Cの一番上の玉
        int b=0;
        int c=0;
        //玉を入れていく
        for(int i=0;i<ball.length;i++){
            //最初はごちゃごちゃ言わずにBに入れる
            if(i==0){
                b=ball[i];
                continue;
            }
            if(ball[i]>b && ball[i]>c){
                //BにもCにも入れられる場合
                //大きい方に入れる
                if(b>c){
                    b=ball[i];
                }else{
                    c=ball[i];
                }
            }else if(ball[i]>b && ball[i]<c){
                //Bにしか入れられない場合
                b=ball[i];
            }else if(ball[i]<b && ball[i]>c){
                //Cにしか入れられない場合
                c=ball[i];
            }else{
                //ムリ(おしまい)
                System.out.println("NO");
                System.exit(0);
            }
        }
        //成功
        System.out.println("YES");
    }
}


正しくゲームをするページ>パソコン甲子園攻略>ココ