AtCoder Beginner Contest 151 C - Welcome to AtCoder
週末にバイキングにいくので楽しみです、ねむーです。
今回はAtCoder(https://atcoder.jp/contests/abc151/tasks/abc151_c)にて開催されました、AtCoder Beginner Contest 151 C問題「C - Welcome to AtCoder」の問題と僕との戦闘記です。
0.はじめに
1.問題文
高橋君は AtCoder のコンテストに参加しています。
このコンテストでは、 N 問の問題が出題されます。
高橋君はコンテスト中に M 回の提出を行いました。
i 回目の提出は p i 番目の問題への提出であり、結果は S i (AC または WA) でした。
高橋君の正答数は、AC を 1 回以上出した問題の数です。
高橋君のペナルティ数は、高橋君が AC を 1 回以上出した各問題において、初めて AC を出すまでに出した WA の数の総和です。
高橋君の正答数とペナルティ数を答えてください。
2.制約
- N , M , p i は整数
- 1 ≤ N ≤ 105
- 0 ≤ M ≤ 105
- 1 ≤ p i ≤ N
- S i は AC か WA のいずれか
3.入出力例
- 入力
2 5 1 WA 1 AC 2 WA 2 AC 2 WA
- 出力
2 2
4.初見の感想
- トータルの問題数でのAC数を出せばよいのでAC数は1変数でOK
5.学びポイント
- 最終的にACしない問題はWAとカウントされない
- WAの数は配列で保持しておく
- その問題がACしたらWA数に加える
6.コードと簡単な解説
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]); //ACしたかどうかのflag bool []flag=new bool[N]; //WAの数を配列で保持 int[] wa_hidden = new int[N]; for (int i = 0; i < N; i++) { flag[i] = false; wa_hidden[i] = 0; } int ac = 0; int wa = 0; for (int i = 0; i < M; i++) { string[] temp = Console.ReadLine().Split(); int p = int.Parse(temp[0])-1; string S = temp[1]; if (flag[p] == false && S == "AC") { //ACしたらWAの数を反映する ac++;flag[p] = true;wa += wa_hidden[p]; } if (flag[p] == false && S == "WA") { wa_hidden[p]++; } } Console.WriteLine(ac+" "+wa); } }
7.最後に
最初WAしたままの問題のWAもカウントしてました…
AtCoder Beginner Contest 151 B - Achieve the Goal
今週は晴れが多くてうれしいです、ねむーです。
今回はAtCoder(https://atcoder.jp/contests/abc151/tasks/abc151_b)にて開催されました、AtCoder Beginner Contest 151 B問題「B - Achieve the Goal」の問題と僕との戦闘記です。
0.はじめに
1.問題文
高橋君は N 科目のテストを受けます。各テストは K 点満点であり、点数はそれぞれ 0 以上の整数です。
高橋君は N − 1 科目のテストを既に受けており、 i 番目の科目のテストの点数は A i 点でした。
高橋君の目標は、 N 科目のテストの平均点を M 点以上にすることです。
高橋君が目標を達成するためには、最後のテストで最低何点取る必要があるか出力してください。
達成不可能である場合は、代わりに -1 を出力してください。
2.制約
- 2 ≤ N ≤ 100
- 1 ≤ K ≤ 100
- 1 ≤ M ≤ K
- 0 ≤ A i ≤ K
- 入力中のすべての値は整数である。
3.入出力例
- 入力
4 100 60 0 0 0
- 出力
-1
4.初見の感想
- 取るべき点数と今持ってる点数を比較して行きます
- 取るべき点数はN×M、持ってる点数はAの配列和で計算します
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 K = int.Parse(input[1]); int M = int.Parse(input[2]); string[] temp = Console.ReadLine().Split(); int[] A = new int[N]; for(int i = 0; i < N-1; i++) { A[i] = int.Parse(temp[i]); } int ans = N * M - A.Sum(); if (ans <= 0) ans = 0; else if (ans > K) ans = -1; Console.WriteLine(ans); } }
7.最後に
Achieve the Goalって表現かっこいいですよね!
AtCoder Beginner Contest 151 A - Next Alphabet
原付が故障して少しショックです、ねむーです。
今回はAtCoder(https://atcoder.jp/contests/abc151/tasks/abc151_a)にて開催されました、AtCoder Beginner Contest 151 A問題「A - Next Alphabet」の問題と僕との戦闘記です。
0.はじめに
1.問題文
z でない英小文字 C が与えられます。アルファベット順で C の次の文字を出力してください。
2.制約
C は z でない英小文字
3.入出力例
- 入力
y
- 出力
z
4.初見の感想
- char型は+1で次の文字にできる
5.コードと簡単な解説
using System; using System.Collections.Generic; using System.Linq; class Program { static void Main(string[] args) { string a = Console.ReadLine(); char ans = (char)(a[0] + 1); Console.WriteLine(ans); } }
7.最後に
最初はzも入力に含まれると思ってました…
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.最後に
ぱっと切り上げの関数名出てこないんですよね(^-^;