列表

详情


NC14350. 苦逼的单身狗

描述

双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

说明:

对于第一组数据共有如下8种截取方案
ILOVE
ILOVEA
ILOVEAC
ILOVEACM
LOVE
LOVEA
LOVEAC
LOVEACM
对于第三组数据共有如下4种截取方案
ALBECVO
ALBECVOD
LBECVO
LBECVOD

原站题解

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

C++14(g++5.4) 解法, 执行用时: 28ms, 内存消耗: 1576K, 提交时间: 2020-08-21 14:08:03

#include<bits/stdc++.h>
using namespace std;
string ss;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
cin>>ss;
int n=ss.size();
int l=-1,o=-1,v=-1,e=-1,minn;
long long ans=0;
for(int i=0;i<n;i++)
{
if(ss[i]=='L')l=i;
else if(ss[i]=='O')o=i;
else if(ss[i]=='V')v=i;
else if(ss[i]=='E')e=i;//存最后面的位置
minn=min(min(l,o),min(v,e));//找四个字母中最前面的那个,那个就是对答案的贡献
if(minn!=-1)
ans+=minn+1;
}
printf("%lld\n",ans);
}
return 0;
}

pypy3 解法, 执行用时: 173ms, 内存消耗: 52272K, 提交时间: 2022-08-22 13:53:17

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

C++11(clang++ 3.9) 解法, 执行用时: 56ms, 内存消耗: 1540K, 提交时间: 2019-12-26 16:57:11

#include<bits/stdc++.h>
using namespace std;
int main(){
	int a;
	cin>>a;
	string b;
	while(a--){
	int l=-1,o=-1,v=-1,e=-1;
	int c,sum=0;
	cin>>b;
	for(int i=0;i<b.length();i++){
	if(b[i]=='L')
	l=i;
	if(b[i]=='O')
	o=i;
	if(b[i]=='V')
	v=i;
	if(b[i]=='E')
	e=i;
	c=min(min(l,o),min(v,e));
	if(c!=-1)
	sum+=c+1;
}
printf("%d\n",sum);
}
return 0;
}

Python3 解法, 执行用时: 868ms, 内存消耗: 5016K, 提交时间: 2023-04-19 20:31:41

n=int(input())
for i in range(n):
  s=input().lower()
  c=0
  l,o,v,e=-1,-1,-1,-1
  for i in range(len(s)):
    if s[i]=="l":
      l=i
    elif s[i]=="o":
      o=i
    elif s[i]=="v":
      v=i
    elif s[i]=="e":
      e=i
    if min(l,o,v,e)!=-1:
      c=c+1+min(l,o,v,e)
      #print(s,s[i],[l,o,v,e],c)
  print(c)

上一题