zoukankan      html  css  js  c++  java
  • Codeforces Round #337 (Div. 2) C. Harmony Analysis (构造)

    题意:

    给一个k,求2^k个2^k维的向量,两两垂直。

    已知求出k=n时的结果为一个矩阵a,求k=n+1时只需构造

    a  a

    a -a

    就可以了,正确性一想就能知道。

    比赛时一直没有思路,dp没想出,甚至打印出来想找规律orz……

    #include <bits/stdc++.h>
    
    using namespace std;
    
    int p[10] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512};
    
    int a[600][600];
    
    void _copy(int x, int y, int cx, int cy, int n)
    {
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n; ++j) {
                a[cx+i][cy+j] = a[x+i][y+j];
            }
        }
    }
    
    void __copy(int x, int y, int cx, int cy, int n)
    {
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n; ++j) {
                a[cx+i][cy+j] = !a[x+i][y+j];
            }
        }
    }
    
    void solve(int n)
    {
        if (n == 0) {
            a[1][1] = 1;
        } else {
            solve(n-1);
            _copy(1, 1, 1, p[n-1]+1, p[n-1]);
            _copy(1, 1, p[n-1]+1, 1, p[n-1]);
            __copy(1, 1, p[n-1]+1, p[n-1]+1, p[n-1]);
        }
    }
    
    int main()
    {
        int n;
        scanf("%d", &n);
        solve(n);
        for (int i = 1; i <= p[n]; ++i) {
            for (int j = 1; j <= p[n]; ++j) {
                if (a[i][j]) printf("+");
                else printf("*");
            }
            printf("
    ");
        }
        return 0;
    }
    

      

  • 相关阅读:
    第24课 多线程开发
    第23课 装饰器
    第22课 调用外部程序
    第20课 异常处理
    第19课 习题讲解
    第18课 面向对象
    第17课 调试程序
    第16课 pycharm 使用
    第15课 模块与包
    第14课 再识函数
  • 原文地址:https://www.cnblogs.com/wenruo/p/5084732.html
Copyright © 2011-2022 走看看