• Codeforces Round #716 (div.2)


    A

    题意

    给定一个长度为(n(1leq nleq 100))的序列(a),判断是否存在(a)的子序列(b),使得(b)中所有元素的乘积不是完全平方数

    题解

    由于(a^2*b^2*...=(a*b*...)^2),所以如果序列中的任意元素都是完全平方数,则不满足条件,否则满足条件

    #include<bits/stdc++.h>
    #define LL long long
    using namespace std;
    
    const int maxn=110;
    int T,n,a[maxn];
    
    int main(){
        scanf("%d",&T);
        while(T--){
            scanf("%d",&n);
            bool f=false;
            for(int i=1;i<=n;i++){
                scanf("%d",&a[i]);
                int t=sqrt(a[i]);
                if(t*t!=a[i]) f=true;
            }
            printf("%s
    ",f?"YES":"NO");
        }
    }
    

    B

    题意

    给出(n(1leq nleq 1e5))(k(1leq kleq 20)),计算满足条件的长度为(n)的序列个数
    ·所有元素大小均在([0,2^k-1])
    ·所有元素的与是零
    ·所有元素的和最大

    题解

    每一位只有一个元素为零,由于有(n)个数和(k)位,所以结果为(n^k)

    #include<bits/stdc++.h>
    #define LL long long
    using namespace std;
    
    const int mod=1e9+7;
    int T,n,k;
    
    int main(){
        scanf("%d",&T);
        while(T--){
            scanf("%d %d",&n,&k);
            LL ans=1;
            for(int i=1;i<=k;i++){
                ans=ans*n%mod;
            }
            printf("%lld
    ",ans);
        }
    }
    

    C

    题意

    给出(n(2leq nleq 1e5)),找到序列([1,2,cdots,n-1])的最长子序列,子序列中所有元素的乘积模(n)等于(1)

    题解

    首先,子序列中所有元素必须与(n)互质,因为如果有元素与(n)不互质,则所有元素的乘积与(n)不互质,(gcd(prod,n) eq 1),所以乘积模(n)不为(1)
    所以找到所有与(n)互质的数,将它们乘起来,如果乘积模(n)不为(1),则由于余数与(n)互质,在选取的数中删掉这个数即可

    #include<bits/stdc++.h>
    #define LL long long
    using namespace std;
    
    int n;
    vector<int> vec,res;
    
    int main(){
        scanf("%d",&n);
        int cnt=0;
        LL ans=1;
        for(int i=1;i<n;i++){
            if(__gcd(i,n)==1){
                cnt++;
                vec.push_back(i);
                ans=ans*i%n;
            }
        }
        if(ans!=1){
            printf("%d
    ",cnt-1);
            for(int i=0;i<cnt;i++){
                if(vec[i]!=ans) res.push_back(vec[i]);
            }
            cnt--;
            for(int i=0;i<cnt-1;i++){
                printf("%d ",res[i]);
            }
            printf("%d
    ",res[cnt-1]);
        }
        else{
            printf("%d
    ",cnt);
            for(int i=0;i<cnt-1;i++){
                printf("%d ",vec[i]);
            }
            printf("%d
    ",vec[cnt-1]);
        }
    }
    

    D

    E

  • 相关阅读:
    LeetCode-20.Valid Parentheses
    LeetCode-2. Add Two Numbers
    LeetCode-1. Two Sum
    LeetCode Top100 Liked Questions
    位运算
    sublime中文乱码解决办法
    jQuery 参考手册
    jQuery 参考手册
    jQuery 参考手册
    《锋利的Jquery第二版》读书笔记 第三章
  • 原文地址:https://www.cnblogs.com/fxq1304/p/14679369.html
Copyright © 2020-2023  润新知