0
0

More than 1 year has passed since last update.

ABC 229 参加してみました。(C問題まで)

Last updated at Posted at 2021-12-03

初めまして。
茶色コーダーを目指して毎週コンテストに参加しています。

まだまだ先は長いですが、解けた問題を投稿していきたいと思います。
使用言語はJavaです。

A問題

方針

 "#"(黒マス)が3つ以上あれば、黒マスをどこに配置しても条件を満たします。
逆に黒マスが2つのみであれば、配置される位置によって判定が変わる。
具体的には黒マスが縦に並んでいるか、横に並んでいる場合は条件を満たす。
そうでない場合は条件を満たさないとします。

コード

標準入力と出力に関するコードは省略しています。

main.java
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.NoSuchElementException;

public class Main {
    public static void main(String[] args) {
        FastScanner fs = new FastScanner();
        PrintWriter out = new PrintWriter(System.out);

        String s1 = fs.next();
        String s2 = fs.next();
        int black = 0;
        for(int i = 0;i < 2;i++) {
            if(s1.charAt(i) == '#') {
                black++;
            }
            if(s2.charAt(i) == '#') {
                black++;
            }
        }

        if(black >= 3) {
            out.println("Yes");
        }else if(s1.charAt(0) == '#' && s1.charAt(1) == '#') {
            out.println("Yes");
        }else if(s1.charAt(0) == '#' && s2.charAt(0) == '#') {
            out.println("Yes");
        }else if(s1.charAt(1) == '#' && s2.charAt(1) == '#') {
            out.println("Yes");
        }else if(s2.charAt(0) == '#' && s2.charAt(1) == '#') {
            out.println("Yes");
        }else {
            out.println("No");
        }

        out.flush();
        fs.close();
    }

}

分岐が複雑になってしまったので、もう少しスッキリさせるべきだったのが反省点です…

B問題

https://atcoder.jp/contests/abc229/tasks/abc229_b
標準入力と出力に関するコードは省略しています。

方針

 整数A,Bは共に1 ≦ A,B ≦ 10^18で、long型でも受け取ることができないので文字列で受け取ります。文字列として受け取ったA,Bに関して末尾から(一の位に相当)一桁ずつ探索して和が10以上であればHardとして、そうでなければEasyとする。

コード

Main.java
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.NoSuchElementException;

public class Main {
    public static void main(String[] args) {
        FastScanner fs = new FastScanner();
        PrintWriter out = new PrintWriter(System.out);

        String aString = fs.next();
        String bString = fs.next();

        boolean flag = false;

        for(int i = 1;i <= Math.min(aString.length(), bString.length());i++) {
            int intA = Character.getNumericValue(aString.charAt(aString.length() - i));
            int intB = Character.getNumericValue(bString.charAt(bString.length() - i));

            int sum = intA + intB;

            if(sum >= 10) {
                flag = true;
                break;
            }
        }

        if(flag) {
            out.println("Hard");
        }else {
            out.println("Easy");
        }

        out.flush();
        fs.close();
    }

}

C問題

https://atcoder.jp/contests/abc229/tasks/abc229_c
標準入力と出力に関するコードは省略しています。

方針

「可能なピザの美味しさの最大値を求める」ということなので、1gあたりの美味しさ(Ai)が大きい方から順番にWgに到達するまで、足し込んでいけば良いです。

コード

Main.java
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Comparator;
import java.util.NoSuchElementException;

public class Main {
    public static void main(String[] args) {
        FastScanner fs = new FastScanner();
        PrintWriter out = new PrintWriter(System.out);

        int n = fs.nextInt();
        long w = fs.nextLong();

        long[][] cheese = new long[n][2];

        for(int i = 0;i < n;i++) {
            //美味しさ
            cheese[i][0] = fs.nextLong();
            //重さ
            cheese[i][1] = fs.nextLong();
        }

        //チーズの美味しさを昇順ソート
        Sort2DArrayBasedOnColumnNumber(cheese, 1);

        long total = 0;
        for(int i = n - 1;i >= 0;i--) {
            if(w >= cheese[i][1]) {
                total += cheese[i][0] * cheese[i][1];
                w -= cheese[i][1];
            }else {
                total += cheese[i][0] * w;
                break;
            }
        }

        out.println(total);
        out.flush();
        fs.close();
    }

    public static  void Sort2DArrayBasedOnColumnNumber (long[][] array, final int columnNumber){
        Arrays.sort(array, new Comparator<long[]>() {
            @Override
            public int compare(long[] first, long[] second) {
               if(first[columnNumber-1] > second[columnNumber-1]) return 1;
               else if(first[columnNumber - 1] == second[columnNumber - 1]) return 0;
               else return -1;
            }
        });
    }

}

結果

3完でした。D問題は分からず…

以上となります。
ありがとうございました。

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0