Processing math: 100%
随笔 - 55  文章 - 0  评论 - 12  阅读 - 62114

[CSP-S2019]格雷码 题解

CSP-S2 2019 D1T1

考场上第一遍读题的时候感觉不是很一眼……不是很符合D1T1的气质

之前完全没听说过格雷码是什么玩意,还是我太菜了

仔细读题后发现应该是有规律可循的

赛后据说有O(1)算法,反正我不会


思路分析

写出一些小位数的格雷码全排列,再根据格雷码的生成算法,可以有以下算法:

1. 对于x位第k个格雷码,若k2x1,则显然该格雷码是由x1位的第2x1(k2x1+1)=2xk1个格雷码前面加上一个1得来的;否则,该格雷码是由x1位的第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;
}
复制代码
posted on   TEoS  阅读(695)  评论(0编辑  收藏  举报
编辑推荐:
· .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
< 2025年1月 >
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8

点击右上角即可分享
微信分享提示