【洛谷】P1047 校门外的树 ——方法很重要

https://www.luogu.com.cn/problem/P1047
哎,这题因为方法思路不对白白做了一个多小时,只是一道简简单单的入门题,这说明我练的题还是太少,思路方法还没积累到一定程度。
错误思路:
用数组来储存m次起始结束位置的输入,导致需要判断很多种数据重合类型,最后写着写着自己崩溃了,不知道该怎么继续写。。。看历史提交就知道最高只对了三个测试点。。。。
然后没办法,去看题解,找到一篇C语言的,看完之后豁然开朗,其实我只意识到一点关键的地方
那就是:
这个题的数组建立不是用来储存m次起始结束位置的输入的,而是用来储存这l+1棵树的存活状况的!!即,定义l+1个数组(注意是l+1哦),如果树已经拔掉则赋值0,否则赋值1,最后统计值为1的个数即可。
顺着这个思路我又写了一次代码,然后一遍过(请忽略我重定向忘记注释了。。。。)
码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
//    freopen("in.txt","r",stdin);
//    freopen("out.txt","w",stdout);
    int l,m,a[10001],star,end,j,i,cnt = 0;
    scanf("%d%d",&l,&m);
    for(i = 0; i<=l; i++)
        a[i] = 0;
    for(i = 1; i<=m; i++)
    {
        scanf("%d%d",&star,&end);
        for(j = star; j<=end; j++)
            a[j] = 1;
    }
    for(i = 0; i<=l; i++)
        if(a[i]==0)
            cnt++;
    printf("%d",cnt);
    return 0;
}


其实我感觉我也有点被题意带偏了,当然肯定是因为我自己的经验不足导致的。。。。
so
以后如果考虑用数组来解决的题
好好想想数组应该怎么用才是最合理的!!!!

两个让我刚开始崩溃的测试点:

  1. in: 10000 100 3948 7788 98 981 2154 8667 2617 6782 5794 6001 6442 9342 2149 3737 1577 6021 7451 8658 1145 1264 4213 5287 474 8369 1239 6883 4713 5406 5470 7781 6211 7469 382 2954 566 975 5827 8448 349 4197 1946 3716 2001 2308 4156 9290 7841 9385 938 4147 1505 5533 4429 7804 1453 7487 5215 6128 7588 9592 6892 9139 3599 4628 960 1137 286 6228 235 9045 1109 1162 925 2895 763 4026 1603 4775 3504 5005 2928 8585 5381 7366 8260 8846 1135 5387 8688 9648 1960 2309 2556 3762 328 7727 5642 7516 7962 8177 8076 9377 1891 5832 5662 8856 1466 2760 2397 5538 5496 7145 1530 3722 310 346 184 8049 2591 2904 5687 9386 2636 3094 804 6216 5121 7645 1266 3090 3755 7615 164 1491 1687 3600 408 4361 3776 9398 8736 9978 2332 2510 3688 6998 6551 9934 563 2445 6310 9673 4464 5768 179 4000 1273 5475 915 8462 1074 7995 580 2477 1789 9329 215 2792 6325 8551 8268 8432 6096 8917 1260 4186 1571 6585 1586 3205 2284 7467 368 4249 1078 5524 3439 7826 2102 8958 293 6858 2721 4862 307 2303 77 1114 6435 9477 out: 99
  2. in: 10000 100 762 9763 1737 9913 4753 9522 4083 4851 949 4304 1403 2595 3760 9845 725 2472 3827 8461 2595 8523 1484 4162 6332 6513 4779 8757 6183 9654 2090 2198 554 2631 1119 1845 4923 8921 2467 8847 598 8318 3970 8652 584 8851 1191 1375 9705 9960 343 7982 4547 7059 2221 8772 1073 1820 5251 7158 9755 9954 7687 8358 487 5182 3684 4458 7988 9575 774 3500 1812 8689 6461 9396 7016 9561 5943 7250 1494 5480 1632 8704 894 2232 348 2961 3572 4442 1024 5969 1341 3817 4249 9722 532 9067 769 6530 1319 2139 1554 6632 188 6877 230 7052 4982 8065 48 2626 4117 4142 2158 4171 1996 3479 4939 6642 4946 7188 6427 8778 846 1867 2901 6140 2705 5637 323 6927 5220 5997 1706 7976 5433 9371 391 2331 1421 8207 3115 9273 2368 3160 1944 6422 1835 2081 4730 10000 3575 4628 3773 5644 3660 7880 1846 8410 1381 2950 921 6500 8906 9747 1364 6455 4464 9759 4801 5561 3900 4693 746 1707 1165 4325 2760 9745 372 9340 2259 5099 2046 5158 2745 9531 714 9152 4000 7204 8224 8670 4339 6267 9232 9509 645 1404 2791 3140 out: 48
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值