列表

详情


NC15858. Xiaoming's Confession

描述

 小明暗恋小红很久了,一天,小明鼓起勇气去向小红告白,而小红喜欢聪明的男生,她出了一道题考小明: 

       给定一个字符串,所有字符均由字母组成,并且只有大写没有小写,求子串"QAQ"的个数,注意,"QAQ"可以不连续。

       例如:"QAQAQYSYIOIWIN"4个符合要求的子串:      

                  "QAQAQYSYIOIWIN"、"QAQAQYSYIOIWIN"、"QAQAQYSYIOIWIN"、"QAQAQYSYIOIWIN"

      你能帮小明解决这个问题吗?不然他就只能QAQ......

输入描述

输入包含T组数据(0<T<=10);
接下来的T行,每行一个字符串,字符串长度为N(1<=N<=1000000);

输出描述

对于每组数据,输出一个整数,代表不连续子串"QAQ"的个数。

示例1

输入:

2
QAQAQYSYIOIWIN
QAQQQZZYNOIWIN

输出:

4
3

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C(clang 3.9) 解法, 执行用时: 4ms, 内存消耗: 1252K, 提交时间: 2019-04-21 21:06:54

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
char a[1000005];
int main()
{
	int t,d;
	scanf("%d",&t);
	getchar();
	memset(a,0,sizeof(a));
	d=t;
	while(t--)
	{	
		if(d==t-1)
		getchar();
		gets(a);
		long long len=strlen(a),i,b,c,j,k;
		long long int sum=0;
		for(i=0;i<len;i++)
		{
			if(a[i]=='A')
			{
				b=0;
				for(j=0;j<i;j++)
				{
					if(a[j]=='Q')
					b++;
				}
				c=0;
				for(k=i+1;k<len;k++)
				{
					if(a[k]=='Q')
					c++;
				}
				sum+=(b*c);
			}
		}
		printf("%lld\n",sum);
	}
    return 0;
}

C++11(clang++ 3.9) 解法, 执行用时: 55ms, 内存消耗: 10180K, 提交时间: 2020-03-18 12:47:24

#include<bits/stdc++.h>
using namespace std;
long long int b[1000005];
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		string s;
		cin>>s;
		int sum=0;
		int k=0;
		memset(b,0,sizeof(b));
		for(int i=0;i<s.length();i++)
		{
			if('Q'==s[i])
			sum++;
			else if('A'==s[i])
			b[++k]=sum;
		}
		long long ans=0;
		for(int i=1;i<=k;i++)
		{
			ans+=b[i]*(sum-b[i]);
		}
		printf("%lld\n",ans);
	}
}

上一题