0
点赞
收藏
分享

微信扫一扫

4404. X 进制减法 (进制 思维

Yaphets_巍 2022-04-14 阅读 30

添加链接描述
这题其实要完全理解进制 (原来一直对进制的理解都是错的-。-
在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
#define int long long 
const int mod=1000000007,N=1e5+9;
vector<int> arr,brr;
int mx[N];
signed main(){
    std::ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    int n;
    cin>>n;
    int ma,mb;
    cin>>ma;
    int x;
    for(int i=1;i<=ma;i++)cin>>x,arr.push_back(x);
    cin>>mb;
    for(int i=1;i<=mb;i++)cin>>x,brr.push_back(x);
    reverse(arr.begin(),arr.end());
    reverse(brr.begin(),brr.end());
    for(int i=0;i<arr.size();i++){
        mx[i]=max(mx[i],arr[i]+1);
        mx[i]=max(mx[i],2ll);
    }
    for(int i=0;i<brr.size();i++){
        mx[i]=max(mx[i],brr[i]+1);
        mx[i]=max(mx[i],2ll);
        // cout<<"---"<<mx[i]<<"\n";
    }
    int resa=0,pa=1;
    for(int i=0;i<arr.size();i++){
        // cout<<arr[i]<<"---"<<pa<<"\n";
        if(i==0)resa=(resa+arr[i])%mod;
        else resa=(resa+arr[i]*pa)%mod;
        pa=pa*mx[i]%mod;
        
    }
    int resb=0,pb=1;
    for(int i=0;i<brr.size();i++){
        if(i==0)resb=(resb+brr[i])%mod;
        else resb=(resb+brr[i]*pb)%mod;
        pb=pb*mx[i]%mod;
    }
    // cout<<<<" "<<pb<<endl;
    cout<<(resa-resb+mod)%mod<<"\n";
    return 0;   
}
// 10
// 50
// 9 7 8 1 9 0 0 3 2 8 8 3 4 1 5 7 1 3 6 8 2 8 3 5 6 7 2 1 4 7 4 4 5 0 3 8 2 0 7 3 7 8 8 7 7 7 4 6 4 9
// 30
// 4 0 7 0 0 3 1 9 2 5 3 1 9 3 9 1 4 0 3 9 0 4 1 0 7 0 3 6 9 7 
// 737602873
举报

相关推荐

0 条评论