• 2018,10,19模拟赛


    jz的题...写炸了不少暴力...还有容斥等不太熟练

    T1以为n^2*m过不去,想了好久

    归根到底还是我太蒻了qwq

    存一下代码

    t1

    为了稳一点写了部分分...还没删,可以自行跳过ovo

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int M=50010;
    int n,m,l,r,mp[35][M],sum[35][M],cnt,rr,flg1,flg0;
    long long ans;
    char c[M];
    int main()
    {
        freopen("a.in","r",stdin);
        freopen("a.out","w",stdout);
        scanf("%d%d",&n,&m);
        rr=n*m;
        for(int i=1;i<=n;i++)
        {
            scanf("%s",c+1);
            for(int j=1;j<=m;j++)
            {
                mp[i][j]=c[j]-'0';
                if(mp[i][j]==1)
                    flg1=1;
                else
                    flg0=1;
            }    
        }
        scanf("%d%d",&l,&r);
        if(flg1==0)
        {
            if(l>0)
            {
                printf("0");
            }
            else
            {
                for(int i=1;i<=n;i++)
                for(int j=1;j<=m;j++)
                    ans=ans+i*j;
                printf("%lld",ans);
            }
        }
        else if(l==0&&r==n*m)
        {
            for(int i=1;i<=n;i++)
                for(int j=1;j<=m;j++)
                    ans=ans+i*j;
            printf("%lld",ans);
        }
        else
        {
    
            for(int i=1;i<=n;i++)
                for(int j=1;j<=m;j++)
                    sum[i][j]=sum[i-1][j]+sum[i][j-1]+mp[i][j]-sum[i-1][j-1];
            for(int k=1;k<=n;k++)
                for(int i=k;i<=n;i++)
                {
                    int lp,rp,xx=i-k;
                    lp=rp=0;
                    for(int j=1;j<=m;j++)
                    {
                        while(sum[i][j]-sum[xx][j]-sum[i][lp]+sum[xx][lp]>r&&lp<j)
                            lp++;
                        while(sum[i][j]-sum[xx][j]-sum[i][rp]+sum[xx][rp]>=l&&rp<j)
                            rp++;
                        ans=ans+rp-lp;
                    }
                }
            printf("%lld",ans);
        }
        fclose(stdin);
        fclose(stdout);
        return 0;
    }

    t2

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int M=1e5+10;
    const long long mod=1e9+7;
    int n,m,cnt[25][M],sum[M];
    long long ans;
    int main()
    {
        freopen("b.in","r",stdin);
        freopen("b.out","w",stdout);
        scanf("%d%d",&n,&m);
        int x; 
        for(int i=1;i<=n;++i)
        {
            for(int j=1;j<=m;++j)
                scanf("%d",&x),cnt[i][x]++;
        }
        for(register int nw=1;nw<=n;++nw)
            for(register int i=1;i<M;++i)
                for(register int j=i+i;j<M;j+=i)
                    (cnt[nw][i]+=cnt[nw][j])%=mod;        //处理出gcd为i倍数的个数
        for(int i=1;i<M;++i)
        {
            sum[i]=1;
            for(int j=1;j<=n;++j)
                sum[i]=(long long)sum[i]*(cnt[j][i]+1)%mod;    //处理最后gcd为i的子集方案数 
            sum[i]=(sum[i]+mod-1)%mod;
        } 
        for(int i=M-10;i;--i)
            for(int j=i+i;j<M;j+=i)
                sum[i]=(sum[i]+mod-sum[j])%mod;                        
        //倒着容斥一下 (这样在更新i时j已经被容斥过了,已经是最终gcd为j的倍数了 
        for(int i=M-10;i;--i)
            ans=(ans+(long long)sum[i]*i)%mod;
        printf("%lld",ans);
        fclose(stdin);
        fclose(stdout);
        return 0;
    }

    t3等填坑吧,可能咕咕咕

  • 相关阅读:
    Hibernate的实体类为什么要实现Serializable序列化接口?
    TextBox的SelectionChanged事件及TextBox的Select属性
    wpf的Expander的使用
    使用ScrollViewer实现按钮控制滚动
    popup的使用(一)
    winform中动态生成多行label,同时添加滚动条
    关于CheckListBox触发ItemCheck事件的问题
    protobuf3的学习笔记
    jQuery总结
    青春无悔
  • 原文地址:https://www.cnblogs.com/Eternal-Glory/p/9817601.html
Copyright © 2020-2023  润新知