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:

  • 相关阅读:
    基于Windows Mobile 5.0的GPS应用程序开发
    iis6应用程序池被自动禁用问题 应用程序池'DefaultAppPool' 被自动禁用
    Axapta物流模块深度历险(八)
    AX的报表服务器(一)
    AX的企业门户(一)
    SQL Server2005 Reporting Services 管理站点
    SQL Server2005 Reporting Services的卸载
    耐心的解决问题
    危险操作符
    慢慢的坚持啊
  • 原文地址:https://www.cnblogs.com/ytytzzz/p/6778285.html
Copyright © 2011-2022 走看看