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問題
だれか教えてくださ-----。゚(゚´Д`゚)゚。-----い!!!!
てか出来てる人のコード見ればいいじゃん!解決した!