Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define ll long long
- using namespace std;
- ostream &operator <<(ostream &os, __int128 const &value) {
- static char buffer[64];
- int index = 0;
- __uint128_t T = (value < 0) ? (-(value + 1)) + __uint128_t(1) : value;
- if (value < 0)
- os << '-';
- else if (T == 0)
- return os << '0';
- for (; T > 0; ++index) {
- buffer[index] = static_cast<char>('0' + (T % 10));
- T /= 10;
- }
- while (index > 0)
- os << buffer[--index];
- return os;
- }
- istream &operator >>(istream &is, __int128 &T) {
- static char buffer[64];
- is >> buffer;
- size_t len = strlen(buffer), index = 0;
- T = 0;
- int mul = 1;
- if (buffer[index] == '-')
- ++index, mul *= -1;
- for (; index < len; ++index)
- T = T * 10 + static_cast<int>(buffer[index] - '0');
- T *= mul;
- return is;
- }
- int main() {
- ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
- int t;
- cin >> t;
- while (t--) {
- int n;
- cin >> n;
- vector<__int128>v(n);
- __int128 a[n];
- for (int i=0; i<n; i++) {
- cin >> a[i];
- v[i]=a[i]*a[i]-a[i]*(i+1)+(i+1)*(i+1);
- }
- sort(v.begin(), v.end());
- ll ans=0;
- ll x=1;
- for (int i=1; i<n; i++) {
- if (v[i]!=v[i-1]) {
- ans+=x*(x-1)/2;
- x=1;
- }
- else x++;
- }
- ans+=x*(x-1)/2;
- cout << ans << endl;
- }
- return 0;
- }
- /* aj^2-aj.j+j^2 == ai^2-.ai.i+i^2
- * aj=ai && j=i XXX
- * aj=i && ai=j ---
- * aj2-aj.j=ai2-ai.i && i=j XXX
- * aj=ai && j(j-aj)=i(i-ai)
- * aj=i && j(j-aj)=ai(ai-i)
- * ai=j && i(i-ai)=aj(aj-j)
- */
Advertisement
Add Comment
Please, Sign In to add comment