HDU 5907 Find Q(字符串)

传送门

Description

Byteasar is addicted to the English letter ‘q‘. Now he comes across a string S consisting of lowercase English letters.

He wants to find all the continous substrings of S, which only contain the letter ‘q‘. But this string is really really long, so could you please write a program to help him?

Input

The first line of the input contains an integer T(1≤T≤10), denoting the number of test cases.

In each test case, there is a string S, it is guaranteed that S only contains lowercase letters and the length of S is no more than 100000.

Output

For each test case, print a line with an integer, denoting the number of continous substrings of S, which only contain the letter ‘q‘.

Sample Input

2qoder quailtyqqq

Sample Output

17

思路

题意:找出SS的所有仅包含字母‘q‘的连续子串

只要求出每个位置能往右延伸多长即可。

#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 100005;
char a[maxn];

int main()
{
    int T;
    scanf("%d",&T);
    while (T--)
    {
        __int64 res = 0,cnt = 0;
        scanf("%s",a);
        int len = strlen(a);
        for (int i = 0;i < len;)
        {
            if (a[i] == ‘q‘)
            {
                while (a[i] == ‘q‘)
                {
                    i++;
                    cnt++;
                }
                res += (1+cnt)*cnt/2;
                cnt = 0;
            }
            else
            {
                i++;
            }
        }
        printf("%I64d\n",res);
    }
    return 0;
}

  

  

时间: 2024-10-20 19:40:25

HDU 5907 Find Q(字符串)的相关文章

HDU 5907 Find Q (水题)

题意:在他眼前有一个小写字母组成的字符串SSS,他想找出SSS的所有仅包含字母'q'的连续子串. 析:这个题,很容易发现,有 n 个连续个q,就是前 n 项和.注意不要超 int. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <string> #include <cstdlib> #include <cmath&

HDU 2072 单词数 --- 字符串处理

/* HDU 2072 单词数 --- 字符串处理 */ #include <cstdio> //C语言改成stdio.h即可 #include <cstring> //C语言改成string.h即可 const int maxn = 85; int main() { char *head1, *head2; char a[maxn]; char b[maxn][maxn]; int i, k, len, cnt1, cnt2; while (gets(a)){ //遇到字符串&q

HDU 4500 小Q系列故事——屌丝的逆袭

腾讯的题目,一条简单的搜索题目,适合初学者练习代码能力,或者是高手休息脑子的题,呵呵,不需要动脑了,只动手打代码就过了. 不过腾讯这故事有点坏啊,给人透露了两个信息: 1 腾讯不拘一格降人才 2 进入腾讯就可以屌丝逆袭了 腾讯是不是还想说腾讯的mm特别多? 呵呵,出题不忘给自己宣传一下. #include <stdio.h> #include <limits.h> const int MAX_NM = 20; int N, M; int matrix[MAX_NM][MAX_NM]

hdu 6068 Classic Quotation(字符串hash)

题目链接:hdu 6068 Classic Quotation 题意: 给你两个字符串S和T,现在有q个询问,每个询问给出一个l,r,问S[1..i] 和 S[j..n](1≤i≤L,R≤j≤n)中有多少个T,求出全部的总和. 题解: Claris的官方题解: 这里我用hash代替了kmp的作用. 1 #include<bits/stdc++.h> 2 #define F(i,a,b) for(int i=(a);i<=(b);++i) 3 using namespace std; 4

hdu 1062 Text Reverse 字符串反转

Text Reverse Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 18240    Accepted Submission(s): 6900 Problem Description Ignatius likes to write words in reverse way. Given a single line of text

HDU 4622 求解区间字符串中的不同子串的个数

题目大意: 给定一个长度<2000的串,再给最多可达10000的询问区间,求解区间字符串中的不同子串的个数 这里先考虑求解一整个字符串的所有不同子串的方法 对于后缀自动机来说,我们动态往里添加一个字符,每次添加一个字符进去,我们只考虑那个生成的长度为当前长度的后缀自动机的节点 那么这个节点可接收的字符串的个数就是( p->l - p->f->l ),也就是以当前点为最后节点所能得到的与之前不重复的子串的个数 那么这个问题就很好解决了,共2000个位置,以每一个位置为起点构建一次后缀

HDOJ/HDU 1062 Text Reverse(字符串翻转~)

Problem Description Ignatius likes to write words in reverse way. Given a single line of text which is written by Ignatius, you should reverse all the words and then output them. Input The input contains several test cases. The first line of the inpu

【HDU 5510 Bazinga】字符串

2015沈阳区域赛现场赛第2题 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5510 题意:给定一个由字符串组成的序列,一共n个元素,每个元素是一个不超过2000个字符的字符串.求"存在秩小于 i 且不是 i 的子串"的最大的 i (1<= i <= n). 数据范围:n [1, 500],T组输入,T [1, 50] 思路:从1到n-1枚举每个字符串str[i],判断是否有 j < i 使得str[j]不是str[i

HDU 4520 小Q系列故事——最佳裁判

Time Limit : 500/200ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Problem Description 过去的2012年对小Q来说是很悲催的一年,失恋了12次,每次都要郁闷1个来月. 好在小Q是个体育迷,在最痛苦的时候,他常常用观看各种体育节目来麻醉自己,比如伦敦奥运会期间,小Q就常常在周末邀上一群单身同事聚在自己的蜗居,一边畅饮啤酒,一边吹牛. 小Q最喜欢看的是跳水,主要原因也是因为这个项目有中国人参