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\ \end{array}\right]
\]

可以发现规律是除了右下角,其他三个矩阵相同,右下角每个元素去相反数。即
\[
\left[
\begin{array}{c|c}
A& A\\hline
A& -A\\end{array}
\right]
\]

可以验证当\(k=1\)时也成立。

Acepted Code

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<map>
#include<istream>
#include<cassert>
#include<set>
#define DEBUG(x) cout<<#x<<" = "<<x<<endl
#define DEBUG2(x,y) cout<<#x<<" = "<<x<<" , "<<#y<<" = "<<y<<endl
using namespace std;
typedef long long ll;
const int MAXN=600;
int power2(int n)
{
    int rt=1;
    for(int ii=1;ii<=n ;ii++ ){
        rt*=2;
    }
    return rt;
}
int grid[MAXN][MAXN];
void format(int n)
{
    if(n==1)cout<<"+";
    else cout<<"*";
}
int main()
{
//    freopen("in.txt","r",stdin);
    int k;
    cin>>k;
    grid[1][1]=1;
    for(int ii=1;ii<=k ;ii++ ){
        ///对称生长法
        int l=power2(ii-1)+1,r=power2(ii),
        delta=l-1;
        for(int row=l-delta;row<=r-delta ;row++ ){
            for(int col=l;col<=r ;col++ ){
                grid[row][col]=grid[row][col-delta];
            }
        }
        for(int row=l;row<=r ;row++ ){
            for(int col=l-delta;col<=r-delta ;col++ ){
                grid[row][col]=grid[row-delta][col];
            }
        }
        for(int row=l;row<=r ;row++ ){
            for(int col=l;col<=r ;col++ ){
                grid[row][col]=-grid[row-delta][col-delta];
            }
        }
    }
    int pw=power2(k);
    for(int ii=1;ii<=pw ;ii++ ){
        for(int jj=1;jj<=pw ;jj++ ){
            format(grid[ii][jj]);
        }
        cout<<endl;
    }
}

Wrong Answer Cases

What I Learn

给出的矩阵是\(n\times n\),然后\(n\)又是\(2\)的幂次。突破口往往在这样比较凑巧的特点上。所以题目的形式值得反复推敲

Reference

原文地址:https://www.cnblogs.com/MalcolmMeng/p/10957717.html

时间: 2024-10-26 06:47:14

codeforce610C. Harmony Analysi的相关文章

Codeforces Round #259 (Div. 2) D. Little Pony and Harmony Chest 状压DP

D. Little Pony and Harmony Chest Princess Twilight went to Celestia and Luna's old castle to research the chest from the Elements of Harmony. A sequence of positive integers bi is harmony if and only if for every two elements of the sequence their gr

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

【Harmony】概述

原文来自本人的微信公众号文章  系统工程实验室 引言 基于模型的系统工程(简称MBSE,英文全称Model based System Engineering )的实践至少需要三个维度的支撑:建模语言.建模方法论和建模工具.建模语言为模型的表述提供了统一的支撑,建模方法论为建模的行为提供了更为一致的准则,建模工具为建模的实现提供了更为自动化的支撑.今天要讨论的主题 “IBM Rational Harmony” 正是MBSE建模方法论之一. IBM Rational Harmony 架构 Harmo

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

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(

Little Pony and Harmony Chest CF4538 (状态压缩dp)

经典状态压缩dp #include <cstdio> #include <cstring> #include <cstdlib> #include <iostream> #define min(x,y) (x>y?y:x) using namespace std; int factor[30],all,n,a[105],b[105][1<<17],pre[105][1<<17],s1,s0,f[105][1<<17]

Codeforces Round #259 (Div. 1)——Little Pony and Harmony Chest

题目连接 题意: 给n个整数ai,求一个序列bi,使得b序列中任意两个数互质,而且sigma(abs(ai - bi))最小,输出任意一个b序列即可 (1?≤?n?≤?100)  (1?≤?ai?≤?30) 分析: 首先明确一点,题目没有限制b的范围....为此wa了好多次,不过可以推断出来,b肯定小于等于60 任意两个数互质,也就是说,对于新加入的一个bi,如果知道了之前所有数的质因子,那么当前数只要没有这个质因子就是一种满足的情况.而60以内的质数不到20个,所以直接状压DP即可.DP[i]