D. Divide and Equalize--Codeforces Round 903 (Div. 3)

D. Divide and Equalize

题意:让一组数中的一个数除以一个因子,一个数除以一个因子,假如经过若干次操作后能够使数组所有数相等,那么输出YES,否则输出NO。

分析:乘除因子,那么实际上就是因子的转移,一个数乘上这个因子,另一个数除以这个因子,总的因子数不变。

要让所有数相等,那么就要让所有因子能够整除n,这样能够使所有因子能够平均分配给每一个数。

使用map记录所有因子个数,遍历map验证整除即可。

cpp 复制代码
#include<iostream>
#include<map>
using namespace std;
int main()
{
    int T;cin>>T;
    while(T--){
        int n;
        cin>>n;
        map<int,int>q;
        for(int i=1;i<=n;i++)
        {
            int t;cin>>t;
            for(int j=2;j<=t/j;j++)
            {
                while(t%j==0){
                    q[j]++;
                    t/=j;
                }
            }
            q[t]++;
        }
        int f=0;
        for(auto x:q){
            if(x.first<=1) continue;
            if(x.second%n!=0) {f=1;break;}
        }
        if(f==1) cout<<"NO"<<endl;
        else cout<<"YES"<<endl;
    }
}
相关推荐
地平线开发者17 小时前
profiler debug 工具用法与高一致性策略
算法·自动驾驶
编程大师哥17 小时前
匿名函数 lambda + 高阶函数
java·python·算法
isyangli_blog17 小时前
OpenDayLight (Carbon 版本) 启动与组件安装
开发语言·php
vb20081117 小时前
FastAPI APIRouter
开发语言·python
Benszen17 小时前
KVM虚拟化解决方案
开发语言·perl
会编程的土豆17 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
東雪木17 小时前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
我叫袁小陌17 小时前
算法解题思路指南
算法
MC皮蛋侠客17 小时前
C++17 多线程系列(五):C++17 并行算法——从串行到并行的零成本迁移
c++·多线程
地平线开发者17 小时前
Conv+BN+Add+ReLU 融合机制简介
算法·自动驾驶