zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    程序优化
    obsidium 重定位
    Obsidium V1.3.0.4 脱壳
    SEH 栈溢出
    DWORD SHOOT
    两种堆表学习
    修改网页转向
    WireShark过滤语法
    获取系统信息学习
    怎么在 渗透无键盘 查询机
  • 原文地址:https://www.cnblogs.com/FrankChen831X/p/11342750.html
Copyright © 2011-2022 走看看