首页 > 其他分享 >D. Divide and Equalize

D. Divide and Equalize

时间:2024-06-02 15:10:37浏览次数:21  
标签:Divide int bool Equalize bol 质因数

题解

我们只需要将每个数拆成质因数相乘的形式,然后对每个质因数累加,最后观察每个质因数出现的次数是不是数组长度的整数倍即可。

code

 

#include<bits/stdc++.h>
using namespace std;
const int N=1e4+5;
int a[N];
map<int ,int > map1;
bool ss(int m){
    for (int i=2;i<=sqrt(m)+1;i++){
        if (m%i==0) return false;
    }
    return true;
}
void chai_x(int m){
    int i=2;
    if (ss(m)){
        map1[m]++;
        return;
    }
    while (m!=1){
        if (m%i==0){
            map1[i]++;
            m/=i;
        }
        else i++;
    }
}
int main(){
//    freopen("input.txt","r",stdin);
    int t;
    cin>>t;
    while (t--){
        int n;
        cin>>n;
        for (int i=1,x;i<=n;i++){
            cin>>x;
            if (x==1) continue;
            chai_x(x);
        }
        bool bol=true;
        for (auto it : map1){
            if ((it.second)%n!=0){
                bol=false;
                break;
            }
        }
        if (bol) cout<<"YES\n";
        else cout<<"NO\n";
        map1.clear();
    }
    return 0;
} 

 

标签:Divide,int,bool,Equalize,bol,质因数
From: https://www.cnblogs.com/purple123/p/18227158

相关文章

  • Codeforces 1037C Equalize 题解
    题目描述给定两个长度为$n$的$01$序列$a,b$。每次可以执行如下操作:在$a$中选择一个位置$p$,将$a_p$变为$1-a_p$,代价是$1$。在$a$中选择两个位置$p,q$,将$a_p$和$a_q$互换,代价是$\lvertq-p\rvert$。问最少需要多少代价才能将$a$变成$b$。题目分析......
  • C. Add, Divide and Floor
    链接:https://codeforces.com/problemset/problem/1901/C洛谷链接:https://www.luogu.com.cn/problem/CF1901C思路:首先去重:这里建议分清楚总操作数n和元素总数cnt。然后把去重的元素放在数组中,sort让它升序,取两个极端的差。(因为中间的数会被并到里面去,就是说,可以理解为区间收缩)......
  • Codeforces 1863F Divide, XOR, and Conquer
    记\(s_{l,r}=\oplus_{i=l}^ra_i\)。考虑到这个相当于是\([l,r]\)内分裂区间,可以考虑区间\(\text{DP}\)。即记\(f_{l,r}\)为\([l,r]\)区间是否能被遍历到。转移考虑对于\([l,r]\),考虑在已知的条件下(\(len\ger-l+1\))\([l,r]\)是否合法。即到这个状态......
  • [atcode abc349] D - Divide Interval
    解决方法,贪心。importjava.io.*;importjava.math.BigInteger;importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args)throwsIOException{longL,R;L=rd.nextLong();R=rd.nextLong();PrintWri......
  • linux 中shell脚本中遇到 Runtime error (func=(main), adr=22): Divide by zero
    在Linux中编写Shell脚本时,遇到“Runtimeerror(func=(main),adr=22):Dividebyzero”这样的错误通常是因为在脚本中进行了除以零的操作,类似于编程语言中的除零错误。要解决这个问题,您需要检查Shell脚本中涉及到除法运算的地方,确保分母不为零。下面是一个示例S......
  • CF999D Equalize the Remainders 题解
    题意给定一个长度为\(n\)的序列和一个模数\(m\),记\(c_i\)表示\(\bmodm\)后的结果为\(i\)的数的个数。现在可以使每个数增加\(1\),请问最少要操作多少次才能使所有\(c_i=\frac{n}{m}\)。并输出最后的序列。First.如何最小化操作次数由于每次操作会使\(c_{a_i\bm......
  • D. Divide by three, multiply by two
    https://codeforces.com/contest/977/problem/Dvoidsolve(){intn;cin>>n;vector<pair<int,longlong>>a(n);for(auto&[x,y]:a){cin>>y;x=0;longlongtemp=y;while(......
  • Add, Divide and Floor
    我们不妨将这个式子看做取中点,然后就会发现每次操作不改变相对大小,然后看这篇洛谷题解解释一下他这个合理性,主要是害怕讨论每次操作后的\(a,b\)的奇偶而已这里其实官方题解给出了一个提示我们设最开始的\(b-a=x\),那么根据这篇洛谷题解,而每次操作要么让\(x=\lfloor\frac{x}{2}......
  • Equalize
    这道题目的官方题解讲的就很好但是这个构造方法确实比较好,我当时想到了排序+去重,但是最后判断的时候利用了贪心,对任何一个剩下的元素\(a\),最后如果他要参与贡献的话,这个众数必须是\([a+1,a+n]\)中的一个数,而由于\(a\)从小到大排了序的,我们依次考虑的话,显然是每个\(a\)都选择\(a+......
  • Codeforces Round 924 (Div. 2)B. Equalize(思维+双指针)
    目录题面链接题意题解代码题面链接B.Equalize题意给一个数组\(a\),然后让你给这个数组加上一个排列,求出现最多的次数题解赛时没过不应该。最开始很容易想到要去重,因为重复的元素对于答案是没有贡献的。去重后排序。,然后维护一个极差小于n-1的区间,,区间长度就是可能的答案......