首页 > 其他分享 >GYM103743H Super Gray Pony - 思维 -

GYM103743H Super Gray Pony - 思维 -

时间:2023-05-07 20:45:13浏览次数:57  
标签:Gray .. 格雷 int maxn 如果 oplus GYM103743H Super

题目链接:https://codeforces.com/gym/103743/problem/H

这应该是近期做出来的最难的题之一了……想了一个多小时
首先,如何由 \(S\) 求得 $a^{(n)}(S) $ ?
考虑 \(S\) 的每一位 0/1
如果第一位是 1,那么相当于就知道了剩下的数字在 \(rev(a^{(n-1)})\) (即在右侧)中,此时如果第二位为 0,由于 \(a^{(n-1)}\) 是反过来的,因此相当于是在 \(rev\) 的左侧,即 \(a^{(n-1)}\) 的右侧,因此对应的格雷码是 1.
找规律可以发现:对于一个 01 串,求格雷码的方法就是,如果出现一个 1,那么 标记为 1,继续接下来,如果是 0 记 1,否则记 0(如果标记为 0 的话就不变了),如果当前记的是 1,那么标记反转,以此类推
我们发现这本质上就是异或,如果 \(s_i\) 的格雷码是 \(t_i\),那么根据上面的算法我们就可以得到 \(t_i=(t_1\oplus .. \oplus t_{i-1}) \oplus s_i\),同理写出 \(t_{i-1}=(t_1\oplus .. \oplus t_{i-2}) \oplus s_{i-1}\),两式异或得 \(t_i=s_i\oplus s_{i-1}\)
考虑多次重复这个过程,考虑 \(t_i\) 的格雷码 \(p_i\),那么同理有 \(p_i=t_i\oplus t_{i-1}=s_i\oplus s_{i-2}\)
因此,我们得到算 \(k\) 阶格雷码的方法:\(a^{(k)}_i=s_i\oplus s_{i-k}\)
这里出现了一个问题:\(a^{(k)}\) 的 \(1..k\) 项没了,通过打表/数学归纳法可以得到当 \(k\) 是 2 的幂次时,前面的 \(k\) 项是不变的
因此我们可以将 \(k\) 拆成 2 的幂次之和,然后用我们的做法求出 \(k\) 阶格雷码
代码相当好写

#include <bits/stdc++.h>
#define mpr make_pair

typedef long long ll;

using namespace std;

const int inf = 1e9, maxn = 3e6 + 5;

int n,k;
char s[maxn];
int a[maxn];

signed main(){
    scanf("%d%d",&n,&k);
    scanf("%s",s + 1);
    for(int i=1;i<=n;i++)a[i] = s[i] - '0';

    for(int i=0;i<=30;i++)
        if(k & (1 << i)){
            int qw = (1 << i);
            for(int j=n;j>=qw+1;j--)
                a[j] ^= a[j-qw];
        }
    for(int i=1;i<=n;i++)
        printf("%d",a[i]);
    puts("");

    return 0;
}

标签:Gray,..,格雷,int,maxn,如果,oplus,GYM103743H,Super
From: https://www.cnblogs.com/SkyRainWind/p/17380101.html

相关文章

  • Linux 系统进程守护工具 cesi + superviosr
    一、安装Supervisorpipinstallsupervisor使用echo_supervisord_conf命令生成默认配置文件echo_supervisord_conf>/etc/supervisord.conf配置文件说明位置:etc/supervisord.conf内容:#指定了socketfile的位置[unix_http_server]file=/tmp/supervisor.sock;UNIXsock......
  • 使用gunicorn和supervisor部署flask项目
    我们自己编写的发布系统基于Python3.6开发,项目存放在自建gitlab上,地址为ssh://gitlab.xxxx/xxx/xxx.git这里先简单说下gitlab的3中发布方式:HTTP协议是最常用的方式,因为它简单易用,拉取只需要输入账号密码,但相对较慢且安全性较低。SSH协议则更加安全和方便,拉取代码速度更快,适合在......
  • supervisor 进程管理工具使用详解
    简介supervisor是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具。可以很方便的监听、启动、停止、重启一个或多个进程。用supervisor管理的进程,当一个进程意外被杀死,supervisor监听到进程死后,会自动将它重启,很方便的做到进程自动恢复的功能,不再需要自......
  • Learning A Single Network for Scale-Arbitrary Super-Resolution
    LearningASingleNetworkforScale-ArbitrarySuper-Resolutionabstract现有的singleimageSR网络是为具有特定整数比例因子(例如,×2/3/4)的图像开发的,无法处理非整数和非对称SR。在本文中,作者建议从特定比例的网络中学习任意比例的图像SR网络。introduction由于上采样......
  • 为啥this和super关键字在构造方法中只能写在第一行
    首先对于super:super关键字会在子类的构造方法中使用,用来对父类属性进行初始化,而super必须放在第一行,因为子类有可能使用父类属性,就必须在使用之前先对父类属性完成初始化。对于this关键字: 如上代码:this关键字必须写在构造方法的第一行,因为如果在this关键字之前的代码用到了C0......
  • windows supervisord 开机自启
    1.新建任务计划2.建好以后3.ok......
  • unix:///var/run/supervisor/supervisor.sock no such file
    问题unix:///var/run/supervisor/supervisor.socknosuchfile原因使用过程中可能是因为机器宕机,supervisor没有正常关掉,导致/var/run目录下supervisor.sock文件被删除,找不到所以失败报错unix:///var/run/supervisor/supervisor.socknosuchfile解决#创建supervisor.sock......
  • 关于java中的super
    首当其冲先说一下super的用途和含义。他是用于调用一些被重写的方法。这里还可以复习一下子这个重写:重写是把新的方法放在被重写的方法前面。在被重写的子类中,优先调用重写后的方法。但是如果想要调用原本未被重写的方法的话,就需要super了。如上的代码中ChildClass为FatherClass......
  • 迁移学习(VMT)《Virtual Mixup Training for Unsupervised Domain Adaptation》
    论文信息论文标题:VirtualMixupTrainingforUnsupervisedDomainAdaptation论文作者:TakeruMiyato,S.Maeda,MasanoriKoyama,S.Ishii论文来源:2019CVPR论文地址:download 论文代码:download视屏讲解:click   ......
  • D. Super-Permutation
    D.Super-PermutationApermutationisasequence$n$integers,whereeachintegerfrom$1$to$n$appearsexactlyonce.Forexample,$[1]$,$[3,5,2,1,4]$,$[1,3,2]$arepermutations,while$[2,3,2]$,$[4,3,1]$,$[0]$arenot.Givenapermutation$a$,wec......