Cho mảng a1,a2,…,an, với chỉ số bắt đầu từ 1. Hãy đếm số cặp chỉ số (i,j) thỏa i<j và aj−ai=j−i.
Input
Dòng đầu chứa số bộ test t.
Mỗi test gồm:
Một dòng chứa n.
Một dòng chứa n số nguyên a1,a2,…,an.
Output
Với mỗi test, in số cặp chỉ số thỏa mãn.
Constraints
1≤t≤104.
1≤n≤2⋅105.
1≤ai≤n.
Tổng n qua mọi test không vượt quá 2⋅105.
Scoring
Subtask 1 (50% số điểm): Tổng n≤2000.
Subtask 2 (50% số điểm): Không có giới hạn bổ sung.
Example
Test 1
Input
3
5
1 2 3 4 5
5
5 4 3 2 1
6
2 3 1 4 6 5
Output
10
0
3
Giải thích: Ở test đầu, ai−i=0 tại mọi vị trí nên cả 10 cặp đều hợp lệ. Test hai có các khóa khác nhau. Test cuối, các vị trí 1,2,5 cùng có khóa bằng 1, tạo ba cặp.
Lời giải tóm tắt
Phân tích: Ta biến đổi a_j-a_i=j-i thành a_j-j=a_i-i. Vì vậy một cặp hợp lệ đúng khi hai vị trí có cùng khóa a_i-i.
Thuật toán: Duyệt i từ 1 tới n. Tính key=a_i-i. Nếu khóa đã xuất hiện cnt[key] lần ở các vị trí trước, phần tử hiện tại tạo đúng bấy nhiêu cặp mới. Cộng vào đáp án rồi tăng bộ đếm khóa.
Chứng minh tính đúng đắn: Phép biến đổi đại số tương đương hai chiều. Tại vị trí i, map chứa đúng số vị trí nhỏ hơn i của từng khóa, nên cnt[key_i] đếm chính xác mọi cặp có đầu phải là i. Mỗi cặp được đếm đúng một lần tại đầu phải của nó, vì vậy tổng cuối cùng chính xác.
Độ phức tạp: Thời gian kỳ vọng O(n) mỗi test, bộ nhớ O(n).