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

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

【プログラミングコンテスト】AtCoder Beginner Contest 117②

大学に行く途中で雨に降られてずぶぬれになりました、ねむーです。

今回はAtCoder(https://atcoder.jp/contests/abc117)にて開催されました、AtCoder Beginner Contest 117の第二回目です。

今回は、第二問「B - Polygon」の問題と僕との戦闘記です。

0.はじめに

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

1.問題文

2 次元平面上に辺の長さがそれぞれ L 1 , L 2 , . . . , L N の N 角形(凸多角形でなくてもよい)が描けるかを判定してください。

ここで、次の定理を利用しても構いません。

定理 : 一番長い辺が他の N − 1 辺の長さの合計よりも真に短い場合に限り、条件を満たす N 角形が描ける。

2.入力例

入力

入力は以下の形式で標準入力から与えられる。

N
L_1 L_2 … L_N

出力

条件を満たす N 角形が描けるなら Yes、そうでないなら No を出力せよ。

3.初見の感想

  • 入力の分割とパースが必要
  • ソートして、辺の長さの最大値とそれ以外の辺の和を比較する方法を思いつきました 僕は10分程度で解けました!

4.コード

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
class Program
    {
        static void Main(string[] args)
        {
            int N = int.Parse(System.Console.ReadLine());
            string[] temp = System.Console.ReadLine().Split(' ');
            int[] L = new int[N];
            for (int i = 0; i < N; i++)
            {
                L[i] = int.Parse(temp[i]);
            }
            Array.Sort(L);
            Array.Reverse(L);
            int sum = 0;
            for(int i = 1; i < N; i++) {
                sum += L[i];
            }
            if (L[0] < sum) { System.Console.WriteLine("Yes"); }
            else { System.Console.WriteLine("No"); }
        }
    }