[CSP-S2019]格雷码 题解
CSP-S2 2019 D1T1
考场上第一遍读题的时候感觉不是很一眼……不是很符合D1T1的气质
之前完全没听说过格雷码是什么玩意,还是我太菜了
仔细读题后发现应该是有规律可循的
赛后据说有O(1)算法,反正我不会
思路分析
写出一些小位数的格雷码全排列,再根据格雷码的生成算法,可以有以下算法:
1. 对于x位第k个格雷码,若k≥2x−1,则显然该格雷码是由x−1位的第2x−1−(k−2x−1+1)=2x−k−1个格雷码前面加上一个1得来的;否则,该格雷码是由x−1位的第k个格雷码前面加上一个0得来的
1. 重复步骤1,直到x=0。
具体实现
模拟即可,可以边模拟边输出。
看一眼数据范围,特地提示了5分的unsigned long long。。。所以记得开
求幂的时候也要注意精度问题,可以使用快速幂
#include<iostream> #include<cstdio> #define ull unsigned long long using namespace std; int n; ull k; ull fastpow(ull a,ull b) { ull ans=1; while(b) { if(b&1) ans*=a; b>>=1; a*=a; } return ans; } int main() { scanf("%d",&n);cin>>k; for(int i=n-1;i>=0;i--) { ull now=fastpow(2,i); if(k<now) printf("0"); else printf("1"),k=2*now-k-1; } return 0; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· .NET Core GC压缩(compact_phase)底层原理浅谈
· Winform-耗时操作导致界面渲染滞后
· Phi小模型开发教程:C#使用本地模型Phi视觉模型分析图像,实现图片分类、搜索等功能
· 语音处理 开源项目 EchoSharp