zoukankan      html  css  js  c++  java
  • Good Bye 2020 C

    Good Bye 2020 C

    大意

    给你一个仅由小写字母组成的串,你可以将任意位置换成任意小写字母。

    问,你最少可以通过换几个字母使得串中没有长度大于一的回文串。

    思路

    首先,一个长度较大的回文串一定至少有一个长度较小的回文串在其中心。

    对于奇数长度,这个较小的串长度为 (3) ,对于偶数长度,为 (2)

    如果我们将这个较小的回文串破坏,显然以此为中心的更大的回文串(如果有)也会被破坏

    因为小写字母有 (26) 个,而较小长度的回文串长度不超过 (3) ,所以,我们一定有一种替换方法,使得对于已经修改过的地方,不会生成新的回文串,对于现有的回文串,又能够破坏掉它。

    然后贪心的将每个回文串的结束处的字母替换。

    代码

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    #include <cstring>
    using namespace std;
    
    #define ll long long
    #define ull unsigned long long
    #define cint const int&
    #define Pi acos(-1)
    
    const int mod = 998244353;
    const int inf_int = 0x7fffffff;
    const ll inf_ll = 0x7fffffffffffffff;
    const double ept = 1e-9;
    
    int t;
    string a;
    int dp[100100][26];
    
    int main() {
        cin >> t;
        while(t--) {
            int ans=0;
            cin >> a;
            int n = a.length();
            for(int i=0; i<n; i++) {
                if(i>0 && i<n-1)
                    if(a[i-1] == a[i+1] && a[i-1] != '0') {
                        ++ans;
                        a[i+1] = '0';
                    }
                if(i<n-1 && a[i] != '0')
                    if(a[i] == a[i+1]) {
                        ++ans;
                        a[i+1] = '0';
                    }
            }
            cout << ans << endl;
        }
        return 0;
    }
    

    28min,-0

  • 相关阅读:
    删除数据时弹出一个确认对话框
    制作一个页面弹出窗口
    网页授权——扫二维码获取openid
    删除自定义菜单
    创建自定义菜单
    微信公众平台开发接口PHP SDK
    上传文件
    Fibonacci
    最大公约数和最小公倍数
    完数【转载】
  • 原文地址:https://www.cnblogs.com/ullio/p/14215903.html
Copyright © 2011-2022 走看看