zoukankan      html  css  js  c++  java
  • B. Strange Definition 题解(质因子分解+思维)

    题目链接

    题目思路

    其实问题就可以转化为(x*y)为平方数

    就是把每个数的偶数个数的因子都去除掉,去除后的相同的数认为是一类。

    然后最关键的是1秒后,类的大小为偶数的类,和全是1的类可以进行再次合并

    因为类的大小为偶数的类,一秒之后这个类里面的因子数量又变为偶数了

    代码

    #include<bits/stdc++.h>
    #define fi first
    #define se second
    #define debug cout<<"I AM HERE"<<endl;
    using namespace std;
    typedef long long ll;
    const int maxn=1e6+5,inf=0x3f3f3f3f,mod=1e9+7;
    const double eps=1e-6;
    int n,q;
    int a[maxn];
    int p[maxn];
    int id[maxn];
    signed main(){
        id[1]=1;
        for(int i=2;i<=1e6;i++){
            int x=i;
            id[i]=1;
            while(p[x]){
                int now=p[x];
                int cnt=0;
                while(p[x]==now){
                    x=x/p[x];
                    cnt++;
                }
                if(cnt%2){
                    id[i]*=now;
                }
            }
            id[i]*=x;
            if(p[i]){// 自己不是质数
                continue;
            }
            for(int j=i;j<=1e6;j+=i){
                if(p[j]==0){
                    p[j]=i;
                }
            }
        }
        int _;scanf("%d",&_);
        while(_--){
            scanf("%d",&n);
            for(int i=1;i<=n;i++){
                scanf("%d",&a[i]);
                a[i]=id[a[i]];
            }
            sort(a+1,a+1+n);
            int cnt=0;
            int ans=0,sum=0;
            for(int i=1;i<=n;i++){
                if(a[i]==a[i-1]){
                    cnt++;
                }else{
                    ans=max(ans,cnt);
                    if((cnt>0&&cnt%2==0)||a[i-1]==1){
                        sum+=cnt;
                    }
                    cnt=1;
                }
            }
            ans=max(ans,cnt);
            if((cnt>0&&cnt%2==0)||a[n]==1){
                sum+=cnt;
            }
            scanf("%d",&q);
            for(int i=1,x;i<=q;i++){
                scanf("%d",&x);
                if(x==0){
                    printf("%d
    ",ans);
                }else{
                    printf("%d
    ",max(ans,sum));
                }
            }
        }
    
        return 0;
    }
    
    
    不摆烂了,写题
  • 相关阅读:
    JavaScript Json对象和Json对象字符串的关系 jsonObj<->JsonString
    VS2012 MVC4 学习笔记-概览
    java中运算符的解析和计算
    Python基本数据类型之tuple
    Python基本数据类型之list
    Python基本数据类型之str
    Python基本数据类型之int
    range和xrange梳理
    python编码
    ubuntu下的ssh
  • 原文地址:https://www.cnblogs.com/hunxuewangzi/p/15240505.html
Copyright © 2011-2022 走看看