Elixir로 ABC177의 A, B, C 문제를 제압!

18367 단어 Elixir

소개



  • @u2dayo 님의 【AtCoder 해설】Python으로 ABC177의 A, B, C 문제를 제압한다!을 쳐다 보았습니다.

    문제


  • Elixir
  • A ~ C까지 풀어보십시오

  • AtCoder Beginner Contest 177


  • 문제문은 링크처를 참조해 주세요
  • defmodule AtCoder177A do
      def main do
        [d, t, s] =
          IO.read(:line) |> String.trim() |> String.split(" ") |> Enum.map(&String.to_integer/1)
    
        solve(d, t, s) |> IO.puts()
      end
    
      defp solve(d, t, s) when t * s >= d, do: "Yes"
    
      defp solve(_, _, _), do: "No"
    end
    
  • 문제 A - Don't be late

  • 제출


  • 문제문은 링크처를 참조해 주세요

  • 문제 B - Substring 의 해설을 매우 참고로 했습니다
  • 감사합니다!

  • defmodule Main do
      def main do
        s = IO.read(:line) |> String.trim()
        t = IO.read(:line) |> String.trim()
    
        solve(s, t) |> IO.puts()
      end
    
      def solve(s, t) do
        len = String.length(t)
        t_charlist = String.to_charlist(t)
    
        String.to_charlist(s)
        |> Enum.chunk_every(len, 1, :discard)
        |> Enum.map(&Enum.zip(&1, t_charlist))
        |> Enum.map(&Enum.map(&1, fn {a, b} -> a == b end))
        |> Enum.map(&Enum.count(&1, fn b -> b == false end))
        |> Enum.min()
      end
    end
    

  • 원래 기사 가 대활약입니다!
  • Enum.chunk_every/4

  • 제출


  • 문제문은 링크처를 참조해 주세요

  • 문제 C - Sum of product of pairs 의 해설을 매우 참고로 했습니다
  • 감사합니다!

  • defmodule Main do
      @prime 1000000007
    
      def main do
        IO.read(:line)
        list = IO.read(:line) |> String.trim() |> String.split(" ") |> Enum.map(&String.to_integer/1)
    
        solve(list) |> IO.puts()
      end
    
      def solve(list) do
        list
        |> Enum.reduce({Enum.sum(list), 0}, fn x, {sum, ans} ->
          sum = sum - x
          ans = ans + sum * x
          {sum, ans}
        end)
        |> elem(1)
        |> rem(@prime)
      end
    end
    

  • 원래 기사 가 대활약입니다!
  • Enum.reduce/3

  • 제출을 일일이 사용해 쓴 곳 TLE (Time Limit Exceeded) 해 버린 예


  • 먼저 이것을 제출하여 불합격을 얻고 잘 검토 한 결과,
    defmodule Main do
      def main do
        n = IO.read(:line) |> String.trim() |> String.to_integer()
        list = IO.read(:line) |> String.trim() |> String.split(" ") |> Enum.map(&String.to_integer/1)
    
        solve(n, list) |> IO.puts()
      end
    
      def solve(n, list) do
        0..(n - 1)
        |> Enum.reduce({Enum.sum(list), 0}, fn i, {sum, ans} ->
          sum = sum - Enum.at(list, i)
          ans = ans + sum * Enum.at(list, i)
          {sum, ans}
        end)
        |> elem(1)
        |> rem(1000000007)
      end
    end
    
  • 에누 m. 아 t/3

  • Wrapping Up


  • 이번은 에누 m. 아 t/3 의 해설의 해설에 매우 신세를 졌습니다
  • 감사합니다!
  • C까지는 있고 시간 제한도 없이 하고 있습니다만 AC (Accepted) 가 되어 기쁘게 생각하고 있습니다

  • Enjoy 불합격... !
  • 좋은 웹페이지 즐겨찾기