zoukankan      html  css  js  c++  java
  • 9.26 考试

    好久没有写博客了...

    言归正传奥

    T1就是个送分题...

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #define ll long long
    #define mem(a,b) memset(a,b,sizeof(a))
    using namespace std;
    
    int n,maxp;
    ll a[26],b[26],c[26],d[26];
    ll ans;
    
    int main(){
    
        freopen("week.in","r",stdin);
        freopen("week.out","w",stdout);
    
        scanf("%d",&n);
        maxp=(1<<n)-1;
        for(int i=1;i<=n;++i)
            scanf("%lld%lld%lld%lld",&a[i],&b[i],&c[i],&d[i]);
        ll temp,oi,wen;
        for(int i=0;i<=maxp;++i)
        {
            oi=0;wen=0;
            for(int j=1;j<=n;++j)
            {
                if( (1<<(j-1))&i )
                {
                    oi+=c[j];
                    wen-=d[j];
                    if(wen<0)
                        wen=0;
                }
                else
                {
                    wen+=a[j];
                    oi-=b[j];
                    if(oi<0)
                        oi=0;
                }
            }
            temp=oi*wen;
            if(ans<temp)
                ans=temp;
        }
        cout<<ans;
    }
    T1

    T2

    用到了一个性质:

    在一个无环图里,联通快个数=点数-边数 (证明很显然啊啊啊)

    然后维护出 点和边数的前缀和就完了...

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #define mem(a,b) memset(a,b,sizeof(a))
    using namespace std;
    int readdan()
    {
        char q=getchar();
        while(q!='0'&&q!='1')q=getchar();
        return q-'0';
    };
    const int N=2006;
    
    int n,m,Q;
    int a[N][N];
    
    int d[N][N];
    int by[N][N],bx[N][N],b[N][N];
    
    void chu()
    {
        for(int i=1;i<=n;++i)
            for(int j=1;j<=m;++j)
                d[i][j]=d[i-1][j]+d[i][j-1]-d[i-1][j-1]+a[i][j];
        int con,conx;
        for(int i=1;i<=n;++i)
        {
            con=0;conx=0;
            for(int j=1;j<=m;++j)
            {
                if(a[i][j]&&a[i][j-1])
                    ++con;
                if(a[i][j]&&a[i-1][j])
                    ++con;
                if(a[i][j]&&a[i+1][j])
                    ++conx;
                b[i][j]=b[i-1][j]+con;
                bx[i][j]=conx;
                by[i][j]=by[i-1][j]+( (a[i][j]&&a[i][j+1])?1:0 );
            }
        }
    }
    
    void out11()
    {
        printf("
    ");
        for(int i=1;i<=n;++i)
        {
            for(int j=1;j<=m;++j)
                printf("%d ",b[i][j]);
            printf("
    ");
        }
        printf("
    ");
        for(int i=1;i<=n;++i)
        {
            for(int j=1;j<=m;++j)
                printf("%d ",bx[i][j]);
            printf("
    ");
        }
        printf("
    ");
        for(int i=1;i<=n;++i)
        {
            for(int j=1;j<=m;++j)
                printf("%d ",by[i][j]);
            printf("
    ");
        }
        printf("
    ");
        for(int i=1;i<=n;++i)
        {
            for(int j=1;j<=m;++j)
                printf("%d ",d[i][j]);
            printf("
    ");
        }
        printf("
    ");
    }
    
    int main(){
    
        freopen("T2.in","r",stdin);
    
        scanf("%d%d%d",&n,&m,&Q);
        for(int i=1;i<=n;++i)
            for(int j=1;j<=m;++j)
                a[i][j]=readdan();
        chu();
        //out11();
        int lx,ly,rx,ry;
        for(int i=1;i<=Q;++i)
        {
            scanf("%d%d%d%d",&lx,&ly,&rx,&ry);
            int tb,td;
            tb=b[rx][ry]-b[lx-1][ry]-b[rx][ly-1]+b[lx-1][ly-1]-(by[rx][ly-1]-by[lx-1][ly-1])-(bx[lx-1][ry]-bx[lx-1][ly-1]);
            td=d[rx][ry]-d[lx-1][ry]-d[rx][ly-1]+d[lx-1][ly-1];
            printf("%d
    ", td-tb );
        }
    }
    T2

    T3

    脑洞打开的数学题 (然而我的脑洞并没有打开啊...)

    题解在代码里

    /*
    这个题真是 考(kao)思(nao)维(dong)
    实际上是求个逆序对
    然后根据规律 发现是个 等差数列
    然后就找规律吧...
     */
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #include <cstdlib>
    #define ll long long
    using namespace std;
    const int MAXA=100006;
    
    int tin1,a,mod,n;
    
    ll c[MAXA];
    void add(int val)
    {
        for(int i=val;i<MAXA;i+=(i&(-i)) )
            ++c[i];
    }
    ll qq(int val)
    {
        ll ans=0;
        for(int i=val;i>0;i-=(i&(-i)) )
            ans+=c[i];
        return ans;
    }
    
    ll work()
    {
        ll ans=0;
        int fir=tin1+1;
        int num1=(mod-fir)/a+1;
        ll temp,num=-1,temp1,las=-1,firtot=(mod-fir)/a+1;
        int now=fir+a*(num1-1);
        //printf("firtot=%lld num1=%d
    ",firtot,num1);
        for(int i=num1+1;i<=n;++i)
        {
            now+=a;
            if(now>mod)
            {
                ++num;
                now-=mod;
                las=-1;
            }
            //printf("i=%d now=%d num=%lld las=%lld ",i,now,num,las);
            if(las==-1)
            {
                temp=i-1-qq(now)-num1;
                //printf("temp=%lld ",temp);
                if(now>fir)
                    ans+=( firtot- ( (now-fir)/a+1 ) );
                else
                    ans+=firtot;
                //printf("ans1=%lld ",ans);
                ans+=temp;
                //printf("ans2=%lld ",ans);
                las=temp;
            }
            else
            {
                las-=num;
                ans+=las;
                if(now>fir)
                    ans+=( firtot- ( (now-fir)/a+1 ) );
                else
                    ans+=firtot;
            }
            if(now<=a)add(now);
            //printf("ans=%lld
    ",ans);
        }
        // 5 2 4 7
        return ans;
    }
    
    int main(){
    
        //freopen("T3.in","r",stdin);
    
        scanf("%d%d%d%d",&n,&tin1,&a,&mod);
        cout<<work();
    }
    T3

    简单总结一下:

    这次考试暴力分挺多,我也就拿了个 暴力分

    思维含量 在 T2和T3 里

    所以说 我思维还是要锻炼一下啊 (然而std表示 wocao这题怎么这么简单)

    以后不管做题还是走路还是吃饭还是睡觉,还是不能走思啊啊啊啊

  • 相关阅读:
    Java实现 LeetCode 30 串联所有单词的子串
    Java实现 LeetCode 29 两数相除
    Java实现 LeetCode 29 两数相除
    Java实现 LeetCode 29 两数相除
    Java实现 LeetCode 28 实现strStr()
    Java实现 LeetCode 28 实现strStr()
    Java实现 LeetCode 28 实现strStr()
    Java实现 LeetCode 27 移除元素
    Java实现 LeetCode 27 移除元素
    字符编码终极笔记:ASCII、Unicode、UTF-8、UTF-16、UCS、BOM、Endian
  • 原文地址:https://www.cnblogs.com/A-LEAF/p/7597560.html
Copyright © 2011-2022 走看看