在一个字符串中查找另一个字符串出现次数(可拆开)
程序员文章站
2023-12-21 16:38:16
...
吉首大学2019年程序设计竞赛(重现赛) G题
链接:https://ac.nowcoder.com/acm/contest/992/G
说能过那是假的
题目描述
这道题你只需要呆萌呆萌的把下面的代码交上去就行了,我书读的多,不会骗你的,我发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的值。
示例1
输入
ORZORZ
输出
4
改编自硕哥的代码
#include<stdio.h>
#include<string.h>
const int N=1e5;
long long cnt[N+5];
int main(void)
{
int len;
long long ans=0;
char s[N],word[5]="ORZ";
scanf("%s",s);
len=strlen(s);
for(int i=0;i<len;i++)
{
if(i!=0)
cnt[i]=cnt[i-1];
if(s[i]==word[0])
cnt[i]++;
}
long long right=0;
for(int i=len-1;i>=0;i--)
{
if(s[i]==word[2])
right++;
if(s[i]==word[1])
ans+=right*cnt[i];
}
printf("%lld\n",ans);
return 0;
}
T81961 这题我猜MDL不会但LS会
题目背景
大佬们准备出一些题来看看到底俱乐部里谁比较厉害,但是那个题我怎么看都是道道防AK,像我徐小白就比较善良,给大家一道签到题,让各位有势头去做下面的题。
题目描述
这只是一道很简单的字符串问题,从给定的一个字符串中寻找一个单词出现的个数,当然这个单词在字符串中是可以被拆开的,但出现字母的顺序必须要正确。举个栗子,在 “mdlldltxdy” 这个字符串中,mdl就出现了四次。(下标123,124,126,156),我们只需要把这个次数4输出就可以了。结果可能过大,对mod 1e9+7即可。(这里的单词可能会出现一些奇奇怪怪的东西,像 <!/这些)
输入输出格式
输入格式:
单组输入,两行,第一行为一行字符串,第二行为要寻找的单词。
输出格式:
一个数字为这个单词在字符串中出现的次数。
输入输出样例
输入样例#1:
mdlldltxdy
mdl
输出样例#1:
4
输入样例#2:
mmmdddllltql
mdl
输出样例#2:
36
说明
字符串长度 3 < n < 10000000 寻找的单词长度为3
改编自硕哥的代码
#include<stdio.h>
#include<string.h>
const int N=1e5;
const int mod=1e9+7;
int cnt[N+5];
int main(void)
{
int len,ans=0;
char s[N],word[5];
scanf("%s",s);
scanf("%s",word);
len=strlen(s);
for(int i=0;i<len;i++)
{
if(i!=0)
cnt[i]=cnt[i-1];
if(s[i]==word[0])
cnt[i]++;
}
int right=0;
for(int i=len-1;i>=0;i--)
{
if(s[i]==word[2])
right++;
if(s[i]==word[1])
ans+=right*cnt[i];
ans%=mod;
}
printf("%d\n",ans);
return 0;
}