12 条题解

  • 10
    @ 2023-7-15 15:52:12
    #include <iostream>
    #include <cmath>
    using namespace std;
    int a[10010];
    int main()
    {
        int l,m;
        int sum = 0;
        cin >> l >> m;
        for (int i = 1; i <= m; i++)
        {
            int M855, M995;
            cin >> M855 >> M995;
            for (int j = M855; j <= M995; j++)
            {
                a[j] = 1;
            }
        }
        for (int i = 0; i <= l; i++)
        {
            if (a[i] == 0)
            {
                sum++;
            }
        }
        cout << sum;
        return 0;
    }
    

    解析:

    1.在主函数外开一个数组,这样数组内的元素就都是 0 了。我们把每棵树设为 0 和 1 两种状态。( 0 是没砍, 1 是砍了)

    2.用 for 循环重复执行 m 次,获取砍树的两个端点。(M855,M995)

    3.再用 for 循环 (M855 - M995)次,此时变量 j 每一次都是要砍的下一颗树的位置。我们可以把数组 a 的第 j 个元素(第 j 棵树)的状态设为 1 。

    4.此时该砍的树已经砍完了,我们再在一个 for 循环里用 if 判断树砍没砍,(元素的是 0 还是 1)没砍( 0 )就将统计变量 sum 自增 1 。

    5.输出。

    6.球球了,点个赞吧👍 !!!(撕心裂肺)

    • 3
      @ 2024-6-8 20:10:59

      嗨嗨嗨,我又双双来编题解了!!

      老话,请勿借()鉴()!!

      #include <iostream>
      using namespace std;
      int a[10005], sum=0;
      int main()
      {
      int n, m;
      cin >> n >> m;
      for (int i = 1; i <= m; i++)
      {
      //这段代码光抠屁砍树时给砍了......
      cin >> l >> r;
      //这段代码光抠屁砍树时给砍了......
      {
      a[j]=1;
      }
      }
      for (int i = 1; i <= n; i++)
      {
      //这段代码光抠屁砍树时给砍了......
      {
      sum+=1;
      }
      }
      cout << sum+1;
      return 0;
      }
      

      注意!!

      1:光抠屁的砍树范围是1 ~ 10000,数组大小是[1 ~ 10001]

      2:注意for循环格式和数组输入法

      3:先种树(把数组的值都设为0),再让光抠屁砍树(把范围内的值设为1)

      4:看光抠屁没砍几棵树(判断是否为1,不为1总数加1)

      5:你懂的...... 👍 👍 👍 !!!!!

      • 1
        @ 2024-6-6 23:34:40
        #include <iostream>
        #include <cmath>
        using namespace std;
        int flag[10005], l, m, sum;
        int main()
        {
            cin >> l >> m;
            for (int i = 1; i <= m; i++)
            {
                int x, y;
                cin >> x >> y;
                for (int j = x; j <= y; j++)
                {
                    flag[j] = 1;
                }
            }
            for (int i = 0; i <= l; i++)
            {
                if (!flag[i])
                {
                    sum++;
                }
            }
            cout << sum;
            return 0;
        }
        

        解: first:0指没有老邓砍到这树,1相反 second:每次为反拉规(flag)赋值为1,前提要有老邓输入的砍树区间[x, y] third:点赞!

        • 1
          @ 2023-7-13 17:00:21

          题解思路:

          创建一个数组表示树的状态:是否需要移走,元素个数为10005,然后把这个数组里面的所有数据全部初始化为0(不需要移走),表示每个一米点上都有一棵树。

          循环输入M个起点和终点,遍历数组在这个范围内所有的值,设置为1(表示这个点有一棵树需要移走)

          最后遍历整个数组,统计不需要移走的树(状态为0的树)的个数。😄 😄 🚀️ 🚀️ 😄😄

          #include <iostream>
          using namespace std;
          int tree[10005];                //定义数组tree表示树的状态1表示移走,0表示不移走。默认为0。
          int main()
          {
              int l,m,count=0;            //定义路长,区域的数目和统计变量。
              cin >> l >> m;
              for(int i = 1;i <= m;i++)   //循环输入m组区域并作相应的处理。
              {
                int s,e;                  //定义任意一个区域起点和终点并输入。
                cin >> s >> e;
                for(int j = s;j <= e;j++) //循环起点到终点的树的状态为1。
                  tree[j] = 1;
              }
              for(int i = 0;i <= l;i++)   //循环判断所有树的状态,不需要移走——状态为0累加。
                if(tree[i] == 0)
                  count += 1;
             cout << count;
             return 0; 
          }
          
          • 1
            @ 2023-7-12 23:18:57
            #include <iostream> //最低为0,最高500
            using namespace std;
            int main()
            {
                int l[100000];
                int l2, m, h = 0;
                cin >> l2 >> m;
                for (int i = 1; i <= m; i++)
                {
                    int a, a2;
                    cin >> a >> a2;
                    for (int i = a; i <= a2; i++)
                        l[i + 1] = 1; // 如果a读取到0,那么l中,l[0]=0
                }
                for (int i = 1; i <= l2 + 1; i++) // 这个循环的键是0到l2,当int i=1;i<=l2+1时,是1到l2
                {
                    if (l[i] != 1)
                        h += 1;
                }
                cout << h;
                return 0;
            }
            
            • @ 2023-7-13 4:46:41

              帮你把格式完善了一下,可以观察一下格式,以后写题解的时候加上对自己做法的讲解,就更好啦。

            • @ 2023-7-14 12:55:46

              老师,管理员能直接更改内容?@

          • 1
            @ 2023-7-12 11:48:10

            还没学,但我先来把题解写了

            思路:

            创建一个数组,元素个数为10005,然后把这个数组里面的所有数据全部设为1,表示每个点上都有一棵树

            接下来,获取一段地铁的起点和终点,遍历数组在这个范围内所有的值,如果值为1(这个点有一棵树)就将其设为0(表示砍掉),如果为0,不需要修改(毕竟题目没说要种回去)

            最后遍历数组,求和,然后输出(此时数组里存储了每个点上是否有种树,因为x+0=x,所以不需要判断这个点上是不是有数,直接累加就行)

            #include <iostream>
            using namespace std;
            
            int main()
            {
                int L,M;
                cin >> L >> M;
                int road[10005];
                for(int i = 0;i <= L;i++)
                    road[i] = 1;
                for(int i = 0;i < M;i++)
                {
                    int start,end;
                    cin >> start >> end;
                    for(int j = start;j <= end;j++)
                    {
                        if (road[j] == 1)
                            road[j] = 0;
                    }
                }
                int sum = 0;
                for(int i = 0;i <= L;i++)
                    sum += road[i];
                cout << sum;
                return 0;
            }
            
            • 1
              @ 2023-7-11 15:04:32

              解析

              让flag[i]表示第i棵树有没有被砍了,0代表没有,1代表砍了。

              1. 对于每一次输入的砍树区间[x, y],都编写循环让flag[x~y]赋值为1。
              2. 统计flag[0~l]内有几个0即可。

              易错点

              在0号位置也有一棵树,不能忘记数。

              题解

              #include <iostream>
              #include <cmath>
              using namespace std;
              int flag[10005], l, m, sum;
              int main()
              {
                  cin >> l >> m;
                  for (int i = 1; i <= m; i++)
                  {
                      int x, y;
                      cin >> x >> y;
                      for (int j = x; j <= y; j++)
                      {
                          flag[j] = 1;
                      }
                  }
                  for (int i = 0; i <= l; i++)
                  {
                      if (!flag[i])
                      {
                          sum++;
                      }
                  }
                  cout << sum;
                  return 0;
              }
              
              
              • 0
                @ 2024-4-28 20:49:23

                #include <bits/stdc++.h> using namespace std; int a[10010]; int main() { int l,m; int s = 0; cin >> l >> m; for (int i = 1; i <= m; i++) { int l2, m2; cin >> l2 >> m2; for (int j = l2; j <= m2; j++) { a[j] = 1; } } for (int i = 0; i <= l; i++) { if (a[i] == 0) { s++; } } cout << s; return 0; }

                • -1
                  @ 2024-4-14 19:53:32
                  #include<iostream>
                  using namespace std;
                  int a[10005];
                  int main()
                  {
                      int l,m;
                      cin >> l >> m;
                      for(int i=1;i<=m;i++)
                      {
                          int left,right;
                          cin >> left >> right;
                          for(int j=left;j<=right;j++)
                          {
                              a[j]=1;
                          }
                      }
                      int num=0;
                      for(int i=0;i<=l;i++)
                      {
                          if (a[i]==0)
                          {
                              num++;
                          }
                      }
                      cout << num;
                      return 0;
                  }
                  
                  • -1
                    @ 2023-11-20 20:01:22

                    #include <iostream> using namespace std; int main() { int a[10001] , L , M , q , z , sum = 0; cin >> L >> M; for(int i = 0;i <= L;i++) { a[i] = 1; } for(int i = 1;i <= M;i++) { cin >> q >> z; for(int j = q;j <= z;j++) { a[j] = 0; } } for(int i = 0;i <= L;i++) { sum += a[i]; } cout << sum; return 0; }

                    • -1
                      @ 2023-7-18 23:11:01

                      压缩流,十行解决👀️ 有兴趣加入吗🎉️(不要998 9998 99998) (只要亿元 1折够不够(不够) 10折 100折 1000折) 我们只要亿元,还打10000折 就只剩亿单了,赶紧点亮"良心"主播的小红星 主播折本,再给你们定第亿单🎉️ 🎉️ 🎉️

                      #include <iostream>
                      int main(){
                          int l,m,sum=0,a[100001],x,y;
                          std::cin>>l>>m;
                          for(int i=1;i<=m;i++){
                              std::cin>>x>>y;
                              for(int j=x;j<=y;j++) a[j]=1;}
                          for(int i=0;i<=l;i++) if(a[i]==0) sum+=1;
                          std::cout<<sum;
                          return 0;}
                      
                      • -1
                        @ 2023-7-13 17:20:58
                        #include <iostream>
                        using namespace std;
                        int main()
                        {
                            int l,m,sum = 0;
                            cin >> l >> m;
                            int a[100001] = {0}; // 初始所有元素为0;
                            for(int i = 1;i<=m;i++)
                            {
                                int qi,mo;
                                cin >> qi >> mo;
                                for(int j = qi ;j <= mo;j++)
                                {
                                    a[j] = 1; // 若在地铁内将此索引内值为1;
                                }
                            }
                            for(int i = 0;i<=l ;i++)
                            {
                                if(a[i] == 0)
                                {
                                    sum += 1; // 遍历数组,符合条件数存在树就加1
                                }
                            }
                            cout << sum;
                            return 0;
                        }
                        
                        • 1

                        信息

                        ID
                        286
                        时间
                        1000ms
                        内存
                        128MiB
                        难度
                        7
                        标签
                        递交数
                        3254
                        已通过
                        645
                        上传者