ねむーの日記~AtCoderな日々~

福岡に住むプログラミング好きのブログです!

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.はじめに

今回も、プログラミング言語C#を使用しています。

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.はじめに

今回も、プログラミング言語C#を使用しています。

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.はじめに

今回も、プログラミング言語C#を使用しています。

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.はじめに

今回も、プログラミング言語C#を使用しています。

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.はじめに

今回も、プログラミング言語C#を使用しています。

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.はじめに

今回も、プログラミング言語C#を使用しています。

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.はじめに

今回も、プログラミング言語C#を使用しています。

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.最後に

ぱっと切り上げの関数名出てこないんですよね(^-^;