33 条题解

  • 19
    @ 2022-8-16 21:18:33

    今天终于迎来了一道难题!来看看吧~

    1. 先定义布尔型数组 a,如果位置i有树,a[i]保存为true,否则保存为false
    2. a[0] ~ a[m]先设为有树,都设为 true
    3. 然后以此类推,把每一个有的都设为 true,这样就相当于是不是 true 就是 false,避免了重复的问题

    思路就这么简单,来看看代码吧~(UP难得的做了注释……)

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        bool a[10005];//如果位置i有树,a[i]保存为true,否则保存为false
    	int l, m, start, end, s = 0;//s:树木数量统计 
    	cin>>l>>m;
    	for(int i = 0; i <= l; i++)//a[0]~a[l]先设为有树 
    		a[i] = true;
    	for(int i = 0; i < m; ++i)//m个区域 
    	{
    		cin >> start >> end;//输入每个区域的起始点和终止点 
    		for(int j = start; j <= end; j++)//a[start]到a[end]设为无树 
    			a[j] = false;
    	}
    	for(int i = 0; i <= l; ++i)
    	{
    		if (a[i])
    			s++;//或将这两行写为 s += a[i]; 
    	}
    	cout<<s;
        return 0;
    }
    
    • @ 2023-11-20 15:03:36

      可以不使用数组,通过数学的思维解决吗?👀️

    • @ 2023-12-23 12:18:34

      难题

    • @ 2023-12-23 12:27:47

      @ 可以的 x-y+m-n start的差(正数)+end的差(正数)

  • 6
    @ 2024-5-19 9:33:00

    很简单啦,请看解题!

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int n,q,l,r,a[10000],sum=0;
        cin >> n >> q;
        for (int i = 0; i <= n; i++)
        {
            a[i]=1;
        }
        for (int i = 1; i <= q; i++)
        {
            cin >> l >> r;
            for (int j = l; j <= r; j++)
            {
                a[j] = 0;
            }
        }
        for (int i = 0; i <= n; i++)
        {
            sum+=a[i];
        }
        cout << sum;
        return 0;
    }//已AC,点个赞吧
    
    • 3
      @ 2024-1-12 12:30:24
      #include <bits/stdc++.h>
      using namespace std;
      int main()
      {
          int a[10005],L,M,B,C,num=0;//B代表起始点,C代表终止点
          cin>>L>>M;
          for(int i=0;i<=L;i++)
          {
              a[i]=1;//"1"代表树没有被移走
          }
          for(int i=1;i<=M;i++)
          {
              cin>>B>>C;
              for(int i=B;i<=C;i++)
              {
                  a[i]=0;//"0"代表树被移走
              }
          }
          for(int i=0;i<=L;i++)
          {
               if(a[i]==1)
               {
                  num++;//统计树的个数
               }
          }
          cout<<num;
      
      }
      已AC!
      
      • 2
        @ 2024-5-17 17:22:30

        一道~~~~~~难题~~~~~~

        #include <iostream>
        using namespace std;
        int main()
        {
            int num[10005];
            int l, m;
            cin >> l >> m;
        	for (int i = 0; i <= l; i++)//从零开始,一直到l
        	{
        		num[i] = 1;//将1设为有树
        	}
        	int start, end;//定义起点和终点
            for (int i = 0; i < m; i++)
            {
                cin >> start >> end;//输入起点和终点
        	    for (int i = start; i <= end; i++)
        	    {
        	    	num[i] = 0;//将0设为没树
        	    }
            }
        	int sum = 0;
        	for (int i = 0; i <= l; i++)
            {
                sum += i;
            }
        	cout << sum;
        	return 0;
        }
        
        • 2
          @ 2024-4-14 21:28:27
          #include<iostream>
          using namespace std;int l,m,a,b,num;bool t[10000];int main(){cin>>l>>m;for(int i=0;i<=m;i++){cin>>a>>b;for(int j=a;j<=b;j++)t[j]=1;}for(int i=0;i<=l;i++){if(!t[i])num++;}cout<<num;}
          

          难道这是最短代码?

          • 2
            @ 2024-2-21 19:36:43
            #include<iostream>
            using namespace std;
            int l,m,a,b,num;
            bool t[10005];
            int main(){
                cin>>l>>m;
                for(int i=0;i<=m;i++){
                    cin>>a>>b;
                    for(int j=a;j<=b;j++)
                        t[j]=1;//做个标记
                }
                for(int i=0;i<=l;i++){
                    if(!t[i])
                        num++;
                }
                cout<<num;
                return 0;
            }//编者:@Royal
            
            • 2
              @ 2024-1-28 20:04:53
              #include<bits/stdc++.h>
              using namespace std;
              int l,m,x,y,a[100001],sum;
              int main()
              {
                  cin >> l >> m;
                  for(int i = 0;i <= l;i++)
                  {
                      a[i] = 1;//把路上的树设为1
                  }
                  for(int i = 1;i <= m;i++)
                  {
                      cin >> x >> y;
                      for(int i = x;i <= y;i++)
                      {
                          if(a[i] == 0)
                          {
                              continue;//避免重复扣除
                          }
                          a[i]--;
                      }
                  }
                  for(int i = 0;i <= l;i++)
                  {
                      sum += a[i];//求剩下的树的数量
                  }
                  cout << sum;
                  return 0;
              }
              
              • 2
                @ 2023-8-30 13:29:23

                过辣!典型课本题,闭着眼都能写出来

                    int L,M,sum=0;
                    cin>>L>>M;
                    int a[L+1];
                    for (int i=0;i<=L;i++)//初始化
                    {
                        a[i]=1;
                    }
                    for (int i=0;i<M;i++)
                    {
                        int start,end;
                        cin>>start>>end;//循环输入左下标和右下标
                        for (int j=start;j<=end;j++)
                        {
                            a[j]=0;//移走
                        }
                    }
                    for (int i=0;i<=L;i++)
                    {
                        if (a[i]==1)
                        {
                            sum++;
                        }
                    }
                    cout<<sum;
                
                • 2
                  @ 2023-8-11 18:39:34
                  #include <iostream>
                  using namespace std;
                  int main()
                  {
                  	int a[100005],s,e,l,m,sum;
                  	cin >> l >> m;
                  	for (int i = 0;i <= l;i ++)
                  	{
                  		a[i] = 1;
                  	}
                  	for (int i = 1;i <= m;i ++)
                  	{
                  		cin >> s >> e;
                  		for (int i = s;i <= e;i ++)
                  		{
                  			a[i] = 0;
                  		}
                  	}
                  	for (int i = 0;i <= l;i ++)
                  	{
                  		if (a[i] == 1)
                  		{
                  			sum ++;
                  		}
                  	}
                  	cout << sum;
                  	return 0;
                  }
                  
                  • 1
                    @ 2024-1-6 22:21:30

                    简单。 1.先初始化数组; 2.重复m次,每次把c数组a到b之间设为1,既没有树; 3.累加,有树就是1,否则是0,最后num就是树的棵数。 #include <iostream> using namespace std; int c[10000]; int main() { int l,m,num=0,a,b; cin>>l>>m; for (int i=0;i<=l;i++) { c[i]=1; } for (int i=1;i<=m;i++) { cin>>a>>b; for (int j=a;j<=b;j++) { c[j]=0; } } for (int i=0;i<=l;i++) { num+=c[i]; } cout<<num; return 0; }

                    • 1
                      @ 2023-5-6 21:38:00

                      这道题还是挺简单的,主要考察的是for循环嵌套。 对于for循环的嵌套,有几点要求: 1、嵌套的原则:不允许交叉。 2、循环与分支可以相互嵌套但不允许交叉。 本题先将所有树设置为1,再循环输入去除的路段,将其设为0。最后for循环将所有数值累加进sum变量里,得到的数便是剩下的树了。 AC过,请放心食用。

                      #include <iostream>
                      using namespace std;
                      int main()
                      {
                          int l,m,a,b,n[10000],sum=0;
                          cin >> l >> m;
                          for(int i=0;i<=l;i++)
                          {
                              n[i]=1;
                          }
                          for(int i=0;i<m;i++)
                          {
                              cin >> a >> b;
                              for(int i=a;i<=b;i++)
                              {
                                  n[i]=0;
                              }
                          }
                          for(int i=0;i<=l;i++)
                          {
                              sum+=n[i];
                          }
                          cout << sum;
                          return 0;
                      }
                      
                      • 1
                        @ 2022-8-11 13:30:27

                        这道题其实可以不去管那些重复部分,砍掉了再砍一次又不会长回来,对吧

                        #include <iostream>
                        using namespace std;
                        int main()
                        {
                        	int a[9999],s,e,l,m,sum;
                        	cin >> l >> m;//输入范围
                        	for (int i = 0;i <= l;i ++)//将区域范围的树初始化
                        	{
                        		a[i] = 1;
                        	}
                        	for (int i = 1;i <= m;i ++)
                        	{
                        		cin >> s >> e;
                        		for (int i = s;i <= e;i ++)//砍掉指定范围内的树
                        		{
                        			a[i] = 0;
                        		}
                        	}
                        	for (int i = 0;i <= l;i ++)
                        	{
                        		if (a[i] == 1)//为1代表有树
                        		{
                        			sum ++;
                        		}
                        	}
                        	cout << sum;
                        	return 0;
                        }
                        
                        • 0
                          @ 2023-12-23 12:26:01

                          挺简单的一道题

                          #include <bits/stdc++.h>
                          using namespace std;
                          int M[10005];
                          void sd/*shutdown*/(int start,int end){/*编写
                          熄灯函数*/
                              for (int i=start;i<=end;i++)
                                  M[i]=0;
                          }
                          int main(){
                              int sum=0,a,b;
                              memset(M, 1/*初始化为1*/, sizeof(M)/*初始化长度*/);//初始化
                              int m,l;
                              cin>>l>>m;
                              for (int i=1;i<=m;i++){
                                  cin>>a>>b;
                                  sd(a,b);//运用函数
                              }
                              for (int i=0;i<=10004;i++){/*遍历,判断
                          个数*/
                                  if (M[i]==0) sum++;
                              }
                              cout<<l/*总个数*/-sum+1;
                          }
                          
                          • 0
                            @ 2023-9-3 12:12:31

                            上成品

                            #include<bits/stdc++.h>
                            using namespace std;
                            int l,m,cnt;
                            bool trees[10001];
                            int main(){
                                cin>>l>>m;
                                memset(trees,true,sizeof(trees));
                                for(int i=0;i<=m;i++){
                                    int u,v;
                                    cin>>u>>v;
                                    for(int j=u;j<=v;j++){
                                        trees[j]=false;
                                    }
                                }for(int i=0;i<=l;i++){
                                    if(trees[i])
                                        cnt++;
                                }cout<<cnt;
                                return 0;
                            }
                            
                            • 0
                              @ 2023-7-20 12:57:27
                              #include <iostream>
                              using namespace std;
                              int main()
                              {
                              	int a[9999],s,e,l,m,sum;
                              	cin >> l >> m;//输入范围
                              	for (int i = 0;i <= l;i ++)//将区域范围的树初始化
                              	{
                              		a[i] = 1;
                              	}
                              	for (int i = 1;i <= m;i ++)
                              	{
                              		cin >> s >> e;
                              		for (int i = s;i <= e;i ++)//砍掉指定范围内的树
                              		{
                              			a[i] = 0;
                              		}
                              	}
                              	for (int i = 0;i <= l;i ++)
                              	{
                              		if (a[i] == 1)//为1代表有树
                              		{
                              			sum ++;
                              		}
                              	}
                              	cout << sum;
                              	return 0;
                              }
                              
                              • 0
                                @ 2023-7-20 12:57:08
                                #include <iostream>
                                using namespace std;
                                int main()
                                {
                                	int a[9999],s,e,l,m,sum;
                                	cin >> l >> m;
                                	for (int i = 0;i <= l;i ++)
                                	{
                                		a[i] = 1;
                                	}
                                	for (int i = 1;i <= m;i ++)
                                	{
                                		cin >> s >> e;
                                		for (int i = s;i <= e;i ++)
                                		{
                                			a[i] = 0;
                                		}
                                	}
                                	for (int i = 0;i <= l;i ++)
                                	{
                                		if (a[i] == 1)
                                		{
                                			sum ++;
                                		}
                                	}
                                	cout << sum;
                                	return 0;
                                }
                                
                                • 0
                                  @ 2023-5-20 13:09:13
                                  
                                  
                                  #include <iostream>
                                  using namespace std;
                                  int main()
                                  {
                                      cin >> l >> m;
                                      for (int i=0;i<=m;i++)
                                      {
                                          cin >> x >> y;
                                          for (int j=x;j<=y;j++)
                                          {
                                              a[j]=1;
                                          }
                                      }
                                      int num=0;
                                      for (int i=0;i<=l;i++)
                                      {
                                          if(a[i]==0)
                                          {
                                              num++;
                                          }
                                      }
                                      cout << num;
                                      return 0;
                                  }
                                  //AC过
                                  
                                  
                                  
                                  
                                  
                                  • 0
                                    @ 2023-4-29 15:32:06

                                    #include <bits/stdc++.h> using namespace std; int main() { int l,a[10001],m,c,d; cin >> l >> m; for (int i = 0;i <= l;i++) { a[i] = 1; } for (int i = 1;i <= m;i++) { cin >> c >> d; for (int j = c;j <= d;j++) { a[j] = 0; } } int sum = 0; for (int i = 0;i <= l;i++) { if (a[i] == 1) { ++sum; } } cout << sum; return 0; } 这题就是定义一个带含义的数组,先是将数组全设为1,表示都有树,其次跟具范围将范围中的数组的数赋值为0,一番操作后,进行最后的0或1判断,如果状态为1,则将求和变量+1,反观,则跳过,最后输出sum;

                                    • 0
                                      @ 2023-4-22 16:59:22

                                      使用数组存储树是否被砍(0表示未被砍,1表示被砍) 若树在范围内则砍去,设为1 最终统计数组中0的个数

                                      #include <iostream>
                                      using namespace std;
                                      int main()
                                      {
                                          int l, m, x, y, cnt = 0, a[10001];
                                          cin >> l >> m;
                                          // 初始时均为有树
                                          for (int i = 0; i <= l; i++) 
                                          {
                                              a[i] = 0;
                                          }
                                          //将在范围内的树砍去
                                          for (int i = 1; i <= m; i++)
                                          {
                                              cin >> x >> y;
                                              for (int j = x; j <= y; j++) 
                                              {
                                                  a[j] = 1;
                                              }
                                          }
                                          // 统计未被砍的数目
                                          for (int i = 0; i <= l; i++)
                                          {
                                              if (a[i] == 0)
                                              {
                                                  cnt++;
                                              }
                                          }
                                          cout << cnt;
                                          return 0;
                                      }
                                      
                                      • 0
                                        @ 2022-9-11 14:54:26

                                        当当! 新鲜出炉的题解来了!!! 先看下步骤:


                                        1. 先定义 数组 a ,如果位置i有树,a[i]保存为0,否则保存为 !=0.
                                        2. a[0] ~ a[l]先设为有树,都设为 0.
                                        3. 然后,把每一个要砍的树都 ++,这样就相当于是不是 0 就是 其他的,避免了重复的问题
                                        4. 最后, 输出所有==0 的 i.

                                        来看代码吧

                                        AC过,请放心食用

                                        #include <iostream>
                                        using namespace std;
                                        int tree[10000], l, m, start, end, sum;
                                        int main()
                                        {
                                        	cin >> l >> m;
                                            for (int i = 0; i < m; i++)
                                            {
                                                cin >> start >> end;
                                        	    for (start; start <= end; start++)
                                        	    {
                                        	    	tree[start]++;
                                        	    }
                                            }
                                        	for (int i = 0; i <= l; i++)
                                            {
                                                if (tree[i] == 0)
                                                {
                                                    sum++;
                                                }
                                            }
                                        	cout << sum;
                                        	return 0;
                                        }
                                        

                                        信息

                                        ID
                                        1570
                                        时间
                                        1000ms
                                        内存
                                        32MiB
                                        难度
                                        5
                                        标签
                                        递交数
                                        2437
                                        已通过
                                        873
                                        上传者