• 2019牛客暑期多校训练营(第八场)-C CDMA(递归构造)


    题目链接:https://ac.nowcoder.com/acm/contest/888/C

    题意:输入m(为2的n次幂,n<=10),构造一个m*m的矩阵满足任意不同的两行的元素乘积和为0。

    思路:假设矩阵A是合法的矩阵,大小为m*m,m=2^n,那么我们可以构造出如下大小为2m*2m的合法矩阵:

      A  A

      A -A

       仔细分析就可证明其正确性。

    AC代码:

    #include<cstdio>
    #include<algorithm>
    #include<map>
    using namespace std;
    
    int n,m;
    int a[1050][1050];
    map<int,int> mp;
    
    int main(){
        scanf("%d",&m);
        for(int i=1;i<=10;++i)
            mp[1<<i]=i;
        n=mp[m]-1;
        a[1][1]=1,a[1][2]=1;
        a[2][1]=1,a[2][2]=-1;
        int len=2;
        while(n--){
            for(int i=1;i<=len;++i)
                for(int j=len+1;j<=2*len;++j)
                    a[i][j]=a[i][j-len];
            for(int i=len+1;i<=2*len;++i)
                for(int j=1;j<=2*len;++j)
                    if(j<=len) a[i][j]=a[i-len][j];
                    else a[i][j]=-a[i-len][j];
            len<<=1;
        }
        for(int i=1;i<=len;++i){
            for(int j=1;j<=len;++j)
                printf("%d ",a[i][j]);
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    HttpRequestHandler处理页面
    netty常用handler
    基于Netty实现高性能弹幕系统
    netty异步任务
    九、Netty源码剖析
    八、Netty实现简单RPC调用
    6、SSM整合Shiro
    5、Shiro实现授权
    4、散列算法&凭证配置
    3、Shiro实现认证
  • 原文地址:https://www.cnblogs.com/FrankChen831X/p/11342750.html
Copyright © 2020-2023  润新知