Основное
 
 
Отправитель Задача Язык Вердикт Время Память Отослано Протест.  
223594473 Дорешивание:
-WIDA-
1225D - 12 C++20 (GCC 11-64) Полное решение 780 мс 11764 КБ 2023-09-16 12:46:04 2023-09-16 12:46:04
→ Исходный код
#include <bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
using namespace std;
#ifndef ONLINE_JUDGE
    #define tout cout
    #include <bits/wida.h>
#endif
#define endl "\n"
#define int long long

struct String {
    int MOD, BASE;
    vector<int> val;

    String(int MOD, int BASE, int N) {
        init(MOD, BASE, N);
    }
    void init(int MOD, int BASE, int N) {
        this->MOD = MOD;
        this->BASE = BASE;
        val.resize(N + 1);
        val[0] = 1;
        for (int i = 1; i <= N; i++) {
            val[i] = (val[i - 1] * BASE) % MOD;
        }
    }
    int get(const string &s) {
        int ans = 0;
        for (auto i : s) {
            ans = (ans * BASE + i) % MOD;
        }
        return ans;
    }
    int operator[](const int &s) {
        return val[s];
    }
    int operator[](const string &s) {
        return get(s);
    }
    int modify(int x, string &s, int idx, char now) {
        int n = s.size() - 1;
        return (x + val[n - idx] * (now - s[idx]) % MOD + MOD) % MOD;
    }
};

using namespace __gnu_pbds;
struct myhash {
    static uint64_t splitmix64(uint64_t x) {
        x += 0x9e3779b97f4a7c15;
        x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
        x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
        return x ^ (x >> 31);
    }
    size_t operator()(uint64_t x) const {
        static const uint64_t FIXED_RANDOM =
            chrono::steady_clock::now().time_since_epoch().count();
        return splitmix64(x + FIXED_RANDOM);
    }
};
#define MAP gp_hash_table

const int N = 1E5;
const int mod = 1E9 + 7;
const int base = 127;

signed main() {
    vector<int> prime; // 这里储存筛出来的全部质数
    auto euler_Prime = [&](int n) -> void {
        vector<int> v(n + 1);
        for (int i = 2; i <= n; ++i) {
            if (!v[i]) {
                v[i] = i;
                prime.push_back(i);
            }
            for (int j = 0; j < prime.size(); ++j) {
                if (prime[j] > v[i] || prime[j] > n / i) break;
                v[i * prime[j]] = prime[j];
            }
        }
    };
    euler_Prime(N);
    String hash(mod, base, N);

    int n, k;
    cin >> n >> k;
    MAP<int, int, myhash> dic;
    int ans = 0;
    for (int i = 1; i <= n; ++i) {
        int x;
        cin >> x;
        int Hash = 0, TargetHash = 0;
        for (auto it : prime) {
            if (it > x) break;
            int cnt = 0;
            while (x % it == 0) {
                x /= it;
                ++cnt;
            }
            Hash += hash[it] * (cnt % k);
            if (cnt % k) {
                TargetHash += hash[it] * (k - (cnt % k));
            }
        }
        ans += dic[TargetHash];
        ++dic[Hash];
    }
    cout << ans;
}

int __OI_INIT__ = []() {
    ios::sync_with_stdio(0), cin.tie(0);
    cout.tie(0);
    cout << fixed << setprecision(12);
    return 0;
}();
?
Время: ? ms, память: ? КБ
Вердикт: ?
Ввод
?
Вывод участника
?
Ответ жюри
?
Комментарий чекера
?
Диагностика
?
Показать детали тестирования