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

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

【プログラミングコンテスト】AtCoder記事まとめ

久しぶりに今週末は予定のない終末なのでAtCoderに全力注げそうな、ねむーです。

今回はいつもと趣向を変えて、今まで作成したAtCoder問題との記事のまとめを作成しました!

空欄はまだ解いてない問題ですので、更新を気長にお待ちください(^-^;

令和AtCoderの解答記事一覧

コンテスト A問題 B問題 C問題 D問題 E問題 F問題
ABC153 A - Serval vs Monster B - Common Raccoon vs Monster C - Fennec vs Monster D - Caracal vs Monster E - Crested Ibis vs Monster
ABC152 C - Low Elements D - Handstand 2
ABC150 A - 500 Yen Coins B - Count ABC C - Count Order
ABC147 A - Blackjack B - Palindrome-philia C - Honest Or Unkind2 D - Xor Sum 4
ABC146 A - Can't Wait for Holiday B - ROT N C - Buy an Integer
ABC145 A - Circle B - Echo C - Average Length
ABC138 A - Red or Not B - Resistors in Parallel
ABC137 C - Green Bin
ABC136 D - Gathering Children
ABC135 A - Harmony
ABC133 A - T or T C - Remainder Minimization 2019 D - Rain Flows into Dams
ABC132 B - Ordinary Number C - Divide the Problems D - Blue and Red Balls
ABC129 A - Airplane B - Balance
ABC128 A - Apple Pie
ABC127 A - Ferris Wheel
ABC126 C - Dice and Coin

ABC以外のコンテスト

コンテスト A問題 B問題 C問題 D問題
三井住友信託銀行プログラミングコンテスト A - November 30 B - Tax Rate C - 100 to 105
第二回全国統一プログラミング王決定戦 A - Sum of Two Integers
diverta 2019 Programming Contest A - Consecutive Integers

平成AtCoderの解答記事一覧

コンテスト A問題 B問題 C問題 D問題
Tenka1 Programmer Beginner Contest 2019 A - On the Way B - e e *ee *e C - Stones
ABC124 A - Buttons B - Great Ocean View C - Coloring Colorfully D - Handstand
ABC123 A - Five Antennas B - Five Dishes C - Five Transportations
エクサウィザーズ2019 A - Regular Triangle B - Red or Blue
ABC122 A-Double Helix B - ATCoder C - GeT AC
早稲田大学プロコン2019 A - WAsedAC B - 10 puzzle
ABC121 C - Energy Drink Collector
ABC120 A - Favorite Sound B - K-th Common Divisor C - Unification
ABC119 A - Still TBD B - Digital Gifts C - Synthetic Kadomatsu
ABC118 A - B +/- A C - Monsters Battle Royale
ABC117 A - Entrance Examination B - Polygon C - Streamline
全国統一プログラミング王決定戦 A - Subscribers B - Touitsu C - Different Strokes
ABC116 C - Grand Garden
ABC115 C - Christmas Eve
ABC114 C - 755
ABC113 C - ID
ABC112 C - Pyramid

最後に

この記事はブログのトップに固定しておくので、復習や問題探しなどにご活用ください!

リンクミス等あれば、コメントにて指摘してもらえると助かります(^^)

AtCoder Beginner Contest 154 A - Remaining Balls

もう2月も半分終わってしまいましたね、ねむーです。

今回はAtCoder(https://atcoder.jp/contests/abc154/tasks/abc154_a)にて開催されました、AtCoder Beginner Contest 154 A問題「A - Remaining Balls」の問題と僕との戦闘記です。

0.はじめに

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

1.問題文

文字列 S の書かれたボールが A 個、文字列 T の書かれたボールが B 個あります。 高橋君は、文字列 U の書かれたボールを 1 個選んで捨てました。 文字列 S , T の書かれたボールがそれぞれ何個残っているか求めてください。

2.制約

  • S , T , U は英小文字のみからなる文字列
  • S , T の長さは 1 以上 10 以下
  • S ≠ T -S= U または T= U
  • 1 ≤ A , B ≤ 10
  • A , B は整数

3.入出力例

  • 入力
red blue
3 4
red
  • 出力
2 4

4.初見の感想

  • 文字列判定して条件分岐です

5.コードと簡単な解説

コードusing System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    public static void Main()
    {
        string []input=Console.ReadLine().Split();
        string[] temp = Console.ReadLine().Split();
        int a = int.Parse(temp[0]);
        int b = int.Parse(temp[1]);
        string ans = Console.ReadLine();
        if (input[0] == ans) { Console.Write(a-1); Console.Write(" "); Console.Write(b); }
        else { Console.Write(a); Console.Write(" "); Console.Write(b-1); }
    }
}

6.最後に

意外と条件分岐が長い…

AtCoder Beginner Contest 154 B - I miss you...

バレンタインデーですね、ねむーです。

今回はAtCoder(https://atcoder.jp/contests/abc154/tasks/abc154_b)にて開催されました、AtCoder Beginner Contest 154 B問題「B - I miss you...」の問題と僕との戦闘記です。

0.はじめに

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

1.問題文

文字列 S が与えられます。 S のすべての文字を x で置き換えて出力してください。

2.制約

  • S は英小文字のみからなる文字列
  • S の長さは 1 以上 100 以下

3.入出力例

  • 入力
sardine
  • 出力
xxxxxxx

4.初見の感想

  • 文字数分xを出力しましょう

5.コードと簡単な解説

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    public static void Main()
    {
        string input=Console.ReadLine();
        for(int i = 0; i < input.Length; i++)
        {
            Console.Write("x");
        }
    }
}

6.最後に

今回はA問題よりB問題が簡単という不思議…

AtCoder Beginner Contest 154 C - Distinct or Not

雪は降らないですが雨が多いですね、ねむーです。

今回はAtCoder(https://atcoder.jp/contests/abc154/tasks/abc154_c)にて開催されました、AtCoder Beginner Contest 154 C問題「C - Distinct or Not」の問題と僕との戦闘記です。

0.はじめに

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

1.問題文

整数列 A 1 , A 2 , . . . , A N が与えられます。 この整数列のどの 2 つの要素も互いに異なるならば YES を、そうでないなら NO を出力してください

2.制約

  • 2 ≤ N ≤ 200000
  • 1 ≤ A i ≤ 109
  • 入力は全て整数

3.入出力例

  • 入力
6
4 1 3 1 6 2
  • 出力
NO

4.初見の感想

  • 同じ数字が前に出ているかをfor文ループ処理すれば求められる
  • この手法はTLE

5.学びポイント

  • Sortして連続する2つの数を同じか判定

6.コードと簡単な解説

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().Split();
        int []A = new int[N];
        string flag = "YES";
        for (int i = 0; i < N; i++)
        {
            A[i] = int.Parse(input[i]);
        }
        //ソート
        Array.Sort(A);
        for (int i = 1; i < N; i++)
        {
            //連続する2数が同じか判定
            if (A[i] == A[i - 1]) { flag = "NO"; }
        }
        Console.WriteLine(flag);
    }
}

7.最後に

制約条件見落としがちですね~

AtCoder Beginner Contest 154 D - Dice in Line

無事修論を出しまして一段落、ねむーです。

今回はAtCoder(https://atcoder.jp/contests/abc154/tasks/abc154_d)にて開催されました、AtCoder Beginner Contest 154 D問題「D - Dice in Line」の問題と僕との戦闘記です。

0.はじめに

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

1.問題文

N 個のサイコロが左から右に一列に並べてあります。左から i 番目のサイコロは 1 から p i までの p i 種類の目がそれぞれ等確率で出ます。

隣接する K 個のサイコロを選んでそれぞれ独立に振ったとき、出る目の合計の期待値の最大値を求めてください。

2.制約

  • 1 ≤ K ≤ N ≤ 200000
  • 1 ≤ p i ≤ 1000
  • 入力で与えられる値は全て整数

3.入出力例

  • 入力
5 3
1 2 2 4 5
  • 出力
7.000000000000

4.初見の感想

  • それぞれのサイコロの期待値は独立に求められる
  • 計算量O(N)で解きたい

5.学びポイント

  • 期待値和がK個になるまで期待値を前から足し合わせる
  • K個を超えたら最初の期待値を減じて、新しい数字を足し合わせる
  • 上の処理で連続するK個の期待値和を計算できる

6.コードと簡単な解説

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    public static void Main()
    {
        string []input=Console.ReadLine().Split();
        int N = int.Parse(input[0]);
        int K = int.Parse(input[1]);
        input = Console.ReadLine().Split();
        int[] p = new int[N];
        double[] avg = new double[N];
        double max = 0;
        double temp = 0;
        for(int i=0; i < N; i++)
        {
            p[i] = int.Parse(input[i]);
            //期待値計算
            avg[i] = (p[i] - 1) * 0.5 + 1;
            if (i >= K) {
                //順に連続期待値和を計算
                temp = temp + avg[i] - avg[i - (K)];
            }
            else
            {
                temp += avg[i];
            }
            if (temp > max) { max = temp; }
        }
        Console.WriteLine(max);
    }
}

7.最後に

最初にKを見逃してて一回WAしました…

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も入力に含まれると思ってました…