[蓝桥杯 2022 省 B] X 进制减法(贪心)

 

题目传送门 

 该题首先关键的一点是理解题意

即理解:X进制数321为什么等于十进制数65???(其中3的进制为八进制,2的进制为十进制,1的进制为2进制)

类比正常的进制数计算我们可以得到

65=3*8*2+2*2+1

明白了这一点其实就不难想到如何使得A-B最小

我们只需要在保证进制合法的情况下使得所有进制最小即可

据此就可以写出代码了

#include<iostream>
#include<algorithm>
#define MAX 100005
//#define int long long
using namespace std;

const int inf=1e9+7;

int n,ma,mb,k;
int a[MAX];
int b[MAX];
int base[MAX];

signed main(){
	cin>>n;
	cin>>ma;
	for(int i=ma;i>=1;i--){
		cin>>a[i];
	}
	cin>>mb;
	for(int j=mb;j>=1;j--){
		cin>>b[j];
	}
	k=max(ma,mb);
	for(int i=1;i<=k;i++){
		base[i]=max(2,max(a[i],b[i])+1);
	}
	long long A=0,B=0;//注意要long long 
	for(int i=ma;i>=1;i--){
		A=(A*base[i]+a[i])%inf;//注意取模 
	}
	for(int i=mb;i>=1;i--){
		B=(B*base[i]+b[i])%inf;
	}
	long long ans=(A-B+inf)%inf;//因为可能出现负数所以先+inf 
	cout<<ans<<endl;
	return 0;
} 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
n进制减法是指在n进制系统中进行减法运算。Python提供了对于n进制数的支持,可以通过将n进制数转化为十进制数来进行减法运算,最后将结果转化为n进制数表示。 首先,需要将n进制数转化为十进制数。假设要进行n进制数a减去n进制数b的运算,可以按照以下步骤进行: 1. 将n进制数a和b转化为对应的十进制数,可以使用int函数将字符串形式的n进制数转化为十进制数,指定进制基数为n。 a_decimal = int(a, n) b_decimal = int(b, n) 2. 进行十进制数的减法运算。 result_decimal = a_decimal - b_decimal 3. 将计算得到的十进制数转化为n进制数。可以使用内置bin(), oct(), hex()函数将十进制数转化为对应的二进制、八进制、十六进制字符串,可以使用自定义函数将十进制数转化为其他进制的字符串。 result_n = convert_to_n(result_decimal, n) # convert_to_n为自定义函数,将十进制数转化为n进制数 最后得到的result_n即为n进制减法运算的结果。 需要注意的是,对于n进制数的减法运算,需要确保被减数大于减数,否则结果可能会出现负数或不符合预期的情况。另外,在转化为十进制数进行减法运算时,需要确保n进制数的合法性,也就是各位数字都在0到n-1之间的范围内。 以上是利用Python进行n进制减法运算的基本步骤。在实际应用中,可以根据具体需求进行进一步优化或封装。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZZZWWWFFF_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值