zoukankan      html  css  js  c++  java
  • 寻找羔羊

    【问题描述】

    给定一个由小写字母组成的字符串,寻找包含“agnus”(羔羊)的子串的个数。注意:当且仅当两个子串的起始位置或终止位置不同时,这两个子串属于不同的子串。

    【输入】

    只有一个字符串,表示题中所述的字符串。

    【输出】

    仅一个数字,表示满足题意的子串个数。

    【输入输出样例】

    agnus.in
    agnusbgnus

    agnus.out
    6

    【样例解释】

    6 个子串分别是: agnus、 agnusb、 agnusbg、 agnusbgn、 agnusbgnu、 agnusbgnus

    【数据规模和约定】

    对于 40%的数据,字符串长度<=1000
    对于 100%的数据,字符串长度<=30000

    【题解】

    这明明是千年难遇的大水题啊。。。

    然而在考试时,我先用KMP找出angus的位置,再不断纠结于如何处理包含多个angus的字符串的重复计数情况,最后为了保险把接近正解(是错解)的程序改成暴力。

    其实哪用得着这么高级的东西,找出angus位置O(n)搜一遍就好了(如果不是搜几个单词不要用KMP)。计数时只保留包含后面angus的情况,不计入包含前面angus的情况。。。

    我好蒟啊。。。

    #include<iostream>
    #include<cmath>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    #include<vector>
    #define ll long long
    #define re register
    #define il inline
    #define fp(i,a,b) for(re int i=a;i<=b;i++)
    #define fq(i,a,b) for(re int i=a;i>=b;i--)
    using namespace std;
    const int MAX=30005;
    char s[MAX];
    int n,last,pos[MAX],tot;//pos[i]记录单词第i次出现的位置
    ll ans;
    il int gi()
    {  
      re int x=0;
      re short int t=1;
      re char ch=getchar();
      while((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
      if(ch=='-') t=-1,ch=getchar();
      while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
      return x*t;
    }
    bool check(int i)
    {
        if(s[i]=='a'&&s[i+1]=='g'&&s[i+2]=='n'&&s[i+3]=='u'&&s[i+4]=='s')
            return true;
        else return false;
    }
    int main()
    {
        freopen("agnus.in","r",stdin);
        freopen("agnus.out","w",stdout);
        scanf("%s",s);
        n=strlen(s);
        fp(i,0,n-5)
            if(check(i)) pos[++tot]=i;
        fp(i,1,tot) ans+=1ll*(pos[i]-last+1)*(n-pos[i]-4),last=pos[i]+1;
        printf("%lld",ans);
        fclose(stdin);
        fclose(stdout);
        return 0;
    }
    
  • 相关阅读:
    day43——celery简介、celery小例子
    day42——queue模块
    day41——多进程的消息队列、消息队列pipe
    在风口浪尖后,如何有效控制权限?
    微服务架构下代码管理规范
    微服务架构下介质管理规范
    微服务架构下组件管理规范
    微服务架构下文档管理规范
    微服务与DevOps关系
    Springboot集成SpringData JPA
  • 原文地址:https://www.cnblogs.com/yanshannan/p/7413149.html
Copyright © 2011-2022 走看看