zoukankan      html  css  js  c++  java
  • [CF1188B] Count Pairs

    [CF1188B] Count Pairs - 数学

    Description

    给定一个质数 (p) , 一个长度为 (n) 的序列 (a_1,a_2,...,a_n)和一个整数 (k),求所有数对 ((i, j) (1 le i,j le n)) 中满足 ((a_i + a_j) * (a_i^2 + a_j^2 ) equiv k mod p) 的个数。

    Solution

    因为 (p) 是质数,所以任意非零元素有逆元,因此乘法运算满足消去律

    这样我们就可以在原式的两侧同时乘上一个 (a_i-a_j),化简得到 (a_i^4 - ka_i = a_j^4 - ka_j mod p)

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    
    void solve()
    {
        int n, k, p;
        cin >> n >> p >> k;
        vector<int> a(n + 2);
        for (int i = 1; i <= n; i++)
            cin >> a[i];
    
        auto f = [&](int x) -> int {
            x %= p;
            return (x * x % p * x % p * x % p - k * x % p + p * 2) % p;
        };
    
        map<int, int> mp;
        for (int i = 1; i <= n; i++)
            mp[f(a[i])]++;
    
        int ans = 0;
        for (auto pr : mp)
            ans += pr.second * (pr.second - 1) / 2;
    
        cout << ans << endl;
    }
    
    signed main()
    {
        ios::sync_with_stdio(false);
        solve();
    }
    
  • 相关阅读:
    属性MyBank
    C#语法
    NTE与C#
    css3制作网页动画
    网页定位元素
    使用ADO.NET访问数据库
    连接查询和分组查询
    模糊查询和聚合函数
    习题集
    用sql语句操作数据
  • 原文地址:https://www.cnblogs.com/mollnn/p/14346187.html
Copyright © 2011-2022 走看看