NC200615. J-试试划水
描述
#include<stdio.h>
int main()
{
int t;
scanf("%d",&t);
while(t--) {
int len,ans=0;
scanf("%s",ch);
len=strlen(ch);
for(int i=0;i<len;i++)
for(int j=i+1;j<len;j++)
for(int k=j+1;k<len;k++)
if(ch[i]=='Z'&&ch[j]=='Q'&&ch[k]=='U')
ans++;
printf("%d\n",ans);
}
return 0;
}
输入描述
第一行一个整数t代表有t组测试用例,0≤t≤100。
接下来t行,输入一个仅包含'Z','Q'和'U'三种字符的字符串s。( 0<|s|≤100000,|s|为字符串s的长度)
输出描述
每行一个整数表示代码中ans的值。
示例1
输入:
2 ZQUZQU ZQUZQUZQU
输出:
4 10
C++14(g++5.4) 解法, 执行用时: 518ms, 内存消耗: 608K, 提交时间: 2019-12-29 14:19:43
#include<bits/stdc++.h> using namespace std; int main(){ int t,len; long long z,zq,zqu; string s; cin>>t; while(t--){ cin>>s; len=s.size(); z=zq=zqu=0; for(int i=0;i<s.size();i++){ if(s[i]=='Z')z++; else if(s[i]=='Q')zq+=z; else zqu+=zq; } cout<<zqu<<endl; } }
C(clang 3.9) 解法, 执行用时: 137ms, 内存消耗: 4480K, 提交时间: 2019-12-29 19:49:15
#include <stdio.h> typedef long long ll; int main() { int t;scanf("%d",&t); char a[100005]; while(t--){ scanf("%s",a); ll i,c,q,u; c=q=u=0; for(i=0;a[i]!='\0';i++) { if(a[i]=='Z') c++; if(a[i]=='Q') q+=c; if(a[i]=='U') u+=q; } printf("%lld\n",u); } }
C++11(clang++ 3.9) 解法, 执行用时: 422ms, 内存消耗: 680K, 提交时间: 2020-05-17 13:33:38
#include<bits/stdc++.h> using namespace std; int main() { long long t,a,b,c,i; cin>>t; while(t--){ string s; cin>>s; a=b=c=0; for(i=0;i<s.size();i++){ if(s[i]=='Z')a++; else if(s[i]=='Q')b+=a; else if(s[i]=='U')c+=b; } cout<<c<<endl; } }