蓝桥杯2022年第十三届省赛真题-X进制减法(超详细解析)

2023-05-16

转自作者弗莱

详细解析和分享经验

进制规定了数字在数位上逢几进一。

X 进制是一种很神奇的进制,因为其每一数位的进制并不固定!例如说某种 X 进制数,最低数位为二进制,第二数位为十进制,第三数位为八进制,则 X 进制数 321 转换为十进制数为 65。

现在有两个 X 进制表示的整数 A 和 B,但是其具体每一数位的进制还不确定,只知道 A 和 B 是同一进制规则,且每一数位最高为 N 进制,最低为二进制。请你算出 A − B 的结果最小可能是多少。

请注意,你需要保证 A 和 B 在 X 进制下都是合法的,即每一数位上的数字要小于其进制。

输入格式

第一行一个正整数 N,含义如题面所述。

第二行一个正整数 Ma,表示 X 进制数 A 的位数。

第三行 Ma 个用空格分开的整数,表示 X 进制数 A 按从高位到低位顺序各个数位上的数字在十进制下的表示。

第四行一个正整数 Mb,表示 X 进制数 B 的位数。

第五行 Mb 个用空格分开的整数,表示 X 进制数 B 按从高位到低位顺序各个数位上的数字在十进制下的表示。

请注意,输入中的所有数字都是十进制的。

输出格式

输出一行一个整数,表示 X 进制数 A − B 的结果的最小可能值转换为十进制后再模 1000000007 的结果。

样例输入

11

3

10 4 0

3

1 2 0

样例输出

94

提示

当进制为:最低位 2 进制,第二数位 5 进制,第三数位 11 进制时,减法得到的差最小。此时 A 在十进制下是 108,B 在十进制下是 14,差值是 94。

对于 30% 的数据,N ≤ 10; Ma, Mb ≤ 8. 对于 100% 的数据,2 ≤ N ≤ 1000; 1 ≤ Ma, Mb ≤ 100000; A ≥ B.

//1:如何是使得差值最小呢,我们可以利用dp的思想,要使得整体最小,那么组成他的各个部分也是最小,那么问题就变成了,如何使得各个部分的值最小;
//   2:每个部分有对应位上的差值组成,那么,要使得这个差值乘的进制数尽可能小就可以了;
//   3:如何使得进制尽可能小呢,进制的区间在2~N之间,那么只需要在这个区间之内,选取能包含a[i]和b[i]两个值的最小进制值就ok了,至此,思路就出来了
 
//如 1           3          2
//第三数位  第二数位    最低数位
#include<stdio.h>
int a[100005]={0};//转码可能数据很大
int b[100005]={0};
int mod=1000000007;
int max(int a,int b)
{
    return (a>b?a:b);
}
 
int main()
{
    int Ma,Mb,N,i;//其实N是有用的,只是测试数据没有非法数据,完整的话还要加判断输入是否非法才行的
    scanf("%d%d",&N,&Ma);
    for(i=Ma;i>=1;i--)
    //倒序打印是因为开头输入最高位数,数组下标和位数匹配好理解,至于1也是,舍去了0下标
    {
        scanf("%d",&a[i]);
        //又开始不写&
    }
     scanf("%d",&Mb);
        for(i=Mb;i>=1;i--)
        {
            scanf("%d",&b[i]);
        }
        int jz[100005]={0};
        for(i=Ma;i>=1;i--)
    {
        jz[i]=max(max(a[i]+1,b[i]+1),2);//选取最小进制
        //选取其中最大的进制是因为A与B同进制,要保证进制合法
        //因此两者数据间只有选最大的那个数据才能保证两者相同
   //比如 6与8,我们只有选择8的进制我们才能同步两者的进制.
   //是在保证进制合法的情况下选择最小的进制
 
        //而题目意思中的十进制输入只是我们认为输入的数据,但是题设中的意思是我们实际上不知道它是什么进制
        //而为了所求相减最小,我们就选最小的进制,也就是保证两者相同时选择最小的进制,也就是加1.
        //加1是因为如果仅仅赋值输入的数据不可能的,注意有进位这个东西,不加1数据早就进位了
//如我们看到的9这个数字,那么它最小的进制只可能是10,如果是9进制,是会直接进位的,
//这样我们是看不见这个数字9的,看见的是进位后的结果
    }    
    long long sum=0;//数据大用长字符
     for(i=Ma;i>=2;i--)
     {//   A-B=对应数位相减+转换进制
     
//         sum+=((sum+a[i]-b[i])*jz[i-1])%mod;


       sum=((sum+a[i]-b[i])*jz[i-1])%mod;
       //意思是将最高位的数据一直往低位转换,往上进就除自身的进制,往下进就乘低一位的进制
       //这样就体现出每一次选取合法的最小进制的作用了。
       //只要每一次的进制都是合法最小的,那乘的数也就是最小的,
       //最后结果也一定是最小的。

       //i到2截至是因为最低进位时已经将数据转为最小的进制,直接相加即可,单独讨论。
       //sum也要放进去参与进位是因为首先是循环,上一次的sum的数据也在这次的循环中,而上一次sum的数据当然也要一同参与进位
        //取模是防数据溢出,题设要求
      //(+=)不等于(=),如1被赋值为3,和1加上3是不同的!
      
      //其实也可以是直接A的结果转为最低位进制,然后B也转为最低进制
      //最后相减即可。注意转换的时候都要取模,防止溢出
      //理论上也是可以的.
      //这里只不过是用了迭代,一层层相减转进制.
        
     }
        sum+=(a[1]-b[1]);//最低位时直接加起来结果.
        sum%=mod;//防止溢出
        printf("%lld\n",sum);
        
        return 0;
        
        
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

蓝桥杯2022年第十三届省赛真题-X进制减法(超详细解析) 的相关文章

随机推荐

  • #移动开发者大会#总结

    移动开发者大会 总结 xff08 有限的发言者 xff09 xff1a 李开复 xff1a 1 Android将在中国一骑绝尘 今年底中国将有4000万台Android手机 xff0c 2000万台iPhone 明年底总数会翻一倍 xff0
  • 2011河北金融学院CSDN高校俱乐部动员大会

    2011年11月24日下午二点 xff0c 我校CSDN高校俱乐部动员大会在教学楼B123举行 该次大会主要针对大一学生召开 xff0c 号召大家了解并加入CSDN高校俱乐部 俱乐部指导老师王洪涛老师 计算机协会指导老师杜光辉老师 以及优秀
  • “激情与梦想 我的程序员之路”—2012高校巡讲

    2012年3月29日下午2点半 xff0c CSDN高校俱乐部项目主管潘永强老师在我校进行了一场以 激情与梦想 xff0c 我的程序员之路 为主题的演讲 信息管理与工程系团总支书记陈春燕 指导老师王洪涛以及杜光辉 刘冲等7位老师出席了该次讲
  • Linux基础.交叉编译工具链,makefile

    一 交叉工具链大纲 1 什么是交叉工具链 xff1f 什么是交叉编译 xff1f 2 安装交叉工具链方法 xff0c 结合环境变量PATH xff0c 工具链选项 3 Makefile使用 xff0c Makefile书写规则 4 嵌入式静
  • 基于TensorFlow2.3.0的花卉识别Android APP设计

    一 前言 本设计为基于TensorFlow2 3 0的花卉识别Android APP TensorFlow2 3 0的API简单易用 xff0c 训练好后模型导出tflite格式供Anroid APP使用 开发环境 xff1a Window
  • Docker部署 nodejs项目应用 一 : 安装docker

    尝试一下用docker容器 xff0c 那么首先要安装docker 一 安装docker 由于笔者服务器的系统是centos7 xff0c 所以这里写的是在centos7上安装docker xff1b 注 xff1a Docker 要求 C
  • Java 反射 -超详细讲解(附源码)

    学到spring框架的时候 xff0c 发现反射思想很重要 xff0c 故特此写下此文 xff0c 以加深理解 文章目录 1 xff1a 反射概述2 xff1a Class对象特点3 xff1a 反射的使用1 获取类对象2 利用反射机制创建
  • 推荐7款好用的终端工具

    点击上方 IT牧场 xff0c 选择 置顶或者星标 技术干货每日送达 1 Cmder 下载地址 xff1a https cmder net Cmder是一个代替cmd的终端工具 只能操作Windows 它的好处是 xff1a 支持大部分Li
  • STM32 FMC原理详解

    关于FSMC的基本原理已经在这两篇讲解了 xff0c 如果有不懂的建议先看一下 xff0c 这里我们对一些基本概念会说的少一些 xff0c 主要就是针对FMC的特点和FSMC跟FMC的区别做主要的阐述 区别不大 STM32 FSMC FMC
  • 【机器学习】Scikit-learn介绍

    一 Scikit learn简介 Scikit learn是一个支持有监督和无监督学习的开源机器学习库 它还为模型拟合 数据预处理 模型选择和评估以及许多其他实用程序提供了各种工具 二 拟合和预测 xff1a 估算器基础 Fitting a
  • 我的2011--快乐最重要

    呵呵 xff0c 听着郭德纲和于谦老师的相声 xff0c 开始写这篇文章 xff0c 刚毕业不到六个月 xff0c 就换了一份工作 xff0c 很多事情都在意料之外 xff0c 很多事情又在意料之中 xff0c 总之 xff0c 以后回忆到
  • 朱金灿:韧性、悟性、具备快速学习能力是我喜欢的特质

    英雄会是CSDN旗下针对国内IT技术领域专家展示和交流的平台 通过线下线上的互动形式 xff0c 为CSDN社区专家提供更多学习 合作 宣传的机会 英雄会后续将在北上广深等国内一二线城市建立分会 xff0c 各个分会后期将组织技术交流活动
  • 远程连接工具Wind_Term打开远程Linux服务器图形化界面

    我们知道想要在Windows打开Linux图形化程序 xff0c 一个耳熟能详的工具MobaXterm是可以做到的 xff0c 但是不是唯一的工具 xff0c 具有支持X11 转发的工具都是可以实现的 xff0c Wind Term就是这么
  • Error: Failed to load parser ‘babel-eslint‘ declared in

    解决办法 xff1a 使用手动安装 babel eslint npm i D babel eslint
  • 理解依赖注入DI和控制反转IOC和容器

    简介 依赖注入 Dependency Injection 简称 DI xff0c 目的是让代码耦合度降低 xff0c 模块化程度高 xff0c 让代码更易测试 什么是依赖 为什么会有依赖 xff1f 因为我们为了模块化 xff0c 把各种小
  • React生命周期及事件详解

    一 组件的详细说明和生命周期ComponentSpecs and Lifecycle 组件的详细说明 xff08 Component Specifications xff09 当通过调用 React createClass 来创建组件的时候
  • Eclipse代码提示功能失效

    Eclipse 代码提示功能失效问题解决 Windows gt preferences gt java gt Editor gt Code Assist中Auto Activetion中的Enable auto activetion选项要勾
  • VM-tools选项为灰色无法安装的问题

    安装虚拟机VMware时 xff0c 桌面上没有vmware tools的安装光盘 虚拟机 gt 重新安装vmware tools选项为灰色 xff0c 也无法选择 尝试了将CD DVD SATA 的使用ISO映像文件改为物理驱动器 自动检
  • 数据库学习 - like(模糊查询)

    模糊查询问题 比如查询姓张的同学 xff0c 查询张某某等这类型问题 xff0c 在 select语句中通过查询条件中加入运算符 like 来表示 xff1b 含有 like运算符的表达式 列名 not like 字符串 xff08 表示其
  • 蓝桥杯2022年第十三届省赛真题-X进制减法(超详细解析)

    转自作者弗莱 详细解析和分享经验 进制规定了数字在数位上逢几进一 X 进制是一种很神奇的进制 xff0c 因为其每一数位的进制并不固定 xff01 例如说某种 X 进制数 xff0c 最低数位为二进制 xff0c 第二数位为十进制 xff0