初めまして。
茶色コーダーを目指して毎週コンテストに参加しています。
まだまだ先は長いですが、解けた問題を投稿していきたいと思います。
使用言語はJavaです。
#A問題
https://atcoder.jp/contests/abc229/tasks/abc229_a
####方針
"#"(黒マス)が3つ以上あれば、黒マスをどこに配置しても条件を満たします。
逆に黒マスが2つのみであれば、配置される位置によって判定が変わる。
具体的には黒マスが縦に並んでいるか、横に並んでいる場合は条件を満たす。
そうでない場合は条件を満たさないとします。
####コード
標準入力と出力に関するコードは省略しています。
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とする。
####コード
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に到達するまで、足し込んでいけば良いです。
####コード
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問題は分からず…
以上となります。
ありがとうございました。
#参考文献
https://qiita.com/p_shiki37/items/a0f6aac33bf60f5f65e4