• 小米网络赛 热身赛 C题 CDMA


    Pro:
    https://ac.nowcoder.com/acm/contest/8409/C
    构造一个大小为(2^k * 2^k)的只包含(+1)(-1)的矩阵
    使得这个矩阵的任意两行做点乘的的结果为0
    (k<=10)

    Sol:
    很容易想到这个题应该会和递归有关系
    再手玩(k=1,k=2,k=4)即可猜到做法
    要构造(2^k)的解
    只需先得到$2^{(k-1)}的解
    然后重复四次并将右下角取反即可

    #include<bits/stdc++.h>
    #define N 5500
    #define db double
    #define ll long long
    #define ldb long double
    #define ull unsigned long long
    using namespace std;
    const int h=3,ki=149,mo=998244353;
    inline int inc(int x,int k){x+=k;return x<mo?x:x-mo;}
    inline int dec(int x,int k){x-=k;return x>=0?x:x+mo;}
    inline int read()
    {
    	char ch=0;int x=0,flag=1;
    	while(!isdigit(ch)){ch=getchar();if(ch=='-')flag=-1;}
    	while(isdigit(ch)){x=(x<<3)+(x<<1)+ch-'0',ch=getchar();}
    	return x*flag;
    }
    inline void write(int x)
    {
    	if(!x)return (void)putchar(48);
    	if(x<0)putchar(45),x=-x;
    	int len=0,p[20];
    	while(x)p[++len]=x%10,x/=10;
    	for(int i=len;i>=1;i--)putchar(p[i]+48);
    }
    const db eps=1e-7,inf=1e9+7,pi=acos(-1);
    inline db Read(){db x;scanf("%lf",&x);return x;}
    inline void Write(db x){printf("%lf",x);}
    int ans[N][N];
    void solve(int n)
    {
    	if(n==0){ans[1][1]=1;return;}
    	solve(n/2);
    	for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)
    	ans[i+n][j]=ans[i][j+n]=ans[i+n][j+n]=ans[i][j];
    	
    	for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)ans[i][j]=-ans[i][j];
    }
    int main()
    {
    	int n=read();
    	solve(n);
    	for(int i=1;i<=n;i++)
    	for(int j=1;j<=n;j++)
    	write(ans[i][j]),putchar((j==n)?'
    ':' ');
    	return 0;
    }
    
  • 相关阅读:
    error while loading shared libraries: libhwloc.so.5: cannot open shared object file: No such file or directory
    Mac刷新DNS,修改/etc/hosts立即生效
    zxing生成识别二维码
    电脑M2接口不是磁盘0问题
    WSL
    Ubuntu安装Docker
    Win10关闭自动更新和防护
    Mysql的5种日志
    开发常用工具Windows
    log4j2高危漏洞
  • 原文地址:https://www.cnblogs.com/Creed-qwq/p/13961468.html
Copyright © 2020-2023  润新知