結果
| 問題 | No.1623 三角形の制作 | 
| コンテスト | |
| ユーザー |  lam6er | 
| 提出日時 | 2025-03-20 18:47:28 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 194 ms / 2,000 ms | 
| コード長 | 1,158 bytes | 
| コンパイル時間 | 201 ms | 
| コンパイル使用メモリ | 82,456 KB | 
| 実行使用メモリ | 142,260 KB | 
| 最終ジャッジ日時 | 2025-03-20 18:48:49 | 
| 合計ジャッジ時間 | 4,356 ms | 
| ジャッジサーバーID (参考情報) | judge1 / judge5 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 2 | 
| other | AC * 19 | 
ソースコード
n = int(input())
r = list(map(int, input().split()))
g = list(map(int, input().split()))
b = list(map(int, input().split()))
max_val = 3000
# Initialize frequency arrays for green and blue
freq_g = [0] * (max_val + 1)
for num in g:
    freq_g[num] += 1
freq_b = [0] * (max_val + 1)
for num in b:
    freq_b[num] += 1
# Compute prefix sums for blue
prefix_b = [0] * (max_val + 2)  # prefix_b[x] is sum of frequencies up to x (1-based)
for x in range(1, max_val + 1):
    prefix_b[x] = prefix_b[x-1] + freq_b[x]
# Precompute pre[r] for all r from 1 to max_val
pre = [0] * (max_val + 1)  # pre[r] is the count for a red bar of length r
for r_val in range(1, max_val + 1):
    total = 0
    for g_val in range(1, r_val + 1):
        if freq_g[g_val] == 0:
            continue
        lb = r_val - g_val + 1
        lb = max(lb, 1)
        ub = r_val
        if lb > ub:
            continue
        count_b = prefix_b[ub] - prefix_b[lb - 1]
        total += freq_g[g_val] * count_b
    pre[r_val] = total
# Calculate the total answer by summing pre[r_i] for each r_i in the red array
answer = 0
for red_val in r:
    answer += pre[red_val]
print(answer)
            
            
            
        