试题 历届真题 人物相关性分析【第十届】【省赛】【C组】

资源限制

时间限制: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; 
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值