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

    C. Harmony Analysis

    题目连接:

    http://www.codeforces.com/contest/610/problem/C

    Description

    The semester is already ending, so Danil made an effort and decided to visit a lesson on harmony analysis to know how does the professor look like, at least. Danil was very bored on this lesson until the teacher gave the group a simple task: find 4 vectors in 4-dimensional space, such that every coordinate of every vector is 1 or  - 1 and any two vectors are orthogonal. Just as a reminder, two vectors in n-dimensional space are considered to be orthogonal if and only if their scalar product is equal to zero, that is:

    Danil quickly managed to come up with the solution for this problem and the teacher noticed that the problem can be solved in a more general case for 2k vectors in 2k-dimensinoal space. When Danil came home, he quickly came up with the solution for this problem. Can you cope with it?

    Input

    The only line of the input contains a single integer k (0 ≤ k ≤ 9).

    Output

    Print 2k lines consisting of 2k characters each. The j-th character of the i-th line must be equal to ' * ' if the j-th coordinate of the i-th vector is equal to  - 1, and must be equal to ' + ' if it's equal to  + 1. It's guaranteed that the answer always exists.

    If there are many correct answers, print any.

    Sample Input

    2

    Sample Output

    ++**

    ++

    ++++

    +**+

    Hint

    题意

    要求你构造出2^n个2^n维向量,使得向量之间两两相乘都等于0

    题解:

    瞎构造的。。。

    大概证明可以由数学归纳法证明

    假设我现在已经构造出了

    a

    那么我就可以构造出

    a a

    a -a

    然后一直重复就好了。。。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    
    int dp[1200][1200];
    int n;
    int main()
    {
        scanf("%d",&n);
        dp[0][0]=1;
        for(int x=1;x<=n;x++)
        {
            for(int i=0;i<(1<<x-1);i++)
            {
                for(int j=0;j<(1<<x-1);j++)
                {
                    dp[i][j+(1<<x-1)]=dp[i][j];
                    dp[i+(1<<x-1)][j]=dp[i][j];
                    dp[i+(1<<x-1)][j+(1<<x-1)]=1-dp[i][j];
                }
            }
        }
        for(int i=0;i<(1<<n);i++)
        {
            for(int j=0;j<(1<<n);j++)
            {
                if(dp[i][j])printf("+");
                else printf("*");
            }
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    MusicXML 3.0 (7) 连线、延音线
    Castle ActiveRecord学习实践(7):使用HQL查询
    C#中废弃一个方法小技巧
    加入BI团队,推荐一个商业智能的论坛
    .NET设计模式(13):享元模式(Flyweight Pattern)
    重载还是覆写?
    Castle ActiveRecord学习实践(2):构建配置信息
    使用WebClient上传文件时的错误问题解决
    Castle ActiveRecord学习实践(5):实现Many–Many关系的映射
    天津.NET俱乐部成立了!
  • 原文地址:https://www.cnblogs.com/qscqesze/p/5081928.html
Copyright © 2011-2022 走看看