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;
    }
    

      

  • 相关阅读:
    JQuery
    C#基础知识
    CSS
    学习.NET
    Grunt常见问题
    一个小型的类库
    SQL字符串处理!
    安装Java8以后,Eclipse运行异常解决方案
    谈薪四式让你谈好薪
    使用js实现input输入框的增加
  • 原文地址:https://www.cnblogs.com/wenruo/p/5084732.html
Copyright © 2011-2022 走看看