ARC#006

AtCoder Regular Contest 006 - AtCoder Regular Contest 006 | AtCoder
AtCoder会場

晩御飯を食べて5分遅れで開始。
A問題、C問題は時間内に解けたけれども、B、D問題は死んだ。
B問題はちょっと考えてみると割と簡単だった。
D問題は・・・

とりあえずコードを載せておきます。
A問題 宝くじ

import java.util.Scanner;

public class Main {
	A a;
	Main(){
		a = new A();
		a.solve();
	}
	
	class A{
		Scanner sc;//標準入力読み込み用
		int NUM = 6;//
		int[] e = new int[NUM+1];//余分に一つ作っとくのがミソ
		int b;
		int[] j = new int[NUM+1];
		

		A(){//コンストラクタでは与えられる入力を変数に代入するだけ。
			sc = new Scanner(System.in);
			for(int i = 0; i<NUM;i++){
				e[i] = sc.nextInt();
			}
			
			b=sc.nextInt();
			
			for(int i = 0; i<NUM;i++){
				j[i] = sc.nextInt();
			}
			e[NUM] = -1;
			j[NUM] = -1;
		}
		
		
		public void solve(){
			int match = 0;
			int i = 0, k = 0; //ループ用カウンタ
			boolean isBonus = false;//ボーナスナンバーが含まれているか
			do{
				//System.err.println("e:" + e[i] + ", j:" + j[k]);
				if(e[i] < j[k]){
					i++;
				}
				else if(e[i] == j[k]){
					i++;
					k++;
					match++;
					//System.err.println("match++");
				}
				else{
					k++;
				}
			}while(e[i] != -1 && j[k] != -1);
			for(i = 0; i < NUM; i++){
				if(j[i] == b){
					isBonus = true;
					break;
				}
			}
			
			switch(match){
			case 3:
				System.out.println(5);
				break;
			case 4:
				System.out.println(4);
				break;
			case 5:
				if(!isBonus){
					System.out.println(3);
				}else{
					System.out.println(2);
				}
				break;
			case 6:
				System.out.println(1);
				break;
			default:
				System.out.println(0);
			}
		}
	}	
	
	
	public static void main(String[] args) {
		new Main();
	}
}


B問題 あみだくじ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
	B b;
	Main(){
		b = new B();
		b.solve();
	}
	
	class B{
		BufferedReader br;
		int n;
		int l;
		String[] lines;
		String leader;
		B(){
			try {
				br = new BufferedReader(new InputStreamReader(System.in));
				String[] num = br.readLine().split(" ");
				n = Integer.parseInt(num[0]);//あみだの本数 入力文字数は2n-1
				l = Integer.parseInt(num[1]);//あみだの段数
				lines = new String[l];
				for(int i = 0; i < l; i++){
					lines[i] = br.readLine();
				}
				leader = br.readLine();
			} catch (IOException e) {
				e.printStackTrace();
			} 
		}
		
		
		public void solve(){
			int state = leader.indexOf('o');
			for(int i = l-1; i >=0 ; i--){
				int[] arr = borderLines(lines[i]);
				for(int j = 0; j < arr.length ; j++){
					if(arr[j] == state-1 && state>0){
						state-=2;
						break;
					}
					else if(arr[j] == state+1 && state<2*n-3){
						state+=2;
						break;
					}
				}
			}
			System.out.println(state/2 + 1);
		}
		
		private int[] borderLines(String str){
			int[] arr = new int[n];
			int index = 0;
			while(str.contains("-")){
				arr[index] = str.lastIndexOf("-");
				str = str.substring(0,arr[index]);
				index++;
			}
			return arr;
		}
	}	
	
	
	public static void main(String[] args) {
		new Main();
	}
}


C問題 ダンボールの山

import java.util.Scanner;
import java.util.Arrays;
 
public class Main {
	C c;
	Main(){
		c = new C();
		c.solve();
	}
	
	class C{
		Scanner sc;
		int n;
		int [] w;
		C(){
			sc = new Scanner(System.in);
			n = sc.nextInt(); //あみだの本数
			w = new int[n];
			for(int i = 0; i < n; i++){
				w[i] = sc.nextInt();
			}
		}
		
		
		public void solve(){
			int []top = new int[100];
			top[0] = w[0];
			int mountains = 1; //山の数
			for(int i = 0; i < n; i++){
				for(int j = 0 ; j < mountains+1 ; j++){
					if(top[j] >= w[i]){
						top[j] = w[i];
						break;
					}
					if(top[j] == 0){
						top[j] = w[i];
						mountains++;
						break;
					}
				}
				//山を並べる
				for(int k = 0; top[k]==0; k++){
					for(int l = k+1; top[l]==0;l++){
						if(top[k] > top[l]){
							int tmp = top[k];
							top[k] = top[l];
							top[l] = tmp;
						}
					}
				}
			}
			
			System.out.println(mountains);
		}
	}	
	
	
	public static void main(String[] args) {
		new Main();
	}
}


D問題

だれか教えてくださ-----。゚(゚´Д`゚)゚。-----い!!!!

てか出来てる人のコード見ればいいじゃん!解決した!