zoukankan      html  css  js  c++  java
  • 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:

  • 相关阅读:
    Android Studio教程-创建第一个项目Hello World
    java打jar包的几种方式详解
    低学历者如何逆袭
    strlen, wcslen, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l, setlocale(LC_CTYPE, "Japanese_Japan")(MSDN的官方示例)
    select, poll, epoll
    KVM虚拟化知识的一些笔记
    在Windows系统上以C++打印出当前活动用户的环境变量
    日志组件解析
    Angular2案例rebirth开源
    视图
  • 原文地址:https://www.cnblogs.com/ytytzzz/p/6778285.html
Copyright © 2011-2022 走看看