zoukankan      html  css  js  c++  java
  • Integers Have Friends 2.0 题解(随机+同余)

    题目链接

    题目思路

    又是一个随机题目,对于(frac{1}{2})的概率这种东西大多都是随机

    官方题解写的很好,我直接放官方题解

    还有一点就是为什么只要枚举质因子而不要全部枚举因子

    如果(a,b,c)对于(m)同余,那么他们的差分数组(mod ;m)(0)

    所以相当于枚举差分数组的质因子即可得到答案

    注意(ans)要初始化为(1)

    代码

    #include<bits/stdc++.h>
    #define fi first
    #define se second
    #define debug printf(" I am here
    ");
    using namespace std;
    typedef long long ll;
    typedef unsigned long long ull;
    typedef pair<int,int> pii;
    mt19937 rnd(time(0));
    const ll INF=0x3f3f3f3f3f3f3f3f;
    const int maxn= 2e6 +5,inf=0x3f3f3f3f,mod=20071027;
    const double eps=1e-10;
    int n;
    ll a[maxn];
    int ans=0;
    int prime[maxn],cnt;
    bool isprime[maxn];
    void getprime(int n){
        for(ll i=2;i<=n;i++){//开ll因为后面要计算i*prime[j]
            if(!isprime[i]){
                prime[++cnt]=i;
            }
            for(int j=1;j<=cnt&&i*prime[j]<=n;j++){
                isprime[i*prime[j]]=1;
                if(i%prime[j]==0) break;
            }
        }
    }
    int cal(ll mo,ll yu){
        int cnt=0;
        for(int i=1;i<=n;i++){
            if(a[i]%mo==yu) cnt++;
        }
        return cnt;
    }
    signed main(){
        getprime(2000000);
        int _;scanf("%d",&_);
        while(_--){
            ans=1;
            scanf("%d",&n);
            for(int i=1;i<=n;i++){
                scanf("%lld",&a[i]);
            }
            for(int i=1;i<=30;i++){
                ll x=-1,y=-1;
                while(x==y){
                    x=rnd()%n+1;
                    y=rnd()%n+1;
                }
                ll cha=abs(a[x]-a[y]);
                for(int j=1;1ll*prime[j]*prime[j]<=cha&&j<=cnt;j++){
                    if(cha%prime[j]==0){
                        ans=max(ans,cal(prime[j],a[x]%prime[j]));
                        while(cha%prime[j]==0){
                            cha=cha/prime[j];
                        }
                    }
                }
                if(cha!=1) ans=max(ans,cal(cha,a[x]%cha));
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
    
    
    
    不摆烂了,写题
  • 相关阅读:
    python数据结构之树(二叉树的遍历)
    python数据结构之树(概述)
    python面向对象高级:定制类
    python面向对象高级:Mixin多重继承
    frp
    CentOS7 安装远程桌面
    Java-JVM 锁优化
    Java-内存模型 synchronized 的内存语义
    Java-内存模型 final 和 volatile 的内存语义
    Java-内存模型(JSR-133)
  • 原文地址:https://www.cnblogs.com/hunxuewangzi/p/15155741.html
Copyright © 2011-2022 走看看