【字符矩阵的模拟和递推】川师OJ上的一个题

博客内容涉及了一道编程题目,博主在川师OJ遇到理解难题,通过询问出题人并参考他人代码,理解了2^k阶矩阵的构建逻辑。AC代码主要通过递归实现,矩阵的构建包括行复制、列复制和取反操作。博主分享了理解和实现过程,便于其他遇到同样问题的小伙伴参考。
摘要由CSDN通过智能技术生成

川师OJ上的一个题
在这里插入图片描述
在这里插入图片描述
没看懂题意。去问了问出题人。出题人说,看懂样例就行。
啊啊啊啊啊 哈哈 就算是网络赛的原题一定也有很多小伙伴和我一样没看懂题意吧
我结合了一个博主的代码,加上自己的注释。

注意题意是 应该是2^k阶矩阵。(题面小错误)
AC代码

#include<iostream>
#include<cstring>
using namespace std;
const int N=(1<<11)+10;
bool re[N][N]; //用:1表示Y ; 0表示S 
void tu(int u)
{
	if(u==10) return;
	// 1<<(u-1)用来表示2的次方的值
	//1到2^(k-1)行里: 2^(k-1)+1列及其以后  直接重复 1到 2^(k-1) 列
	
	for(int j=1; j<=1<<(u-1); j++)
		for(int i=(1<<u-1)+1; i<=1<<u; i++)
			re[j][i]=re[j][i-(1<<u-1)];
	//2^(k-1)+1到2^k行: 直接重复1到2^(k-1)行	
	for(int j=(1<<u-1)+1;j<=1<<u;j++)
		for(int i=1;i<=1<<u-1;i++)
			re[j][i]=re[j-(1<<u-1)][i];
	//2^(k-1)+1到2^k行里:2^(k-1)+1列到2^k列 取非操作(即:s/y变为y/s) 
	for(int j=(1<<u-1)+1;j<=1<<u;j++)
		for(int i=(1<<u-1)+1;i<=1<<u;i++)
			re[j][i]=!re[j-(1<<u-1)][i-(1<<u-1)];
	tu(u+1);
}
int main(){
	int t;
	cin>>t;
	re[2][2]=true;
	//递归开始!! 
	tu(2);
	while(t--){
		int n;
		cin>>n;
	//	int x = 1<<n;
	//	cout<<"x: "<<x<<endl; 
		for(int i=1;i<=1<<n;i++){
			for(int j=1;j<=1<<n;j++){
				if(re[i][j]) cout<<"Y";
				else cout<<"S";	
			}	cout<<endl;	
		}
	}
	return 0; 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值