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); } }