Điểm:
800
Thời gian:
1.0s
Bộ nhớ:
256M
Input:
bàn phím
Output:
màn hình
Cho dãy số nguyên \(a_1,a_2,\ldots,a_n\).
Đếm số lượng cặp chỉ số \((i,j)\) với \(1 \leq i < j \leq n\) sao cho \(a_i\times a_j\) là một số nguyên dương
Input
- Dòng 1: \(n\) (\(n \leq 3\times 10^5\));
- Dòng 2: \(a_1,a_2,\ldots,a_n\) (\(-10^6 \leq a_i \leq 10^6\)).
Output
- Số cặp thỏa mãn yêu cầu đề bài.
Scoring
- Subtask 1 (40%): \(n \leq 10^3\);
- Subtask 2 (60%): Không ràng buộc gì hơn.
Example
Test 1
Input
5
-1 2 3 4 -5
Output
4
Bình luận
HELP
ai rảnh coi giúp em bài này em làm cách dưới sao lại bị lỗi OverFlowError ạ em cảm ơn:
import math
n = int(input())
lit = list(map(int,(input().split())))
soam = list(filter(lambda x: x < 0, lit))
count1= len(soam)//2
soduong = list(filter(lambda x: x > 0, lit))
count2 = len(soduong)
gt = math.factorial(count2)
count3 = gt/2*math.factorial(count2-2)
print(count1+int(count3))
Lỗi OverflowError xảy ra trong trường hợp bạn tính toán với số rất lớn, đặc biệt là khi sử dụng math.factorial với số lớn, bởi vì giai thừa của một số nguyên lớn sẽ tạo ra một số rất lớn.
import math
n = int(input())
lit = list(map(int, input().split()))
soam = list(filter(lambda x: x < 0, lit))
count1 = len(soam) // 2
soduong = list(filter(lambda x: x > 0, lit))
count2 = len(soduong)
if count2 >= 2:
count3 = math.factorial(count2) // (2 * math.factorial(count2 - 2))
else:
count3 = 0
result = count1 + count3
print(result)