资源限制
时间限制:1.0s 内存限制:256.0MB
题目思路:循环这个字符数组,然后
记录Alice出现的位置(用map1[1000]);
记录Bob出现的位置(用map2[1000]);
csdn好友们系统用例出毛病了,题目明明说了一个正数和一个字符串,我人麻了,问了老师,老师说你自测一下,想了很久了,我自己的能力有限想不出很特别的用例,不敢确定自己对没对,
cs好友们出几个例子推翻一下我这个代码
#include <stdio.h>
#include <math.h>
#define N 1000010
//map1记录Alice出现的位置,map2记录Bob出现的位置
int map1[1000],map2[1000];
//p1记录Alice有几个
int p1=0;
//p2记录Bob有几个
int p2=0;
int main()
{
char name1[10]="Alice";
char name2[10]="Bob";
//p用来比较
int p=0;
char s[N];
int k;
scanf("%d",&k);
//去掉回车
getchar();
scanf("%s",s);
//两个字符串的长度
int Len1=5,Len2=3;
int i,j;
for(i=0;s[i];i++)
{
if(s[i]==name1[p]) while(s[++i]==name1[++p]);
else//加else是避免Aob;
if(s[i]==name2[p]) while(s[++i]==name2[++p]);
//因为只有当到空格和句号,才有资格判断是否为Alice或者Bob;
if(s[i]==' '||s[i]=='.')
{
//为Alice
if(p==Len1) map1[p1++]=i-Len1;
//Bob
if(p==Len2) map2[p2++]=i-Len2;
}
p=0;//赋0重新计算
}
int sum=0;
for(i=0,j=0;i<p1&&j<p2;i++,j++)
{
if(map1[i]<map2[j]){
//说明Alice在Bob前面所以+5,满足条件就总数+1,不满足就让i++,因为for循环里面有自加了,所以让j--;
abs(map1[i]+5-map2[j])<=k? sum++:j--;
}else{
//说明Bob在Alice前面所以+3,满足条件就总数+1,不满足就让j++,因为for循环里面有自加了,所以让i--;
abs(map2[j]+3-map1[i])<=k? sum++:i--;
}
}
printf("%d",sum);
return 0;
}