zoukankan      html  css  js  c++  java
  • 【codeforces】Codeforces Round #641 (Div. 2)

    套题传送门

    A. Orac and Factors

    B. Orac and Models

    C. Orac and LCM

    AC代码


    A. Orac and Factors

    【数学】(f(n))返回(n)的最小非1因数,求经过(k)(f(n) +n)后的结果。

    (n)为偶数时,其最小非1因数为2,(n+2)仍然为偶数,所以此时(n + 2 × {剩下的次数})

    (n)为奇数时,找其最小非1因数。

    B. Orac and Models

    【dp】下标(i)是下标(j)的因数且(s_i < s_j)可以(beatiful)数组

    dp[]表示当前(beatiful)数组元素最大的数量;

    找因数:(i)(n)开始,进行埃氏筛法找(i)的因数(j),推导式如下

    • (dp[i / j] = max(dp[i / j], dp[i] + 1))
    • (dp[j] = max(dp[j], dp[i] + 1))

    C. Orac and LCM

    【数学】推导式太强了...

    https://www.cnblogs.com/lilibuxiangtle/p/12879584.html


    AC代码

    A

    //
    #include<iostream>
    #include<cstdio>
    using namespace std;
    
    typedef long long LL;
    int T;
    LL n, k;
    
    LL solve(LL n){
        LL i;
        bool flag = false;
        for(i = 2; i * i <= n; i++){
            if(n % i == 0) { flag = true; break;}
        }
        if(flag) return n + i;
        else return n + n;
    }
    
    int main()
    {
        scanf("%d", &T);
        while(T--){
            scanf("%I64d %I64d", &n, &k);
            for(int i = 0; i < k; i++){
                if(n % 2 != 0)
                    n = solve(n);
                else{
                    n += (k - i) * 2;
                    break;
                }
            }
            printf("%I64d
    ", n);
        }
        return 0;
    }
    
    

    B

    //
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    
    int T, n;
    int num[100005], dp[100005];
    
    int main()
    {
        scanf("%d", &T);
        while(T--){
            scanf("%d", &n);
            for(int i = 1; i <= n; i++) {
                dp[i] = 1;
                scanf("%d", &num[i]);
            }
    
            if(n == 1) { printf("1
    "); continue; }
    
            for(int i = n; i > 1; i--){
                if(num[i] > num[1])
                    dp[1] = max(dp[1], dp[i] + 1);
                for(int j = 2; j * j <= i; j++){
                    if(i % j == 0){
                        if(num[i] > num[i / j])
                            dp[i / j] = max(dp[i / j], dp[i] + 1);
                        if(num[i] > num[j])
                            dp[j] = max(dp[j], dp[i] + 1);
                    }
                }
            }
            int ans = 0;
            for(int i = 1; i <= n; i++){
    //            printf("i:%d dp:%d
    ", i, dp[i]);
                if(dp[i] > ans) ans = dp[i];
            }
            printf("%d
    ", ans);
        }
    
        return 0;
    }
    
    

    C

    //https://www.cnblogs.com/lilibuxiangtle/p/12879584.html
    #include<iostream>
    #include<cstdio>
    using namespace std;
    
    typedef long long LL;
    int n;
    LL a[100005], l[100005];
    
    LL gcd(LL a, LL b){
        if(b == 0) return a;
        return gcd(b, a % b);
    }
    
    int main()
    {
        scanf("%d", &n);
        for(int i = 1; i <= n; i++) scanf("%I64d", &a[i]);
    
        l[n] = a[n];
        for(int i = n - 1; i >= 1; i--)
            l[i] = gcd(l[i + 1], a[i]);
    
        LL ans = a[1] * l[2] / gcd(a[1], l[2]);
        for(int i = 2; i <= n; i++){
            ans = gcd(ans, a[i] * l[i + 1] / gcd(a[i], l[i + 1]));
        }
        printf("%I64d
    ", ans);
        return 0;
    }
    
  • 相关阅读:
    水煮栗子
    张至顺道长羽化登仙+说修行(道经每日清修)
    治疗口腔溃疡的穴位按摩方法
    一年四季的时令蔬菜水果表
    坐式养生八段锦口诀及练法图解
    SOA建设规划
    生鲜电商业务流程规划
    产品定义到产品推广的思路
    生鲜财务核算
    税率与存货、供应商关系
  • 原文地址:https://www.cnblogs.com/Ayanowww/p/12894135.html
Copyright © 2011-2022 走看看