首页 > 其他分享 >ABC339 F Product Equality 题解

ABC339 F Product Equality 题解

时间:2024-02-04 13:22:10浏览次数:31  
标签:pii Product ch ABC339 题解 times 1e9

Question

ABC339 F Product Equality

给出一个序列 \(A_1,A_2,\cdots,A_N\)

计算数对 \((i,j,k)\) 满足 \(A_i\times A_j= A_k\) 的个数

\(A_i \le 10^{1000}\)

Solution

思考 \(A_i\) 比较小的情况

如果 \(A_i \le 1e9\) 的,暴力枚举 \(i,j\) 然后用 \(map\) 查找 \(A_i\times A_j\) 的个数计数即可

考虑到模数 \(A\times B \% p = (A \% p) \times (B\% p) \%p\)

所以我们认为在相同模数下的乘积相同就相同

为了防止撞哈希值,使用双哈希就够了

Code

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL,LL> pii;
const int maxn = 1005;
const LL TT1 = 1e9 + 7, TT2 = 1e9 + 23;

map<pii,LL> mp;

pii read_pii(){
    pii x = make_pair(0,0); char ch = getchar();
    while(ch<'0' || ch>'9') ch = getchar();
    while(ch>='0' && ch<='9') { x.first = (x.first*10+ch-'0')%TT1; x.second = (x.second*10+ch-'0')%TT2; ch = getchar(); }
    return x;
}

int main(){
    freopen("F.in","r",stdin);
    int n; scanf("%d",&n);
    for(int i=1;i<=n;i++){
        pii p = read_pii();
        if(mp.find(p) == mp.end()) mp[p] = 1;
        else mp[p]++;
    }
    LL ans = 0;
    for(auto it1:mp){
        for(auto it2:mp){
            LL x1 = it1.first.first * it2.first.first, x2 = it1.first.second * it2.first.second;
            pii p = make_pair(x1%TT1,x2%TT2);
            auto it = mp.find(p);
            if(it != mp.end()) ans += it1.second * it2.second * it->second;
        }
    }
    printf("%lld\n",ans);
    return 0;
}

标签:pii,Product,ch,ABC339,题解,times,1e9
From: https://www.cnblogs.com/martian148/p/18006025

相关文章

  • gitlab 502问题解决
    问题现象: Whoops,GitLabistakingtoomuchtimetorespond.Tryrefreshingthepage,orgoingbackandattemptingtheactionagain.PleasecontactyourGitLabadministratorifthisproblempersists. 问题定位分析:一、查看系统资源使用情况磁盘满了g......
  • Linux服务器升级GLIBC失败导致shell不可用的问题解决经历
    转自https://blog.csdn.net/u010549608/article/details/126281354?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170696599716800182728626%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170696599716800182728626&biz_i......
  • ABC339
    T1:TLD模拟代码实现s=input()a=s.split('.')print(a[-1])T2:Langton'sTakahashi模拟代码实现#include<bits/stdc++.h>#definerep(i,n)for(inti=0;i<(n);++i)usingnamespacestd;constintdi[]={-1,0,1,0};constintd......
  • ABC339总结
    ABC339Url:https://atcoder.jp/contests/abc339Time:1h30minComplete_time:2hB模拟,但是我考场上交了三次没过。因为我计算转移的时候把n,m写反了。x=(x+dx[dir]+m)%m;y=(y+dy[dir]+n)%n;x,y是坐标,dir是方向。我想错了,将x想成是横向移动了。下次要注意画图,不......
  • ABC339_g Smaller Sum 题解
    题目链接:Atcoder或者洛谷比价朴素的题,首先有暴力的想法就是树套树或者分块。这两种就不再赘述,这里来正式提提主xi树(应该不能打出来这玩意)的本质而不再停留在板题找第\(k\)大上。对于可差性问题和传统问题不同,我们对于可差性问题往往都有更好的优化方案。例如对于树类问......
  • AcWing 5466. 随机排列 题解
    讲解都在代码里了#include<bits/stdc++.h>//可以发现不管n怎么取,3n和7n+1都是一个奇数一个偶数//那么那么我们用最多n-1次交换将数组复原看一看用了奇数次还是偶数次就可以看出来了//这种交换方式常见于基础课内容,是两个数组互为双向usingnamespacestd;constintN=1e......
  • ABC339
    题解不应该流露出太多感情,对吧。E建议评黄。首先我们可以想到暴力dp。定义\(dp_i\)为以\(a_i\)为结尾满足题目意思的最长序列的长度。很明显,时间复杂度为\(O(n^2)\)不可通过本题。我们发现一个序列以\(a_i\)为结尾,那么上一位绝对是以\(a_i-k\)到\(a_i+k\)中的......
  • ABC339 题解
    AK了。A-TLD给出一个字符串\(s\),输出最后一个.后面的内容。\(|s|\le100\)。\(\text{2sec/1024MB}\)。按照题意模拟即可,时空复杂度均为\(\mathcal{O}(|s|)\)。ACCodeB-Langton'sTakahashi给出\(H\timesW\)的网格。初始你在\((1,1)\),方向......
  • ABC339 题解(A~G)
    A从后向前找到第一个.就行了。B按照题意模拟,设当前位置\(x,y\)移动方向\(dx,dy\)。那么下一步为\((x+dx,y+dy)\)设新的移动方向为\(dx',dy'\)如果顺时针旋转,则有\(dy'\gets-dx,dx'\getsdy\);如果逆时针,则有\(dx'\gets-dy,dy'\getsdx\)。C鉴定为除A以外......
  • P7119 Mivik 的游戏 题解
    先从一个例子开始假如硬币开始是这样的:HHHHHTHH然后就可以将这个反面硬币\(T\)左边的硬币全都反过来,共需\(5\)步。然后就变成了:TTTTTTHH最后再将最右边两个反过来就可以了,共需\(5+2=7\)步。如果\(p\)为这个反面的硬币位置的话,那么答案\(as=2p-1\)。推导......