C++题目——混进制

AnAn新学会了进制的概念,但是她学艺不精,把各种进制混淆用在一个数上了,发明了混进制。例如AnAn制造了混进制数123,其中1是2进制,2是4进制,3是10进制。所以混进制数123换算成十进制是63。

现在AnAn使用混进制写出了两个数字,分别是A和B,已知A>B,且A和B是同一种混进制数,并且该混进制中的所有进制中,最高进制不超过n进制,最低进制不低于二进制。求A-B的最小可能值。

输入格式

第一行一个正整数n,最高进制不超过n进制。

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

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

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

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

输出格式

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

输入/输出例子1

输入:

11

3

10 4 0

3

1 2 0

输出:

94

样例解释

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

代码:

#include<bits/stdc++.h>
using namespace std;
int n,ma,mb,a[100005],b[100005];
const int mod=1e9+7;
int main(){
    cin>>n>>ma;
    for(int i=ma;i>=1;i--) cin>>a[i];
    cin>>mb;
    for(int i=mb;i>=1;i--) cin>>b[i];
    long long bw=1,ans=0;
    for(int i=1;i<=ma;i++){
        int now=max(a[i],b[i])+1;
        if(now<2) now=2;
        ans+=a[i]*bw-b[i]*bw;
        ans%=mod;
        bw=bw*now%mod;
    }
    cout<<ans<<endl;
    return 0;
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值