結果
| 問題 |
No.723 2つの数の和
|
| コンテスト | |
| ユーザー |
tak
|
| 提出日時 | 2019-02-27 16:32:42 |
| 言語 | F# (F# 4.0) |
| 結果 |
AC
|
| 実行時間 | 360 ms / 2,000 ms |
| コード長 | 1,773 bytes |
| コンパイル時間 | 9,806 ms |
| コンパイル使用メモリ | 195,340 KB |
| 実行使用メモリ | 68,480 KB |
| 最終ジャッジ日時 | 2024-06-23 05:17:00 |
| 合計ジャッジ時間 | 11,599 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 22 |
コンパイルメッセージ
復元対象のプロジェクトを決定しています... /home/judge/data/code/main.fsproj を復元しました (271 ms)。 MSBuild のバージョン 17.9.6+a4ecab324 (.NET) main -> /home/judge/data/code/bin/Release/net8.0/main.dll main -> /home/judge/data/code/bin/Release/net8.0/publish/
ソースコード
open System
open System.Text
type IO() =
let size = 1 <<< 12
let stream = Console.OpenStandardInput()
let buffer = Array.zeroCreate size
let ``!`` = byte '!'
let ``~`` = byte '~'
let mutable bufferPtr = 0
let hasNextByte =
let mutable bufferLen = 0
fun () ->
if bufferPtr < bufferLen then true
else
bufferPtr <- 0
bufferLen <- stream.Read(buffer, 0, size)
bufferLen > 0
let readByte() =
if hasNextByte() then
let r = buffer.[bufferPtr]
bufferPtr <- bufferPtr + 1
r
else failwith "error"
let isAscii c = ``!`` <= c && c <= ``~``
let nextCharByte() =
let rec f() =
let b = readByte()
if isAscii b then b
else f()
f()
let next() =
let rec f (sb: StringBuilder) =
let c =
match sb.Length with
| 0 -> nextCharByte()
| _ -> readByte()
if isAscii c then c |> char |> sb.Append |> f
else sb
f <| new StringBuilder()
|> fun x -> x.ToString()
member __.string() = next()
member __.char() = nextCharByte() |> char
member __.int() = next() |> int
member __.int64() = next() |> int64
member __.float() = next() |> float
let solve a x =
let count = a |> Array.countBy id
let countKey = count |> Array.map fst
let countMap = count |> Map.ofArray
let pairNum key1 =
let val1 = countMap.[key1] |> int64
let key2 = x - key1
Map.tryFind key2 countMap
|> function
| Some val2 -> val1 * (int64 val2)
| None -> 0L
countKey
|> Array.map pairNum
|> Array.sum
let io = new IO()
let N, X =
let a = io.int()
let b = io.int()
a, b
let a =
let t = Array.zeroCreate N
for i in 0 .. (N - 1) do
t.[i] <- io.int()
t
solve a X
|> Console.WriteLine
tak