July 17th 模拟赛C T2 Number Solution

2023-05-16

空降题目处(外网)
点我点我点我
空降题目处(内网)
点我点我点我

Description

给出一个整数 ,你可以对 进行两种操作。
1、将x变成4x+3
2、将x变成8x+7
问,最少通过多少次操作,使得x是1000000007的倍数?

Input

一行,一个整数x(1<=x<=1000000006)。

Output

一行,表示最少的操作步数。保证答案不超过10^5。

Solution

16ms(C++)
Bfs+Hash判重.
什么?!你不会Hash?
“自行脑补”——某晗。
2ms(C++)
某晗推出的公式?
一行AC?!

Code

C++ 16ms

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;

int x,h[400000],d[400000],w[400000];

bool hash(int x);
int Bfs(int x);

int main()
{
    scanf("%d",&x);
    printf("%d",Bfs(x%1000000007));
}

bool hash(int x)
{
    int y=x%399989;
    while ((h[y]!=0)&&(h[y]!=x))
    {
        y++;
        if (y>399989)
            y=0;
    }
    if (h[y]==0)
    {
        h[y]=x;
        return true;
    }
    else
        return false;
}

int Bfs(int x)
{
    int i=0,j=1;
    long long t;
    d[1]=x;
    w[1]=0;
    while (i<j)
    {
        i++;
        t=((long long)(d[i])*4+3)%1000000007;
        if (t==0)
            return w[i]+1;
        if (hash((int)(t)))
        {
            j++;
            w[j]=w[i]+1;
            d[j]=(int)(t);
        }
        t=((long long)(d[i])*8+7)%1000000007;
        if (t==0)
            return w[i]+1;
        if (hash((int)(t)))
        {
            j++;
            w[j]=w[i]+1;
            d[j]=(int)(t);
        }
    }
}

Pascal 16ms+

uses 
    math;

var
    x:longint;
    h,d,w:array [0..400000] of int64;

function hash(x:longint):boolean;
var
    y:longint;

begin

    y:=x mod 399989;
    while (h[y]<>0) and (h[y]<>x) do
    begin
        inc(y);
        if y>399989 then
            y:=0;
    end;
    if (h[y]=0) then
    begin
        h[y]:=x;
        exit(true);
    end else
        exit(false);

end;

function Bfs(x:longint):longint;
var
    i,j:longint;
    t:int64;

begin

    i:=0;
    j:=1;
    d[1]:=x;
    w[1]:=0;
    if (hash(x)) then;
    while i<j do
    begin
        inc(i);
        t:=(d[i]*4+3) mod 1000000007;
        if t=0 then
            exit(w[i]+1);
        if (hash(t)) then
        begin
            inc(j);
            w[j]:=w[i]+1;
            d[j]:=t;
        end;
        t:=(d[i]*8+7) mod 1000000007;
        if t=0 then
            exit(w[i]+1);
        if (hash(t)) then
        begin
            inc(j);
            w[j]:=w[i]+1;
            d[j]:=t;
        end;
    end;

end;

begin

    readln(x);
    writeln(Bfs(x mod 1000000007));

end.

C++ 2ms

#include<cstdio>
using namespace std;
int x,s;
int main(){
    for(scanf("%d",&x);x!=0;x=((x<<1)|1)%1000000007)s++;    
    printf("%d",s%3==0?s/3:s/3+1);
}

Pascal 2ms

const   p=1000000007;

var     x,c:longint;

begin
        readln(x); c:=0;
        while (x<>0) or ((x=0) and (c=1)) do begin
                inc(c); x:=(x+x+1) mod p;
        end;
        x:=c div 3; dec(c,x*3);
        if c>0 then inc(x);
        writeln(x);
end.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

July 17th 模拟赛C T2 Number Solution 的相关文章

随机推荐

  • 只是因为多看了你一眼

    不得已的选择 高考 xff0c 应该是每个学生心中最难忘的一场考试了 xff0c 在过去十二年里有无数场大大小小的考试 xff0c 无论你过去是多么的优秀 xff0c 还是多么的差劲 xff0c 只要这一次你 xff0c 赢了就是赢了 xf
  • Cmake之CMakeLists.txt

    我们知道makefile是在Linux编译c或者c 43 43 代码的时候的一种脚本文件 xff0c 但是每一个功能都要写一个makefile文件 xff0c 这样如果这个工程很大 xff0c 而且相关性比较强的话 xff0c makefi
  • 【网络排故】能ping通但是不能ssh服务器

    花了一天时间找到了问题原因 xff0c 中途找厂商售后排故无果 xff0c 自己用时间啃出来的结果 问题现象 xff1a 某日下午同事突然告诉我某服务器 xff08 Error A xff09 无法访问了 xff0c 接着是一批服务无法访问
  • 10 | apt 常用操作命令

    目录 1 linux系统1 1 RedHat系列1 2 Debian系列 2 apt 命令2 1 列出所有可更新的软件清单命令2 2 升级软件包2 3 列出可更新的软件包及版本信息2 4 升级软件包 xff0c 升级前先删除需要更新软件包2
  • linux线程调度策略

    系统中既有分时调度 xff0c 又有时间片轮转调度和先进先出调度 学习这个主要为了在linux多线程中 xff0c 解决几条指令间延时在1 2ms内 xff1b 1 比如之前处理过 xff1a 给一个板子发送一个can指令 xff0c 接着
  • Linux 平台安装 VNC

    VNC一共有三个版本 xff0c TightVNC RealVNC UltraVNC xff0c RealVNC旨在推进商业化 xff0c 因此需要License xff1b TightVNC旨在改善服务器和查看器之间的VNC压缩 xff0
  • git push origin --tags失败,提示prohibited by Gerrit

    环境 xff1a linux 43 jenkins 43 gradle 情景 xff1a gradle 编译android包的时候 xff0c 希望Push tag到remote 服务器 xff0c 每次都失败在git push origi
  • PB编程:键盘enter默认触发和界面打开默认输入

    1 键盘enter默认触发 xff1a 键盘按下enter后 xff0c 触发某个按钮 在该界面的KEY事件中 xff0c 输入代码 xff1a if keydown keyenter then cb 1 triggerevent 34 c
  • Mininet

    部分转载自 负载均衡 常用命令 link s1 h2 downlink s1 h2 up通过 switch 选项跟 controller选项可以分别指定采用哪种类型的交换机跟控制器 xff0c 例如使用用户态的交换sudo mn switc
  • 我的2014

    我是一个双鱼座的女孩 xff0c 我很喜欢幻想 没事时总是会喜欢去想象自己的未来或者近期生活的样子 进入大学后 xff0c 我发现很多东西很多事都不是想象中的那么美好 大学生活不似想象中的那么简单轻松 xff0c 想要学好自己的专业 xff
  • 开源的文本标注工具

    开源的标注工具 自然语言处理标记工具汇总 https blog csdn net wangyizhen nju article details 94559607 spacy原来有两个标注工具 xff0c displaCy ent和displ
  • 网络虚拟化协议GENEVE

    去年看到过一篇文章 1 xff0c 说是通过OpenVSwitch的测试 xff0c GENEVE的性能要略优于VXLAN 我相信大多数人的反应可能跟我的第一反应一样 xff0c 这不又是一种Overlay协议吗 xff1f 为什么性能会更
  • C++ 一个简单的判断子网掩码是否有效的函数

    简介 子网掩码 subnet mask 又叫网络掩码 地址掩码 子网络遮罩 xff0c 它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网 xff0c 以及哪些位标识的是主机的位掩码 子网掩码不能单独存在 xff0c 它必须结合IP
  • css中块元素和内联元素有什么区别?

    块级元素和内联元素 xff0c 我想接触过CSS的朋友都有所了解 xff0c 但是在实际写CSS代码时却考虑的并不多 xff0c 我们无意中就已经按照块级元素和内联元素的规则进行布局样式了 我有时在想 xff0c 为什么要区别块级元素和内联
  • 用docker启动ubuntu的桌面环境

    在win10下使用了docker之后 xff0c 已经完全抛弃了之前虚拟机的开发方式 xff0c 在学习一些计算机视觉相关的内容时 xff0c 可能需要在图形化界面进行开发和调试 xff0c 所以尝试了下在dockerhub上搜索了下支持d
  • 使用Git Extensions直接push代码到Gerrit审核

    公司使用Gerrit代码审核 xff0c 本地push代码只能提交到refs for branch xff0c 所以使用git bash进行push时 xff0c 需要使用如下命令 git push origin HEAD refs for
  • C++避免变量重复定义

    C 43 43 小白选手 求轻拍 在A cpp B cpp文件中同时包含B h 这样的话在B h中的变量就会重复定义了 解决的办法是在B h中 变量前面加上extern关键字 在B cpp文件中再定义一次
  • 使用Eclipse编译运行MapReduce程序

    下载eclipse 64位 http eclipse bluemix net packages mars 1 JAVA LINUX64 解压到安装目录 安装 Hadoop Eclipse Plugin 要在 Eclipse 上编译和运行 M
  • 内部网盘phpdisk创建记录

    PHPDISK的这次创建是在PHPWIND8 7的基础上 xff0c 一起安装的 xff0c 所以单独安装PHPDISK所需要的RPM包就不需要再安装了 将PHPDISK解压缩后 xff0c UPLOAD文件夹里面的东西 xff0c 复制到
  • July 17th 模拟赛C T2 Number Solution

    空降题目处 外网 点我点我点我 空降题目处 内网 点我点我点我 Description 给出一个整数 xff0c 你可以对 进行两种操作 1 将x变成4x 43 3 2 将x变成8x 43 7 问 xff0c 最少通过多少次操作 xff0c