結果
| 問題 | 
                            No.1855 Intersected Lines
                             | 
                    
| コンテスト | |
| ユーザー | 
                             | 
                    
| 提出日時 | 2022-02-17 23:00:35 | 
| 言語 | Nim  (2.2.0)  | 
                    
| 結果 | 
                             
                                CE
                                 
                             
                            
                            (最新)
                                AC
                                 
                             
                            (最初)
                            
                            
                         | 
                    
| 実行時間 | - | 
| コード長 | 1,652 bytes | 
| コンパイル時間 | 2,107 ms | 
| コンパイル使用メモリ | 75,144 KB | 
| 最終ジャッジ日時 | 2024-11-27 20:20:50 | 
| 合計ジャッジ時間 | 4,538 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge5 / judge1 | 
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
            
            
            
            
            ただし、clay言語の場合は開発者のデバッグのため、公開されます。
コンパイルメッセージ
/home/judge/data/code/Main.nim(4, 30) Error: type mismatch: got 'seq[int]' for 'map(split(readLine(stdin), {' ', '\t', '\v', '\r', '\n', '\f'}, -1), parseInt)' but expected 'tuple'
            
            ソースコード
import strutils, sequtils, sugar, times
var n, x: int64
(n, x) = stdin.readLine.split.map(parseInt)
const MOD = 998244353i64
var cv = newSeq[(char, int64)](x)
for i in 0..<x:
    var temp: seq[string] = stdin.readLine.split
    cv[i] = (temp[0][0], parseBiggestInt(temp[1]))
var
    b_sum = cv.mapIt(
    if it[0] == 'B':
        it[1]
    else:
        0
    ).foldl(a + b)
    r_sum = cv.mapIt(
    if it[0] == 'R':
        it[1]
    else:
        0
    ).foldl(a + b)
proc cross(): int64 =
    var
        sum_1 = 0i64
        sum_2 = 0i64
        sum_3 = 0i64
        b = 0i64
        ans = 0i64
    for (c, v) in cv:
        if c == 'B':
            b += v
        else:
            ans += sum_1 * (b_sum * b mod MOD - b * b mod MOD) mod MOD * v
            ans += sum_2 * (-b_sum + 2 * b) mod MOD * v
            ans -= sum_3 * v
            ans = ans mod MOD
            sum_1 += v
            sum_1 = sum_1 mod MOD
            sum_2 += v * b
            sum_2 = sum_2 mod MOD
            sum_3 += v * b mod MOD * b
            sum_3 = sum_3 mod MOD
    
    ans
proc inv(a: int64): int64 =
    var
        x = 1i64
        z = a
    while abs(z) > 1:
        let q = (MOD + (abs(z) shr 1)) div z
        z = MOD - q * z
        x = -x * q mod MOD
    if z < 0:
        x = -x
    if x < 0:
        x = x + MOD
    x
var ans = 0i64
if r_sum > 0:
    let n = r_sum div 2
    ans += n * (n - 1) mod MOD * inv(6)
if b_sum > 0:
    let n = b_sum div 2
    ans += n * (n - 1) mod MOD * inv(6)
if r_sum > 0 and b_sum > 0:
    ans += cross() * inv((r_sum - 1) * (b_sum - 1) mod MOD)
ans = ans mod MOD
if ans < 0:
    ans += MOD
echo ans