zoukankan      html  css  js  c++  java
  • 【字符串/回文子串个数】大战幻想珠

    题目描述

    烤乐滋又生日了!占虽然过去了整整一年,可他还是对去年发生的炸弹事件充满阴影。于是决定不让来访的好友们自带礼物。
    但生日怎么能没有礼物昵?烤乐滋决定拿出他的幻想珠串来.幻想珠是一颗上面写着小写英文字母的珠子。有些珠子自带神奇的魔力,上面写着一个”?”,就表示这颗珠子可以表示任意一个小写英文字母。幻想珠串是长长的一个个幻想珠首尾相连组成的串。烤乐滋决定,让每个朋友从这个珠串中挑选一段连续的串送给自己。
    烤乐滋很喜欢回文(从前往后和从后往前读一样),于是他希望朋友挑选出的串都是回文的。比如”ababa”和” acd?a”都是回文的,而”a?d?c”就不是回文的。
    烤乐滋想要知道,整个幻想珠串中一共能挑选出多少个回文的子串。两个位置不同内容相同的子串我们也视作是不同的子串。

    输入

    第一行一个数n(n≤3000),表示幻想珠串的长度。
    第二行一个有n 个字符.只可能是小写字母或”?”。字符之间没有多余空格。

    输出

    一行一个数表示答案。
     
     
    #include <bits/stdc++.h>
    #define ll long long
    using namespace std;
    char mp[10005];
    int n,ant;
    void work()
    {
        for(int i=0;i<n;i++)
        {
            for(int j=0;i+j<n&&i-j>=0;j++)
            {
                if(mp[i+j]==mp[i-j])
                    ant++;
                else if(mp[i+j]=='?'||mp[i-j]=='?')
                    ant++;
                else
                    break;
            }
            for(int j=0;i+j<n&&i-j-1>=0;j++)
            {
                if(mp[i+j]==mp[i-j-1])
                    ant++;
                else if(mp[i+j]=='?'||mp[i-j-1]=='?')
                    ant++;
                else
                    break;
            }
        }
    }
    int main()
    {
        scanf("%d",&n);
        scanf("%s",mp);
        work();
        printf("%d
    ",ant);
        return 0;
    }
  • 相关阅读:
    USACO 1.1-ride
    USACO 1.1-gift1
    USACO 1.1-Friday the Thirteenth
    SQL详解(上)
    Python入门神图
    JSTL标签详解以及应用实例
    EL表达式详解及应用实例
    session应用----登录验证小案例
    各种编码问题产生原因以及解决办法---------响应编码,请求编码,URL编码
    Servlet的request应用案例
  • 原文地址:https://www.cnblogs.com/Diliiiii/p/10267416.html
Copyright © 2011-2022 走看看