Buggy python submission (verdict: Time Limit Exceeded):
# 初期入力
#棒を長さでソートし、
N = int(input())
L = list(map(int, input().split()))
L_sorted =sorted(L)

#3本選ぶ組み合わせ,1番長いもの2本決めると、短いものは最低の長さが決まる=0
import bisect

count =0
for i in range(N-1,1,-1): #一番長い
    for j in range(i-1,0,-1):#真ん中
        x =L_sorted[i] - L_sorted[j]
        index =bisect.bisect_right(L_sorted,x,lo=0,hi=j)
        a=0
        #if 0<=index +a and index + a <= N:
        #count.append(j-(index+a))
        count += j- index
            #print(L_sorted[i],L_sorted[j],L_sorted[index+a],index,x)

print(count)

Fixed submission:
import bisect

N = int(input())
L  =list(map(int, input().split()))

count  =0
L.sort()
for i in range(0, N - 1):
  for j in range(i + 1, N):
    index = bisect.bisect_left(L, L[i] + L[j]) #AC:約2.9秒
    count += max(0, index - j - 1)

"""
    失敗:回答は出るがTLE:ランダム配列1000本で約6.2秒
    index = bisect.bisect_left(L[j+1:],L[i] + L[j]) #TLEの原因?
    count += index
"""
print(count)

Buggy python submission (verdict: Time Limit Exceeded):
# 初期入力
#棒を長さでソートし、
N = int(input())
L = list(map(int, input().split()))
L_sorted =sorted(L)

#3本選ぶ組み合わせ,1番長いもの2本決めると、短いものは最低の長さが決まる=0
import bisect

count =[]
for i in range(N-1,1,-1): #一番長い
    for j in range(i-1,0,-1):#真ん中
        x =L_sorted[i] - L_sorted[j]
        index =bisect.bisect_right(L_sorted,x,lo=0,hi=j)
        a=0
        #if 0<=index +a and index + a <= N:
        count.append(j-(index+a))
            #print(L_sorted[i],L_sorted[j],L_sorted[index+a],index,x)

print(sum(count))

Fixed submission:
import bisect

N = int(input())
L  =list(map(int, input().split()))

count  =0
L.sort()
for i in range(0, N - 1):
  for j in range(i + 1, N):
    index = bisect.bisect_left(L, L[i] + L[j]) #AC:約2.9秒
    count += max(0, index - j - 1)

"""
    失敗:回答は出るがTLE:ランダム配列1000本で約6.2秒
    index = bisect.bisect_left(L[j+1:],L[i] + L[j]) #TLEの原因?
    count += index
"""
print(count)

Buggy python submission (verdict: Time Limit Exceeded):
# 初期入力
#棒を長さでソートし、
N = int(input())
L = list(map(int, input().split()))
L_sorted =sorted(L)

#3本選ぶ組み合わせ,1番長いもの2本決めると、短いものは最低の長さが決まる=0
import bisect

count =[]
for i in range(N-1,1,-1): #一番長い
    for j in range(i-1,0,-1):#真ん中
        x =L_sorted[i] - L_sorted[j]
        index =bisect.bisect_right(L_sorted,x,lo=0,hi=j)
        a=0
        if 0<=index +a and index + a <= N:
            count.append(j-(index+a))
           # print(L_sorted[i],L_sorted[j],L_sorted[index+a],index,x)

print(sum(count))

Fixed submission:
import bisect

N = int(input())
L  =list(map(int, input().split()))

count  =0
L.sort()
for i in range(0, N - 1):
  for j in range(i + 1, N):
    index = bisect.bisect_left(L, L[i] + L[j]) #AC:約2.9秒
    count += max(0, index - j - 1)

"""
    失敗:回答は出るがTLE:ランダム配列1000本で約6.2秒
    index = bisect.bisect_left(L[j+1:],L[i] + L[j]) #TLEの原因?
    count += index
"""
print(count)

Buggy python submission (verdict: Time Limit Exceeded):
# 初期入力
#棒を長さでソートし、長いものはわかるようにした。残り2本を選ぶことで、組み合わせを減らした
N = int(input())
L = list(map(int, input().split()))
L_sorted =sorted(L,reverse=True)

#3本選ぶ組み合わせ,1番長いものに対して、一番短い物2本から比較していくとダメなものが速く選べる
from itertools import combinations
count =0
for i in range(N-2): #一番長い
    for j in range(1,N-1):#一番短い
        for k in range(j+1,N-1+1):#真ん中
            if L_sorted[j*(-1)] + L_sorted[k*(-1)] <= L_sorted[i]:
            #    print(L_sorted[i],L_sorted[ k*(-1) ],L_sorted[ j*(-1) ] )
                count +=1
            else:
                break
# N本の中から3本選ぶ組み合わせ
from math import factorial
N_3_all =factorial(N) // (factorial(N - 3) * factorial(3))

kotae =N_3_all -count
print(kotae)

Fixed submission:
import bisect

N = int(input())
L  =list(map(int, input().split()))

count  =0
L.sort()
for i in range(0, N - 1):
  for j in range(i + 1, N):
    index = bisect.bisect_left(L, L[i] + L[j]) #AC:約2.9秒
    count += max(0, index - j - 1)

"""
    失敗:回答は出るがTLE:ランダム配列1000本で約6.2秒
    index = bisect.bisect_left(L[j+1:],L[i] + L[j]) #TLEの原因?
    count += index
"""
print(count)

Buggy python submission (verdict: Time Limit Exceeded):
# 初期入力
N = int(input())
L = list(map(int, input().split()))
L_sorted =sorted(L,reverse=True)

#3本選ぶ組み合わせ,1番長いものに対して、一番短い物2本から比較していくとダメなものが速く選べる
from itertools import combinations
count =0
for i in range(N-2):
    for t in combinations(L_sorted[i+1:], 2):
        if L_sorted[i] < sum(t):
            #print(L_sorted[i],t)
            count +=1

print(count)

Fixed submission:
import bisect

N = int(input())
L  =list(map(int, input().split()))

count  =0
L.sort()
for i in range(0, N - 1):
  for j in range(i + 1, N):
    index = bisect.bisect_left(L, L[i] + L[j]) #AC:約2.9秒
    count += max(0, index - j - 1)

"""
    失敗:回答は出るがTLE:ランダム配列1000本で約6.2秒
    index = bisect.bisect_left(L[j+1:],L[i] + L[j]) #TLEの原因?
    count += index
"""
print(count)

Buggy python submission (verdict: Time Limit Exceeded):
# 初期入力
N = int(input())
L = list(map(int, input().split()))

#3本選ぶ組み合わせ
from itertools import combinations
count =0
for t in combinations(L, 3):
    if max(t)*2 < sum(t): #最大の1辺＊２＜3辺の合計なら三角形作れる
        count +=1
print(count)

Fixed submission:
import bisect

N = int(input())
L  =list(map(int, input().split()))

count  =0
L.sort()
for i in range(0, N - 1):
  for j in range(i + 1, N):
    index = bisect.bisect_left(L, L[i] + L[j]) #AC:約2.9秒
    count += max(0, index - j - 1)

"""
    失敗:回答は出るがTLE:ランダム配列1000本で約6.2秒
    index = bisect.bisect_left(L[j+1:],L[i] + L[j]) #TLEの原因?
    count += index
"""
print(count)