列表

详情


NC14547. 苦逼的单身狗

描述

11又到了,小Z依然只是一只单身狗,对此他是如此的苦恼又无可奈何。

为了在这一天脱单小Z决定向女神表白,但性格腼腆的小Z决定隐晦一点,截取一段包含'L''O''V''E'的英文。(顺序不限)

Z想起之前小D送给他一本英文书,决定在这里面截取一段话,小Z发现有好多种方案来截取这段话。

你能知道小Z能有多少种方案截取这段话么?

为了简化问题,英文文本讲不会出现空格、换行、标点符号及只有大写的情况。

输入描述

本题有T组数据。
对于每组数据只有一行文本。
1≤T≤20
1≤文本长度≤100000

输出描述

输出结果,并换行。

示例1

输入:

3
ILOVEACM
LOVELOVE
ALBECVOD

输出:

8
15
4

原站题解

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

C++(g++ 7.5.0) 解法, 执行用时: 27ms, 内存消耗: 532K, 提交时间: 2023-05-10 22:01:57

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
	char t[100001];
	int a;
	cin>>a;
	while(a--)
	{
		cin>>t;	int len=strlen(t);
		long long ans=0;
		int l=-1,o=-1,v=-1,e=-1,d;
		for(int i=0;i<len;i++)
		{
			if(t[i]=='L') l=i;
			else if(t[i]=='O') o=i;
			else if(t[i]=='V') v=i;
			else if(t[i]=='E') e=i;
			d=min(min(l,o),min(v,e));
			if(d!=-1) ans+=d+1;
		}
		cout<<ans<<endl;
	}
	return 0;
}

Python3 解法, 执行用时: 1165ms, 内存消耗: 5096K, 提交时间: 2023-08-07 23:33:00

n = int(input())
for i in range(n):
    s = input()
    r = 0
    L = -1
    O = -1
    V = -1
    E = -1
    for j in range(len(s)):
        if s[j] == 'L':
            L = j
        elif s[j] == 'O':
            O = j
        elif s[j] == 'V':
            V = j
        elif s[j] == 'E':
            E = j
        temp = min(min(L, O), min(V, E))
        if temp != -1:
            r += 1 + temp
    print(r)
    

C++ 解法, 执行用时: 7ms, 内存消耗: 1432K, 提交时间: 2021-08-18 17:37:46

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=100000;
int t,n,lst[100];
char s[maxn+10];
ll ans;
int main()
{
	scanf("%d",&t);
	while(t--)
	{
		scanf("%s",s+1);
		n=strlen(s+1);
		ans=0;
		memset(lst,0,sizeof lst);
		for(int i=1;i<=n;++i)
		{
			lst[s[i]]=i;
			ans+=min(min(lst['L'],lst['O']),min(lst['V'],lst['E']));
		}
		printf("%lld\n",ans);
	 } 
}

上一题