AtCoder Beginner Contes 152 A - AC or WA
今年は雪が降らないので少しさみしいです、ねむーです。
今回はAtCoder(https://atcoder.jp/contests/abc152/tasks/abc152_a)にて開催されました、AtCoder Beginner Contes 152 A問題「A - AC or WA」の問題と僕との戦闘記です。
0.はじめに
1.問題文
高橋君は、プログラミングコンテスト AXC001 に参加しており、問題 A にコードを提出しました。 この問題には N 個のテストケースがあり、すべてのテストケースに正解した場合のみ提出は AC となります。 高橋君の提出は、 N 個のテストケースのうち M 個のテストケースに正解しました。 高橋君の提出が AC となるか判定してください。
2.制約
- 1 ≤ N ≤ 100
- 0 ≤ M ≤ N
- 入力はすべて整数である。
3.入出力例
- 入力
3 3
- 出力
Yes
4.初見の感想
- NとMが一致しているかを判定します
5.コードと簡単な解説
using System; using System.Collections.Generic; using System.Linq; class Program { static void Main(string[] args) { string[] input = Console.ReadLine().Split(); int N = int.Parse(input[0]); int M = int.Parse(input[1]); if (N == M) { Console.WriteLine("Yes"); } else Console.WriteLine("No"); } }
7.最後に
問題文の解釈勝負ですね~
AtCoder Beginner Contest 152 B - Comparing Strings
最近紅茶がブームになっています、ねむーです。
今回はAtCoder(https://atcoder.jp/contests/abc152/tasks/abc152_b)にて開催されました、AtCoder Beginner Contest 152 B問題「B - Comparing Strings」の問題と僕との戦闘記です。
0.はじめに
1.問題文
1 桁の正整数 a , b が与えられます。整数 a を b 回繰り返してできる文字列と 整数 b を a 回繰り返してできる文字列のうち、辞書順で小さい方を答えてください。
2.制約
- 1 ≤ a ≤ 9
- 1 ≤ b ≤ 9
- a , b は整数
3.入出力例
- 入力
4 3
- 出力
3333
4.初見の感想
- 先頭の数字が小さい方が、辞書順は早い
- 2つの数字の小さい方で数字を作る
5.学びポイント
- 改行しない文字表示はConsole.Writeでできる
6.コードと簡単な解説
using System; using System.Collections.Generic; using System.Linq; class Program { static void Main(string[] args) { string[] input = Console.ReadLine().Split(); int a = int.Parse(input[0]); int b = int.Parse(input[1]); if (a < b) { for (int i = 0; i < b; i++) { Console.Write(a); } } else { for (int i = 0; i < a; i++) { Console.Write(b); } } } }
7.最後に
久しぶりにConsole.Write使いましたね!
AtCoder Beginner Contest 153 C - Fennec vs Monster
久しぶりに晴れている気がします、ねむーです。
今回はAtCoder(https://atcoder.jp/contests/abc153/tasks/abc153_c)にて開催されました、AtCoder Beginner Contest 153 C問題「C - Fennec vs Monster」の問題と僕との戦闘記です。
0.はじめに
1.問題文
フェネックは N 体のモンスターと戦っています。
i 番目のモンスターの体力は H i です。
フェネックは次の 2 種類の行動を行うことができます。
- 攻撃:モンスターを 1 体選んで攻撃することで、そのモンスターの体力を 1 減らす
- 必殺技:モンスターを 1 体選んで必殺技を使うことで、そのモンスターの体力を 0 にする
攻撃と必殺技以外の方法でモンスターの体力を減らすことはできません。
全てのモンスターの体力を 0 以下にすればフェネックの勝ちです。
フェネックが K 回まで必殺技を使えるとき、モンスターに勝つまでに行う攻撃の回数 (必殺技は数えません) の最小値を求めてください。
2.制約
- 1 ≤ N ≤ 2 × 105
- 0 ≤ K ≤ 2 × 105
- 1 ≤ H i ≤ 109
- 入力中のすべての値は整数である
3.入出力例
- 入力
3 0 1000000000 1000000000 1000000000
- 出力
3000000000
4.初見の感想
- HPの大きい敵に必殺技を使いたい
- HPの昇順にソートして、HPの和をK番目から考える
- オーバーフローに注意してlong型を使用
5.コードと簡単な解説
using System; using System.Collections.Generic; using System.Linq; class Program { public static void Main() { string[] input = Console.ReadLine().Split(); long N = long.Parse(input[0]); long K = long.Parse(input[1]); long[] H = new long[N]; input = Console.ReadLine().Split(); for (long i = 0; i < N; i++) { H[i] = long.Parse(input[i]); } Array.Sort(H); Array.Reverse(H); long ans = 0; for(long i = K; i < N; i++) { ans += H[i]; } Console.WriteLine(ans); } }
6.最後に
実はブログ投稿ツイートのいいねに喜んでいます!
AtCoder Beginner Contest 153 A - Serval vs Monster
修論をがんばる2月です、ねむーです。
今回はAtCoder(https://atcoder.jp/contests/abc153/tasks/abc153_a)にて開催されました、AtCoder Beginner Contest 153 A問題「A - Serval vs Monster」の問題と僕との戦闘記です。
0.はじめに
1.問題文
サーバルはモンスターと戦っています。
モンスターの体力は H です。
サーバルが攻撃を 1 回行うとモンスターの体力を A 減らすことができます。 攻撃以外の方法でモンスターの体力を減らすことはできません。
モンスターの体力を 0 以下にすればサーバルの勝ちです。
サーバルがモンスターに勝つために必要な攻撃の回数を求めてください。
2.制約
- 1 ≤ H ≤ 104
- 1 ≤ A ≤ 104
- 入力中のすべての値は整数である。
3.入出力例
- 入力
10 4
- 出力
3
4.初見の感想
- H÷Aの小数点切り上げです
5.学びポイント
- Math.Ceilingで切り上げできます
6.コードと簡単な解説
using System; using System.Collections.Generic; using System.Linq; class Program { public static void Main() { string[] input = Console.ReadLine().Split(); double H = double.Parse(input[0]); double A = double.Parse(input[1]); double ans = 0; ans = Math.Ceiling(H / A); Console.WriteLine(ans); } }
7.最後に
ぱっと切り上げの関数名出てこないんですよね(^-^;
AtCoder Beginner Contest 150 C - Count Order
1月も終わるのが早いです、ねむーです。
今回はAtCoder(https://atcoder.jp/contests/abc150/tasks/abc150_c)にて開催されました、AtCoder Beginner Contest 150 C問題「C - Count Order」の問題と僕との戦闘記です。
0.はじめに
1.問題文
大きさ N の順列 ( 1 , 2 , . . . , N ) を並び替えてできる数列) P , Q があります。
大きさ N の順列は N ! 通り考えられます。このうち、 P が辞書順で a 番目に小さく、 Q が辞書順で b 番目に小さいとして、 | a − b | を求めてください。
2.制約
- 2 ≤ N ≤ 8
- P , Q は大きさ N の順列である。
- 入力は全て整数である。
3.入力例
- 入力
8 7 3 5 4 2 1 6 8 3 8 2 5 4 6 7 1
- 出力
17517
4.初見の感想
- 制約が2~8なので入力として考えられるパターンを全部列挙して、何番目かを確かめたい
- どうやって辞書順に並べ替えるか
5.学びポイント
- 順列を辞書順で作成するPermutationクラスを作った
- 再帰的処理で順列を作成
- 先頭で「1」を使う→「2,3,4」で残りの順列を作るという感じ
6.コードと簡単な解説
using System; using System.Collections.Generic; using System.Linq; public class Permutation { //再帰の初期セットを代入する処理 public IEnumerable<T[]> Enumerate<T>(IEnumerable<T> items) { return _GetPermutations<T>(new List<T>(), items.ToList()); } //再帰関数 private IEnumerable<T[]> _GetPermutations<T>(IEnumerable<T> perm, IEnumerable<T> items) { if (items.Count() == 0) { yield return perm.ToArray(); } else { foreach (var item in items) { //先頭の文字を省いて再帰を回す var result = _GetPermutations<T>(perm.Concat(new T[] { item }), items.Where(x => x.Equals(item) == false)); foreach (var xs in result) yield return xs.ToArray(); } } } } class Program { public static void Main() { int N = int.Parse(Console.ReadLine()); string[] input = Console.ReadLine().Split(); string[] input2 = Console.ReadLine().Split(); int[] A = new int[N]; int[] B = new int[N]; int[] temp = new int[N]; int pattern = 1; for (var i = 0; i < N; i++) { A[i] = int.Parse(input[i]); B[i] = int.Parse(input2[i]); //patternで順列の総数を計算 pattern *= (i + 1); //最初に入力する1~Nまでの順列を準備 temp[i] = i+1; } int[,] all_list = new int[pattern, N]; var perm = new Permutation(); int count = 0,a_num=0,b_num=0; bool A_flag = true; bool B_flag = true; foreach (var n in perm.Enumerate(temp)) { A_flag = true;B_flag = true; for (int i = 0; i < N; i++) { //辞書順でAやBと一致しないところがあればflagをfalse all_list[count, i] = n[i]; if (A[i] != n[i]) A_flag = false; if (B[i] != n[i]) B_flag = false; } count++; //辞書順をa_num,b_numに保存 if (A_flag == true) { a_num = count; } if (B_flag == true) { b_num = count; } } Console.WriteLine(Math.Abs(a_num - b_num)); } }
7.最後に
この問題みんな通してるんだけど、僕は苦手な気がします…
AtCoder Beginner Contest 150 B - Count ABC
緑色になってから毎回コンテストに緊張します、ねむーです。
今回はAtCoder(https://atcoder.jp/contests/abc150/tasks/abc150_b)にて開催されました、AtCoder Beginner Contest 150 B問題「B - Count ABC」の問題と僕との戦闘記です。
0.はじめに
1.問題文
英大文字のみからなる長さ N の文字列 S があります。
S の連続する部分列 (入出力例をご覧ください) として ABC がいくつ含まれるかを求めてください。
2.制約
- 3 ≤ N ≤ 50
- S は英大文字のみからなる。
3.入力例
- 入力
33 ABCCABCBABCCABACBCBBABCBCBCBCABCB
- 出力
5
4.初見の感想
- string型は配列形式で要素にアクセスできる(input[i]の形)
- for文でABCを検出
5.コードと簡単な解説
using System; using System.Collections.Generic; using System.Linq; class Program { public static void Main() { int N = int.Parse(Console.ReadLine()); string input = Console.ReadLine(); int ans = 0; for(int i = 0; i < N - 2; i++) { if (input[i] == 'A' && input[i+1] == 'B' && input[i+2] == 'C') ans++; } Console.WriteLine(ans); } }
6.最後に
最近のB問題は灰色パフォーマンスなのは驚きです…
AtCoder Beginner Contest 153 B - Common Raccoon vs Monster
最近のABCではこの辺の問題は早解き選手権ですね、ねむーです。
今回はAtCoder(https://atcoder.jp/contests/abc153/tasks/abc153_b)にて開催されました、AtCoder Beginner Contest 153 B問題「B - Common Raccoon vs Monster」の問題と僕との戦闘記です。
0.はじめに
1.問題文
アライグマはモンスターと戦っています。
モンスターの体力は H です。
アライグマは N 種類の必殺技を使うことができ、 i 番目の必殺技を使うとモンスターの体力を A i 減らすことができます。 必殺技を使う以外の方法でモンスターの体力を減らすことはできません。
モンスターの体力を 0 以下にすればアライグマの勝ちです。
アライグマが同じ必殺技を 2 度以上使うことなくモンスターに勝つことができるなら Yes を、できないなら No を出力してください。
2.制約
- 1 ≤ H ≤ 109
- 1 ≤ N ≤ 105
- 1 ≤ A i ≤ 104
- 入力中のすべての値は整数である。
3.入出力例
- 入力
211 5 31 41 59 26 53
- 出力
No
4.初見の感想
- 配列Aの和がHを超えているかどうかで条件分岐です
5.学びポイント
- C#では.sum()で和が計算できます
6.コードと簡単な解説
using System; using System.Collections.Generic; using System.Linq; class Program { public static void Main() { string[] input = Console.ReadLine().Split(); long H = int.Parse(input[0]); long N = int.Parse(input[1]); input = Console.ReadLine().Split(); long[]A = new long[N]; for(long i = 0; i < N; i++) { A[i] = int.Parse(input[i]); } long sum = A.Sum(); if (H <= sum) { Console.WriteLine("Yes"); } else { Console.WriteLine("No"); } } }
7.最後に
少し問題解釈に時間かかりましたので反省です…