0
点赞
收藏
分享

微信扫一扫

<学会标记> 两道第六周牛客竞赛题 <种树><01串>

一葉_code 2022-01-08 阅读 18

题目一

<种树>

 

正确代码:

#include<stdio.h>
int main()
{
    int L,m,i,j,sum=0;
    scanf("%d %d",&L,&m);
    int p[L+1];
    for(i=0;i<L+1;i++)
    {
        p[i]=1;
    }
    while(m--){
        int a,b;
        scanf("%d %d",&a,&b);
        for(i=a;i<=b;i++)
        {
            p[i]=0;
        }
    }
    for(i=0;i<L+1;i++)
    {
        sum+=p[i];
    }
    printf("%d",sum);
}

 解析:

给的L的范围可以到10000,以为一个一个循环会超时,谁知道可以。

用数组p[L+1]来标记每颗树,一开始都标记为1,表示存在,接下来进入循环,把规定区段内的树标记为0,表示不存在。接下来就遍历数组就完事了,得到的sum就是剩余树的数量。

题目二

<01串>:

 

正确代码:

#include<stdio.h>
#include<string.h>
int main(){
	char str[100000];
	int cnt0=0,cnt1=0,sum=0,i,len;
    gets(str);
	len=strlen(str);
	for(i=0;i<len;i++){
		if(str[i]=='1') cnt1++;
		if(str[i]=='0') cnt0++;
		if(cnt1>0&&cnt0>0){
			sum++;
			cnt1=0;
			cnt0=0;
		}
	}
	printf("%ld",sum);
}

 解析:

也算是一种标记吧,遇到一个1,cnt1次数加一,遇到0,cnt0次数加一,只要cnt1和cnt0都同时大于0了,sum次数加一,之后把cnt1和cnt0都归零,方便下次标记。

-----------------------------------------------------------------------------------------

今天状态非常差,思路非常混乱,就解出来三道简单题,可能还是太菜的原因吧。

但这些题也解决了,都不会才能学到东西,有收获!

大佬很多,虚心学习。

敲去吧你个垃圾!

举报

相关推荐

0 条评论