• Codeforces Round #410 (Div. 2)


    啦啦啦,最近比较懒所以之前的坑没有填完,也没怎么写新的博客

    5月份就要来了,ytz也要开始勤奋的码代码~(≧▽≦)/~啦啦啦

    Codeforces Round #410 (Div. 2)

    A.Mike and palindrome

    题目已经很良心地加粗了重点了,like this

    He wants to change exactly one character from the string so that the resulting one is a palindrome.

    所以我们需要注意如果原串本身就是回文串的话

    那么长度为奇数,中间字符可以随便改,符合题目要求,即更改正好一个字符后仍为回文串

    长度为偶数显然没得改,不满足题目要求所以是要输出NO的

    #include <bits/stdc++.h>
    
    #define rep(i, j, k) for(int i = j;i <= k;i ++)
    
    #define rev(i, j, k) for(int i = j;i >= k;i --)
    
    using namespace std;
    
    int main() {
        ios::sync_with_stdio(false);
        int n = 0;
        string s;
        cin >> s;
        rep(i, 0, s.size() - 1) 
            n += (s[i] != s[s.size() - 1 - i]);
        if(n == 2 || (n == 0 && (s.size() & 1)))
            puts("YES");
        else puts("NO");
        return 0;
    }
    View Code

    B.Mike and strings

    题目不是很难,直接枚举目标串即可

    假设string中find函数效率为O(n^2)的话,(实际上大概就是这个效率

    效率约为O(n^4),n很小可以接受

    #include <bits/stdc++.h>
    
    #define rep(i, j, k) for(int i = j;i <= k;i ++)
    
    #define rev(i, j, k) for(int i = j;i >= k;i --)
    
    using namespace std;
    
    int n, m, k, a[100];
    string s[100];
    
    bool work() {
        string t;
        rep(i, 1, n) {
            k = 0;
            rep(j, 1, n) {
                t = s[j] + s[j];
                if(t.find(s[i]) == -1) return 0;
                k += t.find(s[i]);
            }
            m = min(m, k);
        }
        return 1;
    }
    
    int main() {
        ios::sync_with_stdio(false);
        cin >> n, m = 666666;
        rep(i, 1, n) cin >> s[i];
        if(work()) cout << m;
        else puts("-1");
        return 0;
    }
    View Code

    另外聊一个很有意思的错误,是我第一次意识流出来的O(n^3)做法

    可以参考一下错误之处,看一下你能不能看出来错误

    其实是描述有些麻烦

    错误代码:

    #include <bits/stdc++.h>
    
    #define rep(i, j, k) for(int i = j;i <= k;i ++)
    
    #define rev(i, j, k) for(int i = j;i >= k;i --)
    
    using namespace std;
    
    int n, m, k, a[100];
    string s[100];
    
    bool pre() {
        rep(i, 2, n) {
            s[i] += s[i];
            a[i] = s[i].find(s[1]);
            if(a[i] == -1) return 0;
            m += a[i];
         }
         return 1;
    }
    
    int main() {
        ios::sync_with_stdio(false);
        cin >> n;
        rep(i, 1, n) cin >> s[i];
        if(pre()) {
            rep(i, 1, s[1].size() - 1) {
                k = i;
                rep(j, 2, n) {
                    a[j] ++;
                    if(a[j] >= s[1].size()) a[j] -= s[1].size();
                    k += a[j];
                } 
                m = min(m, k);
            }
            cout << m;
        }
        else puts("-1");
        return 0;
    }
    View Code

    Wrong answer on test 94:

  • 相关阅读:
    第七章 路由 68 路由-前端路由和后端路由的概念
    第六章 组件 67 使用ref获取DOM元素和组件引用
    第六章 组件 65-66 组件案例-发表评论功能的实现
    第六章 组件 63 组件传值-父组件向子组件传值和data与props的区别
    第六章 组件 62 组件-组件定义方式的复习
    第六章 组件 61 动画-小球动画flag标识符的作用分析
    第六章 组件 60 组件切换-应用切换动画和mode方式
    第六章 组件 59 组件切换-使用Vue提供的component元素实现组件切换
    vscode代码格式化 空格的配置
    vim配置C++开发环境 win10
  • 原文地址:https://www.cnblogs.com/ytytzzz/p/6778285.html
Copyright © 2020-2023  润新知