zoukankan      html  css  js  c++  java
  • 【cf比赛记录】Codeforces Round #613 (Div. 2)

    比赛传送门

    昨晚的A、B、C题都很简单,结束后都都有4000+的AC数。


    A

    题意:在 (x) 轴的 0 点出发,输出一串字符串代表机器人会向左走或者向右走,因为机器人会出故障,导致有些指令会忽略掉,问机器人最终的落点会有多少个。

    题解:直接求机器人能到左右端的极限距离再加上原点即可

    // https://codeforces.com/contest/1285/problem/A
    #include<iostream>
    #include<cstdio>
    using namespace std;
    
    int T;
    char ch[100005];
    
    int main()
    {
        scanf("%d", &T);
        scanf("%s", ch);
        int l = 0, r = 0;
        for(int i = 0; i < T; i++){
            if(ch[i] == 'L') l++;   // 记录左端的最大距离
            else r++;   // 记录右端的最大距离
        }
    
        printf("%d
    ", l + r + 1); // 加上原点
        return 0;
    }
    
    

    B

    题意:判断一个数组的全集之和是否严格大于该非空真子集之和

    题解:分两部分找非空真子集的最大之和(第一步是除了第一位都取,第二步是除了最后一位都取),然后求最大和的是用最长子序列和来求的

    // https://codeforces.com/contest/1285/problem/B
    #include<iostream>
    #include<cstdio>
    using namespace std;
    
    int T, n;
    long long num[100005];
    
    int main()
    {
        scanf("%d", &T);
        while(T--){
            scanf("%d", &n);
            long long tot = 0;  // 注意溢出
            for(int i = 0; i < n; i++){
                scanf("%I64d", &num[i]);
                tot += num[i];  // 全集之和
            }
    
            long long now = 0, big = -2000000000;
            for(int i = 1; i < n; i++){ // 第一步
                now += num[i];
                if(now > big) big = now;
                if(now < 0) now = 0;
            }
            now = 0;
            for(int i = 0; i < n - 1; i++){ // 第二步
                now += num[i];
                if(now > big) big = now;
                if(now < 0) now = 0;
            }
    
            if(tot > big) printf("YES
    "); // 如果全集之和比最大的非空真子集之和还要大
            else printf("NO
    ");
        }
        return 0;
    }
    
    

    C

    题意:输入一个数X,找它的因数a, b,并且max(a, b)是最小的一组

    题解:X = LCM(a, b) = a * b / gcd(a, b)。若保证了gcd(a, b) == 1,则a, b必定是数X的因数,因此可以直接找X的因数下手;即式子变成了 X = a * b。因为 X 的范围是 1 ~ 10^12,所以遍历 a 时从 1 ~ 10^6 即可。

    (感谢 KisekiPurin2019 的提醒)

    // https://codeforces.com/contest/1285/problem/C
    #include<iostream>
    #include<cstdio>
    using namespace std;
    typedef long long LL;
    
    LL X, A, B;
    LL gcd(LL a, LL b){
        if(b != 0) return gcd(b, a % b);
        else return a;
    }
    
    int main()
    {
        A = B = 1000000000007;
        int a = 10, b = 5;
        scanf("%I64d", &X);
        for(LL a = 1; a * a <= X; a++){
            if(X % a == 0){
                LL b = X / a;
                if(gcd(a, b) == 1){
                    LL c = a > b ? a : b;
                    LL ans = A > B ? A : B;
                    if(c < ans){
                        A = a; B = b;
                    }
                }
            }
        }
    
        printf("%I64d %I64d
    ", A, B);
    
        return 0;
    }
    
    

    记录菜鸟的成长:

    活成了1300分选手的模样

  • 相关阅读:
    top命令
    MySQL基准测试(三)--开源工具与实例演示
    MySQLdump之single-transaction详解
    牛刀小试MySQL--日志文件
    MySQL基准测试(二)--方法
    MySQL基准测试(一)--原因,策略,思路
    MySQL实验准备(二)--Python模拟数据(MySQL数据库)
    MySQL实验准备(一)--环境准备
    InnoDB存储引擎概览
    单机多实例mysq 8.0l部署安装
  • 原文地址:https://www.cnblogs.com/Ayanowww/p/12179487.html
Copyright © 2011-2022 走看看