2021.12.15 P2328 [SCOI2005]超级格雷码(找规律填空)
2021.12.15 P2328 [SCOI2005]超级格雷码(找规律填空)
https://www.luogu.com.cn/problem/P2328
题意:
输出n位B进制的格雷码。
分析:
好吧,咱先写出来一部分格雷码试试。
当 \(n=2,B=2\) 时(这个表咱竖着看)
| 00 | 10 | 
|---|---|
| 01 | 11 | 
似乎没有什么规律,咱继续,当\(n=3,B=3\) 时(这个表咱竖着看)
| 000 | 122 | 200 | 
|---|---|---|
| 001 | 121 | 201 | 
| 002 | 120 | 202 | 
| 012 | 110 | 212 | 
| 011 | 111 | 211 | 
| 010 | 112 | 210 | 
| 020 | 102 | 220 | 
| 021 | 101 | 221 | 
| 022 | 100 | 222 | 
似乎发现点规律:
1.去掉重复的数字,总是一个固定的数字循环在不断重复:
\]
2.从右往左数第 \(i\) 列数字在同一循环节里出现的次数为 \(B^{i-1}\) ;
3.这可以用除法以及取模哟~
咱继续实验,当 \(n=2,B=3\) 时:
| 00 | 01 | 02 | 12 | 11 | 10 | 20 | 21 | 22 | 
|---|
这一行咱横着看,是不是依旧符合那个规律?
对于第 \(i\) 个出现的格雷码,对于它的第 \(j\) 位上数字编号(不是字母,咱多个函数转一下字符就行):
1.计算它是属于第几个出现的字符,这里咱先除去每个循环节重复的字符数,找到它是第几个不重复的字符
\]
2.计算它在每个循环节中的位置,每个循环节长度为 \(2*B\)
\]
代码如下:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<bitset>
#define IOS ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
int n,B,num[100],len[100];
inline int ksm(int x,int y){
	int fin=1;
	while(y){
		if(y&1)fin*=x;
		x*=x;
		y>>=1;
	}
	return fin;
}
inline char id(int x){
	if(x>=0&&x<=9)return (char)(x+'0');
	else return (char)(x-10+'A');
}
int main(){
	IOS;
	cin>>n>>B;
	for(int i=0;i<B;i++)num[i+1]=num[2*B-i]=i;
	//for(int i=1;i<=2*B;i++)cout<<num[i]<<" ";cout<<endl;
	int m=ksm(B,n);
	//for(int i=0;i<=35;i++)cout<<id(i)<<" ";cout<<endl;
	for(int i=n-1;i>=0;i--)len[i+1]=ksm(B,i);
	//for(int i=1;i<=n;i++)cout<<len[i]<<" ";cout<<endl;
	for(int i=1;i<=m;i++){
		for(int j=n;j>=1;j--){
			int x=i%len[j]?i/len[j]+1:i/len[j];
			x%=2*B;
			cout<<id(num[x]);
		}
		cout<<endl;
	}
	return 0;
}
2021.12.15 P2328 [SCOI2005]超级格雷码(找规律填空)的更多相关文章
- P2328 [SCOI2005]超级格雷码
		P2328 [SCOI2005]超级格雷码 暴力出奇迹喵! 这是一道模拟题 你会发现和 P5657 格雷码[民间数据]有异曲同工之妙,这道题直接按照上边链接题目的操作步骤 暴力模拟 就可以啊 我们观察 ... 
- bzoj1081: [SCOI2005]超级格雷码(dfs)
		1081: [SCOI2005]超级格雷码 题目:传送门 题解: 又是一道水题... 因为之前做过所以知道规律: 如n=2 B=3: 00 10 20 21 11 01 02 12 22 ... 
- 1081: [SCOI2005]超级格雷码
		1081: [SCOI2005]超级格雷码 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 301 Solved: 159[Submit][Statu ... 
- 【BZOJ1081】[SCOI2005]超级格雷码(搜索)
		[BZOJ1081][SCOI2005]超级格雷码(搜索) 题面 BZOJ 洛谷 题解 找个规律吧,自己随便手玩一下,就按照正常的顺序枚举一下,发现分奇偶位考虑正序还是逆序就好了. #include& ... 
- BZOJ1081[SCOI2005]超级格雷码
		Description 著名的格雷码是指2n个不同n位二进制数(即0~2n-1,不足n位在前补零)的一个排列,这个排列满足相邻的两个二进制数的n位数字中最多只有一个数字不同(例如003和001就有一个 ... 
- [BZOJ 1081] [SCOI2005] 超级格雷码 【找规律】
		题目链接:BZOJ - 1081 备注:此题BZOJ上貌似没有 spj ,要把一般顺序的每个格雷码倒着输出...比如 0102 输出为 2010 题目分析 就是按照 Gray 码的生成方法写前几个出来 ... 
- [SCOI2005]超级格雷码
		题目 BZOJ 洛谷 做法 爆搜真有意思 满足不重复且异或后仅一位为\(1\) 利用奇偶性交叉搜索(仅改变一位) My complete code #include<bits/stdc++.h& ... 
- [bzoj1081]超级格雷码
		手动模拟一组样例,可以理解大致应该如何操作具体实现中,记录每一位当前应该+1还是-1,然后操作最低的位并将后面的+1和-1全部取反即可 1 #include<bits/stdc++.h> ... 
- 格雷码原理与Verilog实现
		格雷码原理 格雷码是一个叫弗兰克*格雷的人在1953年发明的,最初用于通信.格雷码是一种循环二进制码或者叫作反射二进制码.格雷码的特点是从一个数变为相邻的一个数时,只有一个数据位发生跳变,由于这种特点 ... 
随机推荐
- sublime settings
			{ "font_face": "Monaco", // 编辑器的字体 "font_size": 13, // 字号 "highli ... 
- MVC 生成安全验证码(例:用于登陆验证)(转)
			---------html <td>验证码:</td> <td> <img src="/Login/CheckCode?ID=1" id= ... 
- R数据分析:纵向分类结局的分析-马尔可夫多态模型的理解与实操
			今天要给大家分享的统计方法是马尔可夫多态模型,思路来源是下面这篇文章: Ward DD, Wallace LMK, Rockwood K Cumulative health deficits, APO ... 
- [USACO08OPEN]牛的街区Cow Neighborhoods
			题目描述: luogu 题解: 技巧题. 曼哈顿距离:$|x1-x2|+|y1-y2|$ 切比雪夫距离:$\max(|x1-x2|,|y1-y2|)$ 曼哈顿距离转切比雪夫距离:$(x,y)-> ... 
- Mybatis配置错误:java.lang.ExceptionInInitializerError
			情况一:配置文件,无法被导出或者生效 修改前: 修改后: 究其原因,这是由于Maven的约定大于配置,导致我们写的配置文件,无法被导出或者生效的问题,解决方案: 在pom.xml文件中配置导出非res ... 
- gofs使用教程-基于golang的开源跨平台文件同步工具
			概述 gofs是基于golang开发的一款开箱即用的跨平台文件同步工具,开源地址如下:https://github.com/no-src/gofs,欢迎点个Star或者提交Issue和PR,共同进步! ... 
- 面试官:volatile关键字用过吧?说一下作用和实现吧
			volatile 可见性的本质类似于CPU的缓存一致性问题,线程内部的副本类似于告诉缓存区 面试官:volatile关键字用过吧?说一下作用和实现吧 https://blog.csdn.net/ ... 
- Elasticsearch 在部署时,对 Linux 的设置有哪些优化方法 ?
			面试官:想了解对 ES 集群的运维能力. 解答: 1.关闭缓存 swap; 2.堆内存设置为:Min(节点内存/2, 32GB); 3.设置最大文件句柄数: 4.线程池+队列大小根据业务需要做调整: ... 
- Homebrew 卸载后重新安装mysql
			1.卸载https://blog.csdn.net/liuxw1/article/details/81434005 https://jingyan.baidu.com/article/5553fa82 ... 
- 【STM32】MDK中寄存器地址名称映射分析
			对于MCU,一切底层配置,最终都是在配置寄存器 51单片机访问地址 51单片机经常会引用一个reg51.h的头文件.下面看看它是怎么把名字和寄存器联系在一起的: 1 sfr p0=0x80; 2 p0 ... 
