UNICORNプログラミングコンテスト2022(AtCoder Beginner Contest 269)
参加したコンテスト
提出した回答A
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); int c = sc.nextInt(); int d = sc.nextInt(); System.out.println((a+b) * (c-d)); System.out.println("Takahashi"); sc.close(); } }
提出した回答B
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); Map map = new HashMap<>(); for (int i = 1; i <= 10; i++) { String tmp = sc.next(); if (tmp.contains("#")) { map.put(i, tmp); } } int A = (int) Collections.min(map.keySet()); int B = (int) Collections.max(map.keySet()); String tmp2 = map.get(A).toString(); List list = new ArrayList<>(); for (int i = 0; i < 10; i++) { if (tmp2.charAt(i) == '#') { list.add(i); } } int C = (int) Collections.min(list) + 1; int D = (int) Collections.max(list) + 1; System.out.println(A + " " + B); System.out.println(C + " " + D); sc.close(); } }
提出しようとした回答C(解けていない状態のコードです)
import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); long N = sc.nextLong(); String N_2 = Long.toBinaryString(N);//文字列で扱わないとエラーが発生する //2の○乗の位の値が1ならその数を格納する List list = new ArrayList<>(); int counter = 0; for (int i = N_2.length()-1; 0 <= i; i--) { if (N_2.charAt(i) == '1') { list.add(counter); } counter += 1; } //出力する値は2のlistのサイズ数ある //11→1011なら[0,1,3]で2の3乗=8個、答えがある List list_N_10 = new ArrayList<>(); for (int i = 0; i < Math.pow(2, list.size()); i++) { if (i == 0) { System.out.println(0); } else { //listの中からフラグ立てをしたい } } } }
感想
コンテスト初参加!参加することに意義がある!!
A、B問題は必ず正解して、うまくいけばC問題も回答したいと思って臨んだ。
A問題は2分30秒程度で正解した。
B問題は25分程度で正解した。
意外といけるかと思ったが、C問題が解けず、そこで終了。解きたい方向性はあったものの、それを実装する力がなかった。まだまだ修行が必要。
最近発売された米田先生の本を購入したので、体系的に勉強する。
何れにせよ良い経験になった。C問題を確実に解き切る実力をつけることを当面の目標に頑張りたい。
TODO
- 他のA,B,C問題を解く
- アルゴリズムの本を読む
- タイミング合う回のコンテストに参加する
おわり。。