题解

326 条题解

  • 11
    @ 2018-04-18 20:43:19
    #include<iostream>
    using namespace std;
    int main()
    {
        int l,m,i,s=0,j;
        cin>>l>>m;
        int a,b,c[l+1]={0};//搞数值和线段
        for(i=1;i<=m;i++)
        {
            cin>>a>>b;
            for(j=a;j<=b;j++) c[j]=1;//如果是区域的就设置为1
        }
        for(i=0;i<=l;i++)
        {
            if(c[i]==0) s++;//如果是0的话就加
        }
        cout<<s;//最后输出
        
        return 0;
    }
    

    请各位大哥别默默的复制,有帮助就扣个1行不

  • 1
    @ 2023-08-08 12:57:15

    这种方法应该简单点!可以参考一下。

    #include<bits/stdc++.h>
    using namespace std;
    int k[1000001]; 
    int ans[1000001];
    int main()
    {
        long long a,b,c,d,x=0;
        cin>>b>>a;
        for(int i=1;i<=a;i++)
        {
            cin>>c>>d;
            for(int j=c;j<=d;j++)
            {
                k[j]=1;
             } 
        }
        for(int i=0;i<=b;i++)
        {
            if(k[i]==0)x++;
        }
        cout<<x;
        return 0;
    }
    
    
  • 1
    @ 2023-07-18 10:39:44

    想了想,其实只用三遍循环就可以的。

    思路:

    第一遍,将路上的所有树打上标记,表示这个点没有被访问过。

    第二遍,读入区间的头和尾,从这个区间的头开始循环,到尾结束,标记为访问过。

    第三遍,顺序访问路上的树,只要没访问过,计数加1,这样就求出了路上所有还存在的树的数目。

    程序如下:

    #include<cstdio>
    #include<iostream>
    using namespace std;
    #include<cstring>
    //以上不解释
    int L,M;
    //变量名称与原题相同
    int cnt=0;
    //剩余树的数目
    int vis[10000+10];
    //用来判断树木有没有被访问过
    int main()
    {
        memset(vis,0,sizeof(vis));//初始化该数组
        cin>>L>>M;//标准输入,不解释
        for(int i=0;i<=L;i++)
            vis[i]=0;//从0这个树开始,将这条路上所有的树标记为未访问过
        for(int i=1;i<=M;i++)
        {
            int head,tail;//定义区间的头和尾
            cin>>head>>tail;
            for(int j=head;j<=tail;j++)
                if(vis[j]==0)
                    vis[j]=1;//从这个区间的头和尾开始,将所有区间内的树标记为访问过
        }
        for(int i=0;i<=L;i++)
        {
            if(vis[i]==0)
                cnt++;//计算未被访问过的树的数目
        }
        cout<<cnt<<endl;
        return 0;
    } 
    
    

    这么漂亮的题解,难道不点个赞再走嘛

  • 0
    @ 2022-08-13 12:37:09

    啊这也不会有人做不出来吧
    话不多说,代码飞来!

    #include<iostream>
    using namespace std;
    int main(){
        int a[10010];
        int i,j,m,L;
        int st,ed,cnt=0;
        cin>>L>>m;
        for(i=0;i<=L;i++){
            a[i]=1;
        }
        for(i=0;i<=m;i++){
            cin>>st>>ed;
            for(j=st;j<=ed;j++){
                a[j]=0;
            }
        }
        for(i=0;i<=L;i++){
            if(a[i]==1){
                cnt++;
            }
        }
        cout<<cnt;
        return 0;
    }
    
  • 0
    @ 2021-08-12 09:03:51

    Python 解法

    思路

    这道题直接模拟,用一个列表表示数轴上的树,然后根据输入的两个数将这个区间的数打上标记,最后统计没有打标记的元素即可。

    \(Code\)

    l,m=input().split()
    l=int(l)
    m=int(m)
    lis=[]
    for i in range(0,l+1):
        lis.append(True)    #初始化
    for i in range(1,m+1):
        a,b=input().split()
        a=int(a)
        b=int(b)
        for j in range(a,b+1):
            lis[j]=False    #模拟打标记
    ans=0
    for i in range(0,l+1):
        if lis[i]:
            ans+=1
    print(ans,'\n')
    
  • 0
    @ 2018-08-18 14:03:18

    线段树什么的都是不存在的。。。
    数据范围很小,暴力AC。。。

    #include<iostream>
    using namespace std;
    bool a[10001];
    int main()
    {
        int n,m;
        cin>>n>>m;
        for(int i=0;i<=n;i++)
        {
            a[i]=1;
        }
        n++;
        for(int i=1;i<=m;i++)
        {
            int x,y;
            cin>>x>>y;
            for(int j=x;j<=y;j++)
            {
                n-=a[j];
                a[j]=0;
            }
        }
        cout<<n;
        return 0;
    }
    
  • 0
    @ 2018-08-08 13:48:09

    我来给Pascal党发题解,还是一句话,我是托儿索!
    var
    f:array[0..10000] of boolean;
    l,m,i,t,x,y,j:longint;
    begin
    fillchar(f,sizeof(f),true);
    t:=0;
    read(l,m);
    for i:=1 to m do
    begin
    read(x,y);
    for j:=x to y do
    f[j]:=false;
    end;
    for i:=0 to l do
    if f[i] then inc(t);
    write(t);
    end.

  • 0
    @ 2018-07-22 12:50:20

    C++标程:
    #include <iostream>
    #define N 100010
    using namespace std;
    int l[N];//数组l代表马路的长度,标记为0
    int x,y;//区域的起始点和终止点
    int main()
    {
    int L,M;//变量L代表马路的长度,变量M代表区域的数目
    cin>>L>>M;
    for (int i=1;i<=M;i++)
    {
    cin>>x>>y;
    for (int j=x;j<=y;j++)//“挖地铁”
    l[j]=1;
    }
    int count=0;
    for (int i=0;i<=L;i++)//统计树的个数
    if (l[i]==0) count++;
    cout<<count<<endl;
    return 0;
    }

  • 0
    @ 2018-07-19 16:57:17

    #include<iostream>
    using namespace std;
    int main()
    {
    int s, e;
    int subn,tree;
    bool road[10001];
    for(int i=0;i<=10000;i++) road[i]=0;
    cin>>tree>>subn;
    for(int i=0;i<subn;i++)
    {
    cin>>s>>e;
    for(int j=s;j<=e;j++)
    if(!road[j])
    {
    road[j]=1;
    tree--;
    }
    }

    cout<<tree+1;
    return 0;
    }

  • 0
    @ 2018-07-19 16:57:09

    #include<iostream>
    using namespace std;
    int main()
    {
    int s, e;
    int subn,tree;
    bool road[10001];
    for(int i=0;i<=10000;i++) road[i]=0;
    cin>>tree>>subn;
    for(int i=0;i<subn;i++)
    {
    cin>>s>>e;
    for(int j=s;j<=e;j++)
    if(!road[j])
    {
    road[j]=1;
    tree--;
    }
    }

    cout<<tree+1;
    return 0;
    }

  • 0
    @ 2018-07-19 16:56:48

    #include<iostream>
    using namespace std;
    int main()
    {
    int s, e;
    int subn,tree;
    bool road[10001];
    for(int i=0;i<=10000;i++) road[i]=0;
    cin>>tree>>subn;
    for(int i=0;i<subn;i++)
    {
    cin>>s>>e;
    for(int j=s;j<=e;j++)
    if(!road[j])
    {
    road[j]=1;
    tree--;
    }
    }

    cout<<tree+1;
    return 0;
    }

  • 0
    @ 2018-07-15 09:36:50

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<iomanip>
    using namespace std;
    int main()
    {
    int l ,m,i,j,e,c,d,s=0;
    int a[10001],b[10001];
    cin>>l>>m;
    for( i=0;i<=l;++i)a[i]=1;
    for(j=1;j<=m;++j)
    {
    cin>>e>>c;
    for(d=e;d<=c;++d)
    a[d]=0;
    }
    for(i=0;i<=l;++i)
    if(a[i])
    {
    s=s+a[i];
    }

    cout<<s<<endl;
    return 0;
    }

  • 0
    @ 2018-07-09 15:17:40

    #include<stdio.h>
    #include<string.h>
    int main()
    {
    int road[100001];
    memset(road, 0, sizeof(road));
    int M,length_road;
    int m_start, m_end;
    scanf("%d%d", &length_road, &M);
    int i, j, k,count=0;
    for (i = 0; i <= length_road; i++)
    {
    road[i] = 1;
    }
    for (j = 1; j <= M; j++)
    {
    scanf("%d%d", &m_start, &m_end);
    for (k = m_start; k<=m_end; k++)
    {
    road[k] = 0;
    }
    }
    for (int t = 0; t <= length_road; t++)
    {
    if (road[t] == 0)
    {
    //printf("%d ",t);
    count++;
    }
    }
    //printf("\n%d\n",count);
    printf("%d\n", length_road-count+1);
    return 0;
    }

  • 0
    @ 2018-06-16 17:25:05

    #include<iostream>
    using namespace std;
    int main()
    {
    int n;
    cin >> n;
    int *a = new int[n+1];
    for (int i = 0; i < n+1; i++)
    a[i] = 1;
    int begin, end;
    int q;
    cin >> q;
    while (q--)
    {
    cin >> begin >> end;
    if (begin > end)
    swap(begin, end);
    for (int i = begin; i <= end; i++)
    a[i] = 0;
    }
    int sum = 0;
    for (int i = 0; i < n+1; i++)
    sum += a[i];
    cout << sum;
    return 0;
    }

  • 0
    @ 2018-06-16 17:24:56

    #include<iostream>
    using namespace std;
    int main()
    {
    int n;
    cin >> n;
    int *a = new int[n+1];
    for (int i = 0; i < n+1; i++)
    a[i] = 1;
    int begin, end;
    int q;
    cin >> q;
    while (q--)
    {
    cin >> begin >> end;
    if (begin > end)
    swap(begin, end);
    for (int i = begin; i <= end; i++)
    a[i] = 0;
    }
    int sum = 0;
    for (int i = 0; i < n+1; i++)
    sum += a[i];
    cout << sum;
    return 0;
    }

  • 0
    @ 2018-06-16 17:24:19

    #include<iostream>
    using namespace std;
    int main()
    {
    int n;
    cin >> n;
    int *a = new int[n+1];
    for (int i = 0; i < n+1; i++)
    a[i] = 1;
    int begin, end;
    int q;
    cin >> q;
    while (q--)
    {
    cin >> begin >> end;
    if (begin > end)
    swap(begin, end);
    for (int i = begin; i <= end; i++)
    a[i] = 0;
    }
    int sum = 0;
    for (int i = 0; i < n+1; i++)
    sum += a[i];
    cout << sum;
    return 0;
    }

  • 0
    @ 2018-04-19 20:46:47

    #include<iostream>
    using namespace std;
    int main()
    {
    int l,m,i,s=0,j;
    cin>>l>>m;
    int a,b,c[l+1]={0};
    for(i=1;i<=m;i++)
    {
    cin>>a>>b;
    for(j=a;j<=b;j++) c[j]=1;
    }
    for(i=0;i<=l;i++)
    {
    if(c[i]==0) s++;
    }
    cout<<s;

    return 0;
    }

  • 0
    @ 2018-03-21 23:13:48
    #include<iostream>
    using namespace std;
    int main()
    {
        int n;
        cin >> n;
        int *a = new int[n+1];
        for (int i = 0; i < n+1; i++)
            a[i] = 1;
        int begin, end;
        int q;
        cin >> q;
        while (q--)
        {
            cin >> begin >> end;
            if (begin > end)
                swap(begin, end);
            for (int i = begin; i <= end; i++)
                a[i] = 0;
        }
        int sum = 0;
        for (int i = 0; i < n+1; i++)
            sum += a[i];
        cout << sum;
        return 0;
    }
    
  • 0
    @ 2018-02-14 18:38:16

    #include <stdio.h>//非常暴力
    struct road
    {
    int sta;
    int end;
    }ar[100];
    int main()
    {
    int L, M;
    int time = 0;
    int roa[10002] = { 0 };
    scanf("%d %d", &L, &M);
    for (int i = 0; i < M; i++)
    {
    scanf("%d %d", &ar[i].sta, &ar[i].end);
    for (int j = ar[i].sta; j <= ar[i].end; j++)
    roa[j] = 1;
    }
    for (int i = 0; i <= L; i++)
    {
    if (roa[i] == 0)
    time++;
    }
    printf("%d", time);

    return 0;
    }

  • 0
    @ 2018-01-28 11:33:37

    //c++
    #include<iostream>
    using namespace std;
    int main(){
    int a,b,j,l,i,m,t=0;
    cin>>l>>m;
    int c[l+30];
    for(i=0;i<=l;i++) c[i]=1;
    for(i=0;i<m;i++){
    cin>>a>>b;
    for(j=a;j<=b;j++) c[j]=0;
    }
    for(i=0;i<=l;i++) if(c[i]) t++;
    cout<<t;
    }

信息

ID
1103
难度
4
分类
模拟 点击显示
标签
递交数
14290
已通过
6515
通过率
46%
被复制
50
上传者