• Codeforces Round 906 (Div. 2)


    Codeforces Round 906 (Div. 2)

    A

    分类讨论,如果数的总数大于2直接return false,否者看个数差

    #include 
     
    const int N = 105;
    int a[N];
     
    void solve()
    {
        int n;
        std::cin >> n;
        std::unordered_map<int, int> m;
        for (int i = 1; i <= n; i++)
        {
            std::cin >> a[i];
            m[a[i]]++;
        }
     
        if (m.size() > 2)
        {
            std::cout << "No\n";
            return;
        }
        else if (m.size() < 2)
        {
            std::cout << "Yes\n";
            return;
        }
     
        int a = 0, b = 0;
        for (auto x : m)
        {
            if (a == 0)
                a = x.second;
            else
                b = x.second;
        }
        if (abs(a - b) <= 1)
        {
            std::cout << "Yes\n";
        }
        else
        {
            std::cout << "No\n";
        }
    }
     
    int main()
    {
        int T;
        std::cin >> T;
        while (T--)
        {
            solve();
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55

    B

    模拟一遍,如果s不行看t能否救s

    #include 
     
    const int N = 105;
    int a[N];
     
    bool check(std::string s){
        int n = s.size();
        char last = '2';
        for(int i = 0 ; i < n ; i ++){
            if(last == '2' || last != s[i]){
                last = s[i];
            }else{
                return false;
            }
        }
        return true;
    }
     
    void solve()
    {
        int n , m;
        std::string s , t;    
        std::cin >> n >> m;
        std::cin >> s;
        std::cin >> t;
        int fi = t[0] , en = t[m - 1];
        if(check(s)){
            std::cout << "Yes\n";
            return ;
        }
        if(check(t)){
            char last = '2';
            for(int i = 0 ; i < n ; i ++){
                if(last == '2' || last != s[i]){
                    last = s[i];
                }else{
                    if(fi != s[i - 1] && en != s[i])continue;
                    else{
                        std::cout << "No\n";
                        return ;
                    }
                }            
            }
        }else{
            std::cout << "No\n";
            return ;
        }
        std::cout << "Yes\n";
    }
     
    int main()
    {
        int T;
        std::cin >> T;
        while (T--)
        {
            solve();
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60

    C

    左右两个指针向内扫
    不等为0的时候插在右边,为1的时候插在左边

    #include 
    std::string t = "01";
    void solve()
    {
        std::string s;
        std::vector<int> res;
        int n;
        std::cin >> n >> s;
        int l = 0, r = n - 1;
        if (n % 2)
        {
            std::cout << "-1\n";
            return;
        }
        while (l < r)
        {
            if (s[l] == s[r])
            {
                if (s[l] == '0')
                    res.push_back(r + 1), s.insert(r + 1, t);
                else
                    res.push_back(l), s.insert(l, t);
                r += 2;
            }
            l++, r--;
            if (res.size() > 300)
            {
                std::cout << "-1\n";
                return;
            }
        }
        std::cout << res.size() << std::endl;
        for (auto x : res)std::cout << x << " ";
        std::cout << std::endl;
    }
    
    int main()
    {
        int T;
        std::cin >> T;
        while (T--)
        {
            solve();
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

  • 相关阅读:
    24小时“政变”之后,OpenAI CEO或将回归
    [go语言基础]经典案例:使用并发计算
    RocketMQ存储设计的奥妙
    java学习--day22(进程&线程)
    【Pytorch】torch. bmm()
    基于Java+vue前后端分离失物招领信息交互平台设计实现(源码+lw+部署文档+讲解等)
    Go函数介绍与一等公民
    DSPE-PEG-TH,TH-PEG-DSPE,磷脂-聚乙二醇-PH响应性细胞穿膜肽TH
    AI时代新爬虫:网站自动转LLM数据,firecrawl深度玩法解读
    ES6(ECMASript 相关介绍,ECMASript 6 新特性)
  • 原文地址:https://blog.csdn.net/qq_60755751/article/details/134323404