题目链接:(https://ac.nowcoder.com/acm/contest/992/G)
题目:说能过那是假的
时间限制:C/C++ 1秒,其他语言2秒
这道题你只需要呆萌呆萌的把下面的代码交上去就行了,我书读的多,不会骗你的,我发4。
#include<stdio.h>
#include<string.h>
int main()
{
char ch[100007];
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]=='O'&&ch[j]=='R'&&ch[k]=='Z')
ans++;
printf("%d\n",ans);
}
输入描述:
输入一行一个仅包含’O’,'R’和’Z’三种字符的字符串s。( 0 < |s| <= 100000 )
输出描述:
一行一个整数表示代码中ans的值。
样例输入
ORZORZ
样例输出
4
大致题意:
题意很简单,就是计算字符串s中存在的ORZ的个数。(O、R、Z有先后顺序,但无需是连续的)
题解:
复杂度需修改为 O(n) 才能过。
一直想不出如何改为O(n)复杂度,最后还是去查了代码,orz。
AC代码如下:
#include<stdio.h>
#include<string.h>
typedef long long ll;
int main()
{
char ch[100007];
ll len,ans=0,a=0,cnt=0;
scanf("%s",ch);
len=strlen(ch);
for(int i=0;i<len;i++){
if(ch[i]=='Z')cnt++;
}
for(int i=0;i<len;i++){
if(ch[i]=='O')a++;
else if(ch[i]=='R')ans+=a*cnt;
else if(ch[i]=='Z')cnt--;
}
printf("%lld\n",ans);
}