AtCoder Beginner Contest 274を振り返る。


  • 結果
    無念の2完。
    目標の3完できず、残念。悔しい。

  • Rate変動
    523 ⇨ 487


  • A問題 6分32秒でAC

小数下4桁目を四捨五入して回答する問題。
余裕。と言いたかったけど、特定の桁数で四捨五入する処理がすぐに出てこず、WEBで調べて回答。知っていれば、もっと早く回答できたと思う。
この辺の基本的な処理は、呼吸をするが如く出てくるようにしないとなぁ。

import java.util.*;
import java.math.BigDecimal;
import java.math.RoundingMode;
 
public class Main {
    public static void main(String[] args) {
        // 入力読み込み
        Scanner sc = new Scanner(System.in);
        double A = sc.nextDouble();
        double B = sc.nextDouble();
 
        BigDecimal bd;
        bd = new BigDecimal(B/A);
        bd = bd.setScale(3, RoundingMode.HALF_UP);
 
 
        System.out.println(bd);
        sc.close();
    }
}
 
  • B問題 14分8秒でAC

列ごとに、#の数を答える問題。
一度、char型の配列に移してから数え上げたが、そんなことせず、
入力から受け取った際に、数え上げればよかった。
最後の出力の部分もなんかダサいな。。もっと良い方法ありそう。

import java.util.*;

public class Main {
    public static void main(String[] args) {
        // 入力読み込み
        Scanner sc = new Scanner(System.in);
        int H = sc.nextInt();
        int W = sc.nextInt();
        boolean[][] C = new boolean[H][W];


        for (int i = 0; i <H; i++) {
            String S = sc.next();
            for (int j = 0; j < W; j++) {
                C[i][j] = S.charAt(j) == '#' ? true : false;
            }
        }
        for (int i = 0; i < W; i++) {
            int count = 0;
            for (int j = 0; j < H; j++) {
                if (C[j][i]) {
                    count++;
                }
            }
            if(i == W-1){
                System.out.println(count);
            }else{
                System.out.print(count+" ");
            }
        }
        sc.close();
    }
}

//    Set<Long> list = new HashSet<>();
  • C問題 残り時間80分使ってACできず。。

増殖するアメーバに対して、先祖までに何回増殖したかを求める問題。
ここまでABを順調に倒してきたが、C問題で躓く。。
C問題を見た時、「動的計画法」だ!と錯覚し、その解法を探している間に時間切れ。。そもそも、C問題は、動的計画法を使用しないでよかった。
先頭のアメーバから順に、増殖先を記録していけば良いだけだった。

import java.util.*;

public class Main {
    public static void main(String[] args) {
        // 入力読み込み
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int[] A = new int[N];
        int[] T = new int[2*N+1];

        for (int i = 0; i < N; i++) {
            A[i] = sc.nextInt();
        }
        for (int i = 0; i < N; i++) {
            T[2*i+1] =T[A[i]-1]+1;
            T[2*i+2] =T[A[i]-1]+1;
        }
        for (int i = 0; i < 2*N+1; i++) {
            System.out.println(T[i]);
        }
        sc.close();
    }
}

//    Set<Long> list = new HashSet<>();
  • D問題 以下、着手できず

xy平面上にて、(0,0)から直角に距離Aを離して点を打っていき、最後に指定された座標に到達できるかを問う問題。
動的計画法にて解ける。解法のイメージはついているが、実装できるかと言われると、、、となってしまう。
ちなみに、このD問題を解くと、1400~1000くらいのレートになる。
水色になるためには、ここをサクッと解けるようになる必要がある。早くこれを解けるようになりたい。

  • E問題

bitDP問題。これを解ければ、1800~1500まで見えるくる。
解説を見てコードを見たが、よくわからん。。
解説動画待ちかな。

  • F問題

  • G問題

  • EX問題


問題文を正しく理解して、考察することができていない。
そもそも、解法への理解が甘いせいで、誤用してしまう。
さらに精進しよう。。


この記事が参加している募集

#振り返りnote

85,011件

この記事が気に入ったらサポートをしてみませんか?