Codeforces 610C - Harmony Analysis

610C - Harmony Analysis

思路:

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mp make_pair
#define pi acos(-1.0)
#define pii pair<int,int>
#define pil pair<int,ll>
#define mem(a,b) memset(a,b,sizeof(a))

const int INF=0x3f3f3f3f;
const int MOD=1e9+7;
const int N=1e5+5;
//head

int dp[550][550];
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    dp[0][0]=1;
    int t=9;
    int c=1;
    while(t--)
    {
        for(int i=0;i<c;i++)
        {
            for(int j=0;j<c;j++)
            {
                dp[i][j+c]=dp[i][j];
                dp[i+c][j]=dp[i][j];
                dp[i+c][j+c]=-dp[i][j];
            }
        }
        c<<=1;
    } 

    int k;
    cin>>k;
    int n=pow(2,k);
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(dp[i][j]==1)cout<<‘+‘;
            else cout<<‘*‘;
        }
        cout<<endl;
    }
    return 0;
} 
时间: 2024-10-03 14:02:45

Codeforces 610C - Harmony Analysis的相关文章

Codeforces 610C:Harmony Analysis(构造)

[题目链接] http://codeforces.com/problemset/problem/610/C [题目大意] 构造出2^n个由1和-1组成的串使得其两两点积为0 [题解] 我们可以构造这样一个矩阵,右下角四分之一和其余三个分块相反, 不断扩展这个矩阵即可. [代码] #include <cstdio> #define rep(i,n) for(int i=1;i<=n;i++) using namespace std; const int N=1000; int k,p[N]

codeforces 的20道C题

A - Warrior and Archer CodeForces - 595C n  偶数  然后n个数字 A B 轮流取一个 A让差变小B让差变大 直到最后2 个   求的是最小剩下的差 最后剩下的 L R  相距 n/2    求一下最小的就行 #include <iostream> #include <cstdio> #include <cmath> #include <map> #include <algorithm> #include

codeforce610C. Harmony Analysi

Codeforces Tutorial C. Harmony Analysis Problem Analysis 题目大意生成一个维度为2的k次方的方阵,使得任意两行的内积为0. 当\(k=2\)时 \[ \left[ \begin{array}{cc|cc} 1 & 1 & 1 & 1 \ 1 & -1 & 1 & -1 \ \hline 1 & 1 & -1 & -1\ 1 & -1 & -1 & 1\ \

Codeforces Round #337 (Div. 2)

水 A - Pasha and Stick #include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e5 + 5; const int INF = 0x3f3f3f3f; int main(void) { int n; scanf ("%d", &n); int ans = n / 4; if (n % 4 == 0) { ans--; } if (n %

codefoeces 610 C

H - Harmony Analysis 给你一个k 求一个由 * +  组成的 2^k *2^k  的矩阵 条件是  任意两行  对应项乘积的和 为0  + 为 +1   * 为-1 + ++ +* ++++ +*+* ++** +**+ 右上角 = 左下角 = 左上角    右下角 =左上角取反 #include<stdio.h> #include<algorithm> #include<string.h> #include<math.h> #inclu

Codeforces 453B Little Pony and Harmony Chest(状压)

题目链接:Codeforces 453B Little Pony and Harmony Chest 题目大意:给定一个序列a, 求一序列b,要求∑|ai?bi|最小.并且b中任意两数的最大公约束为1. 解题思路:因为b中不可能含有相同的因子,所以每个素数只能使用1次.又因为说ai最大为30,所以素数只需要考虑到57即可.因为即使对于30而言,59和1的代价是一样的. 所以有dp[i][j]表示的是到第i个数,使用过的素数j. #include <cstdio> #include <cs

Codeforces Round #259 (Div. 2)-D. Little Pony and Harmony Chest

题目范围给的很小,所以有状压的方向. 我们是构造出一个数列,且数列中每两个数的最大公约数为1; 给的A[I]<=30,这是一个突破点. 可以发现B[I]中的数不会很大,要不然就不满足,所以B[I]<=60左右.构造DP方程DP[I][J]=MIN(DP[I][J],DP[I][J^C[K]]+abs(a[i]-k)); K为我们假设把这个数填进数组中的数.同时开相同空间记录位置,方便输出结果.. #include<iostream> #include<stdio.h>

codeforces 453 B Little Pony and Harmony Chest (状压dp)

题目大意: 需要你构造一个b数组.使得b数组中的所有元素互质. 而且使得b数组与a数组中的每个对应下标元素的差值和最小. 思路分析: 考虑到 a中所有元素都是 0 - 30. 所以b中的元素也只可能在 0 - 59. 因为如果b 选择60的话,结果和1是一样的,而且b序列中 1 可以重复出现很多次. 因为gcd (1,x) = 1.. 所以们首先把2 - 59中的所有素数处理出来,只有17个. 然后状压这些素数因子. dp[i] [s] [0] 表示 递推到第 i 个位置 达到素数因子为s的状态

Codeforces 453B Little Pony and Harmony Chest 状压dp

题目链接:点击打开链接 b的数字最多只能达到59,因为选>=60 不如选1 所以状压一下前面出现过的素数即可,在59内的素数很少 然后暴力转移.. #include <cstdio> #include <cstring> #include <algorithm> #include <vector> #include <string.h> const int Inf = (int)(1e9); const int S = 1 <<