//https://atcoder.jp/contests/abc339/tasks/abc339_f
#include <iostream>
#include <string>
#include <stack>
#include <vector>
#include <queue>
#include <deque>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <numeric>
#include <functional>
#include <climits>
//#include <windows.h>
using namespace std;
#define ll long long
#define db double
#define PII pair<int, int>
#define TUP tuple<int, int, int>
const int inf = 0x3f3f3f3f;
ll mod = 1e15 + 17;
ll q_pow(ll a, ll b) { ll ret = 1; while (b) { if (b & 1)ret = ret * a % mod; b >>= 1; a = a * a % mod; }return ret; }
ll gcd(ll a, ll b) { if (!b)return a; return gcd(b, a % b); }
const int N = 5e5;
ll arr[N], n;
unordered_map<ll, ll> um;
string s;
ll mul(ll a, ll b) {
ll ret = 0;
while (b) {
if (b & 1) {
ret += a, ret %= mod;
b -= 1;
}
a <<= 1, a %= mod;
b >>= 1;
}
return ret;
}
void yelp_solve() {
cin >> n;
for (int i = 0; i < n; i++) {
cin >> s;
for (int j = 0; j < s.size(); j++) {
arr[i] = arr[i] * 10 + (s[j] - '0');
arr[i] %= mod;
}
um[arr[i]]++;
}
ll ans = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
ll c = mul(arr[i], arr[j]);
ans += um[c];
}
}
cout << ans << endl;
return;
}
int main() {
int r = 1;
//cin >> r;
while (r--) {
yelp_solve();
}
return 0;
}
龟速乘技巧
最新推荐文章于 2024-10-03 23:25:47 发布