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

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

AtCoder Beginner Contest 187 A - Large Digits

久しぶりに競技プログラミングを再開しました、ねむーです。

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

0.はじめに

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

1.問題文

整数 n に対して、 n を十進法で表したときの各桁の和を S(n) で表すことにします。 例えば、 S(123)= 1 + 2 + 3= 6 です。

2 つの 3 桁の整数 A , B が与えられます。 S(A) と S(B) のうち大きい方の値を求めてください。

2.制約

  • 入力は全て整数
  • 100≤A,B≤999

3.入出力例

  • 入力
100 999
  • 出力
27

4.初見の感想

  • 各桁は10で割ることで出すことができます。

5.コードと簡単な解説

using System;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            String[] input = Console.ReadLine().Split(' ');
            int A=int.Parse(input[0]);
            int B=int.Parse(input[1]);
            A=A%10+(A/10)%10+A/100;
            B=B%10+(B/10)%10+B/100;
            if(A>B){
            Console.WriteLine(A);
            }
            else{
                Console.WriteLine(B);
            }
        }
    }
}

6.最後に

最初2つ数字があると思ってなかったので、動揺しました。

AtCoder Beginner Contest 156 C - Rally

実家で生活習慣の改善をしています、ねむーです。

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

0.はじめに

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

1.問題文

数直線上に N 人の人が住んでいます。

i 番目の人が住んでいるのは座標 X i です。

あなたは N 人全員が参加する集会を開くことを考えています。

集会は数直線上の任意の 整数値の座標 で開くことができ、座標 P で集会を開くとき、 i 番目の人は集会に参加するために ( X i − P ) 2 の体力を消費します。

N 人が消費する体力の総和としてありえる値の最小値を求めてください。

2.制約

  • 入力は全て整数である。
  • 1 ≤ N ≤ 100
  • 1 ≤ X_i ≤ 100

3.入出力例

  • 入力
7
14 14 2 13 56 2 37
  • 出力
2354

4.初見の感想

  • どのように数直線上に人間が分布しているかで大きく結果が変わる
  • 1~100までしか範囲が無いので各点での結果を全探索します

5.コードと簡単な解説

using System;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            int N=int.Parse(Console.ReadLine());
            string[] input=Console.ReadLine().Split();
            int []X=new int[N];
            for(int i=0;i<N;i++){
                X[i]=int.Parse(input[i]);
            }
            int ans=int.MaxValue;
            for(int i=0;i<100;i++){
//各点iでのループ
                int temp=0;
                for(int j=0;j<N;j++){
//距離の2乗を計算
                    temp+=(X[j]-i)*(X[j]-i);
                }
                ans=Math.Min(ans,temp);
            }
            Console.WriteLine(ans);
        }
    }
}

6.最後に

この問題が灰パフォは驚き!

AtCoder Beginner Contest 156 B - Digits

引っ越し作業などで久しぶりの更新になってしまいました、ねむーです。

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

0.はじめに

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

1.問題文

整数 N を K 進数で表したとき、何桁になるかを求めてください。

2.制約

  • 入力は全て整数である。
  • 1 ≤ N ≤ 109
  • 2 ≤ K ≤ 10

3.入出力例

  • 入力
314159265 3
  • 出力
18

4.初見の感想

  • X桁で表せる最大数はKXで表せる
  • NとKXのどちらが大きいか判定する
  • Kをwhile文で何回も掛け合わせる

5.コードと簡単な解説

using System;

namespace ConsoleApp
{
    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 temp=1;
            int num=0;
            while(temp<=N){
//num桁で表せる最大数tempを計算
                temp*=K;
                num++;
            }
            Console.WriteLine(num);
        }
    }
}

6.最後に

自分のペースでがんばります…

AtCoder Beginner Contest 156 A - Beginner

花粉を感じる季節ですね、ねむーです。

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

0.はじめに

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

1.問題文

高橋君はプログラミングコンテストサイト「ButCoder」の会員です。

ButCoder の会員には 2 つのレーティング 内部レーティング と 表示レーティング が割り当てられています。

表示レーティングは、その会員のコンテスト参加回数が 10 以上のときは内部レーティングに等しく、そうでないときは、会員のコンテスト参加回数を K として、内部レーティングから 100 × ( 10 − K ) を引いたものになります。

高橋君のコンテスト参加回数が N で表示レーティングが R であるとき、高橋君の内部レーティングを求めてください。

2.制約

  • 入力は全て整数である
  • 1 ≤ N ≤ 100
  • 0 ≤ R ≤ 4111

    3.入出力例

  • 入力
2 2919
  • 出力
3719

4.初見の感想

  • 条件分岐をする

5.コードと簡単な解説

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 R = int.Parse(input[1]);
        int ans = 0;
        if (N >= 10) { ans = R; }
        else { ans = R + 100 * (10 - N); }
        Console.WriteLine(ans);
    }
}

6.最後に

ansの変数を書くことでWriteLineを2回書かずに済みます!

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

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