题解

327 条题解

  • 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;
    }

  • 0
    @ 2018-01-24 21:04:01

    #include <stdio.h>
    const int N=10005;
    int a[N];
    int main()
    {
    int i,j,k,l,m,n,sum=0;
    scanf("%d%d",&n,&m);
    for(i=1;i<=m;i++)
    {
    scanf("%d%d",&k,&l);
    for(j=k;j<=l;j++)
    a[j]++;
    }
    for(i=0;i<=n;i++)
    if(a[i]==0)sum++;
    printf("%d",sum);
    }

  • 0
    @ 2018-01-19 20:48:49
  • 0
    @ 2017-12-03 14:32:46

    用数组必须容量大才行。。。
    #include<stdio.h>
    int main()
    {
    int a[100000],n,m,b1,b2,sum=0;
    scanf("%d%d",&n,&m);
    for(int i=0;i<=n;i++)
    {
    a[i]=1;
    }
    for(int i=1;i<=m;i++)
    {
    scanf("%d%d",&b1,&b2);
    for(int j=b1;j<=b2;j++)
    {
    a[j]=0;
    }
    }
    for(int i=0;i<=n;i++)
    {
    if(a[i]!=0)sum++;
    }
    printf("%d",sum);
    return 0;
    }

  • 0
    @ 2017-10-29 22:32:31

    #include<iostream>
    using namespace std;
    int a[10001];
    int main()
    {
    int i,j,l,m,c,x,y;
    c=0;
    cin>>l>>m;
    for(i=1;i<=m;i++)
    {
    cin>>x>>y;
    for(j=x;j<=y;j++)
    {
    a[j]=1;
    }
    }
    for(i=0;i<=l;i++)
    {
    if(a[i]==0)
    {
    c++;
    }
    }
    cout<<c<<endl;
    system ("pause");
    return 0;
    }

  • 0
    @ 2017-10-10 21:54:00

    #include<iostream>
    using namespace std;
    int a[10001];
    int main()
    {
    int sum=0,m,x,y,l,i,j,k;
    cin>>l>>m;
    for(i=0;i<m;i++)
    {
    cin>>x>>y;
    for(j=x;j<=y;j++)
    a[j]=1;
    }
    for(k=0;k<=l;k++)
    {
    if(a[k]!=1)
    sum++;
    }
    cout<<sum;
    }

  • 0
    @ 2017-10-01 09:08:33

    #include<iostream>
    using namespace std;
    int a[110],b[110],c[10010];
    int main()
    {
    int L,M,sum=0;
    cin>>L>>M;
    for(int i=0;i<M;i++)
    {
    cin>>a[i]>>b[i];
    for(int j=a[i];j<=b[i];j++)
    {
    c[j]=1;
    }
    }
    for(int i=0;i<=L;i++)
    {
    if(c[i]!=1)
    sum++;
    }
    cout<<sum<<endl;
    return 0;
    }

  • 0
    @ 2017-09-18 10:23:47

    线段树。。。。。。

    #include<cstdio>
    #include<iostream>
    using namespace std;
    
    struct node{
        int right,left,sum,lazy;
    }tree[10008*4];
    
    int n,m;
    
    void build(int now,int le,int ri){
        tree[now].left=le;tree[now].right=ri;
        if(le==ri){tree[now].sum=1;return;}
        int mid=(ri+le)>>1;
        build(now*2,le,mid);
        build(now*2+1,mid+1,ri);
        tree[now].sum=tree[now*2].sum+tree[now*2+1].sum;
        return;
    }
    
    void pushdown(int now){
        tree[now*2].sum=tree[now*2+1].sum=0;
        tree[now*2].lazy=tree[now*2+1].lazy=1;
        tree[now].lazy=0;return;
    }
    
    void update(int now,int le,int ri){
        if(tree[now].left==le&&tree[now].right==ri){
            tree[now].sum=0;
            tree[now].lazy=1;
            return;
        }
        if(tree[now].lazy)pushdown(now);
        int mid=(tree[now].left+tree[now].right)>>1;
        if(mid>=ri) update(now*2,le,ri);
        else if(mid<le) update(now*2+1,le,ri);
        else {update(now*2,le,mid);update(now*2+1,mid+1,ri);}
        tree[now].sum=tree[now*2].sum+tree[now*2+1].sum;
        return;
    }
    
    int search(int now){
        return tree[now].sum;
    }
    
    int main(){
        cin>>n>>m;
        build(1,0,n);
        for(int i=1;i<=m;i++){
            int a,b;
            cin>>a>>b;
            update(1,a,b);
        }
        cout<<search(1);
        return 0;
    }
    
    
  • 0
    @ 2017-08-17 21:52:58

    #include <stdio.h>
    int main()
    {
    int l,m,a,b,sum=0,i,j;
    int L[10001]={0};
    scanf("%d %d",&l,&m);

    for(i=1;i<=m;i++)
    {
    scanf("%d %d",&a,&b);
    for(j=a;j<=b;j++)
    L[j]=1;
    }

    for(i=0;i<=l+1;i++)
    if(L[i]==1)
    sum++;

    printf("%d",l+1-sum);
    return 0;
    }

  • 0
    @ 2017-08-10 22:05:57

    var l,m,x,y,i,j,ans:longint; a:array[0..10000] of integer;
    begin
    readln(l,m);
    fillchar(a,sizeof(a),1);
    for i:=1 to m do
    begin
    readln(x,y);
    for j:=x to y do a[j]:=0;
    end;
    for i:=0 to l do
    if a[i]<>0 then inc(ans);
    writeln(ans);
    end.

  • 0
    @ 2017-08-07 16:17:20

    我觉得这个应该属于哈希表的一种吧

    
    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<vector>
    
    using namespace std;
    
    int main(void){
        freopen("2.in","r",stdin);
        freopen("2.out","w",stdout);
        int l;
        cin>>l;
        vector<int> w(l+1,1);
        int m;
        cin>>m;
        for (int i=0;i<m;i++){
            int a,b;
            cin>>a;
            cin>>b;
            for (int j=a;j<=b;j++){
                w[j]=0;
            }
        }
        int s=0;
        for (int i=0;i<l+1;i++){
            if (w[i]==1) s=s+1;
        }
        cout<<s;
        return 0;
    }
    
    
  • 0
    @ 2017-08-06 12:40:23

    #include<stdio.h>
    int main()
    {
    int tree[10003],piece[103][2],i,l,m,a,num=0;
    scanf("%d%d",&l,&m);
    for(i=1;i<=m;i++)
    {
    scanf("%d%d",&piece[i][0],&piece[i][1]);
    }
    for(i=0;i<=l;i++)
    {
    tree[i]=1;
    }
    for(i=1;i<=m;i++)
    {
    for(a=piece[i][0];a<=piece[i][1];a++)
    {
    if(tree[a]==1)
    {
    tree[a]=0;
    num++;
    }
    }
    }
    printf("%d",l-num+1);
    }

  • 0
    @ 2017-07-20 04:17:36

    #include <iostream>
    using namespace std;
    int main(){
    int M,N;
    cin>>M>>N;
    int tree[M+1];
    for(int i=0;i<M+1;i++){
    tree[i]=1;
    }
    int start,end;
    while(N--){
    cin>>start>>end;
    for(int i=start;i<=end;i++){
    tree[i]=0;
    }
    }
    int count=0;
    for(int i=0;i<M+1;i++){
    if(tree[i]==1)count++;
    }
    cout<<count<<endl;
    }

  • 0
    @ 2017-07-14 11:27:19

    vector<bool>

    #include <iostream>
    #include <vector>
    
    int main()
    {
        std::vector<bool> tree;
        int l;
        std::cin >> l;
        ++l;
        tree.assign(l, true);
        int m, sum = l;
        std::cin >> m;
        for (int i = 0; i < m; ++i)
        {
            int min, max;
            std::cin >> min >> max;
            for (int j = min; j <= max; ++j)
            {
                if (tree[j])
                {
                    tree[j] = false;
                    --sum;
                }
            }
        }
        std::cout << sum << std::endl;
    }
    
    
  • 0
    @ 2017-06-05 20:43:46

    //经典桶排序
    #include <stdio.h>
    int aa[10010]={0};
    int main()
    {
    int m,n,i,j,a,b,ans=0;
    scanf("%d%d",&m,&n);
    for(i=0;i<=m;i++)
    aa[i]=1;
    for(i=0;i<n;i++)
    {
    scanf("%d%d",&a,&b);
    for(j=a;j<=b;j++)
    {
    aa[j]=0;
    }
    }
    for(i=0;i<=m;i++)
    {
    if(aa[i]==1)
    ans++;
    }
    printf("%d",ans);
    return 0;

    }

  • 0
    @ 2017-05-08 07:55:48
    #include <cstring>
    #include <cstdio>
    #include <algorithm>
    #include <iostream>
    using namespace std;
    
    #define maxn 500000+10
    int fa[maxn];
    int n, q;
    int ans ;
    
    int solve(int a,int b)
    {
        int i=b;
           for(int i = b ; i >= a ; )//从右向左扫描
        {
            if( fa[i] == i )
            {
                ans--;
                fa[i] = a - 1;//标记,同时用fa[i]来方便下次快速转换位置
                              //即直接免去查找此区间,跳到区间的一个左端点
                i--;
            }
            else//已经扫过
                i = fa[i];//直接跳到左区间端点向右一个位置(因为已经扫过)
        }
    }
    
    int main( )
    {
      scanf("%d %d",&n,&q);
         for(int i = 0 ; i <= n ; ++i)
           fa[i] = i;
        ans = n+1;
        for(int i = 1 ; i <= q ; i++)
        {
            int a, b;
             scanf("%d %d",&a,&b);
            if( a > b )
                swap( b, a );
            solve( a, b );
        }
            printf("%d\n",ans);
    }
    
  • 0
    @ 2017-03-30 17:26:50

    考虑重叠部分,一直不行,换了一种方法

    #include<iostream>
    using std::cin;
    using std::cout;
    using std::endl;
    int main()
    {
        int L, M;
        cin >> L >> M;
        int amount = 0;
        int** a = new int*[M];
        int* b = new int[L+1];
        for (int i = 0; i < M; i++)
        {
            a[i] = new int[2];
            cin >> a[i][0] >> a[i][1];
            for (int j = a[i][0]; j <= a[i][1]; j++)
                b[j] = 1;
        }
        for (int i = 0; i < L + 1; i++)
            if (b[i] != 1)
                amount++;
        cout << amount;
        for (int i = 0; i < M; i++)
            delete []a[i];
        delete[]a;
        delete[]b;
        return 0;
    }
    
  • 0
    @ 2017-03-10 20:15:06

    #include<iostream>
    using namespace std;
    int main()
    {
    int i,j,n;//循环变量2个,个数,

    int js=0;//树的计数
    int b,e;//begin,end
    int a[10002]={0};
    cin>>n;
    for(i=0;i<=n;i++)
    a[i]=1;//有树的是1,没有是0
    int dt;//地铁
    cin>>dt;
    for(i=1;i<=dt;i++)
    {
    cin>>b>>e;
    for(j=b;j<=e;j++)
    a[j]=0;
    }
    /*for(i=0;i<=n;i++)
    cout<<i<<" "<<a[i]<<" ";
    cout<<endl;*/
    for(i=0;i<=n;i++)
    if(a[i]==1)
    js++;
    cout<<js;
    return 0;
    }

  • 0
    @ 2017-01-31 23:51:29

    code

    include <cstdio>

    using namespace std;
    int main()
    {
    int l=0,m=0;
    int begin=0,end=0;
    char tree[10005]={0};
    int num=0;
    scanf("%d%d",&l,&m);
    for(int i=0;i<=l;i++)
    {
    tree[i]='1';
    }
    for(int i=1;i<=m;i++)
    {
    scanf("%d%d",&begin,&end);
    for(int j=begin;j<=end;j++)
    {
    tree[j]='0';
    }
    begin=0;
    end=0;
    }
    for(int i=0;i<=l;i++)
    {
    if(tree[i]=='1')
    {
    num++;
    }
    }
    printf("%d",num);
    return 0;
    }

  • 0
    @ 2016-12-18 19:56:28

    我操。。。。。。我能说我原先还一直在判断是否重复区间吗?然后过了30%数据,然后百思不得其解,看到大神做法。。。直接数组标记下就好了,还管什么重复区间,,,然后Ac了

信息

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