10分到30分再到100
查看原帖
10分到30分再到100
782719
lstbubailan楼主2024/4/7 22:18

AC代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1010;
int mod = 1e9 + 7;
const int M = 1e5 + 3;
ll a[M],b[M],d[M],counts[M];
ll suma = 0,sumb = 0;
int main()
{
    int n;
    cin>>n;
    int placeA,placeB;
    cin>>placeA;
    
    for(int i = placeA; i >= 1; i --)
        cin>>a[i];
        
    cin>>placeB;
    
    for(int i = placeB; i >= 1; i --)
        cin>>b[i];
        
    int k = max(placeB,placeA);


    for(int i = 1; i <= k; i ++){
        //求进制
        d[i] = max((ll)2,1 + max(a[i],b[i]));
    }
    
    
    counts[1] = 1;
        
    for(int i = 2; i <= k; i ++)
        counts[i] =  (counts[i - 1] * d[i - 1]) % mod;

        
    for(int i = 1;i <= placeA;i ++)
        suma = (suma + a[i] * counts[i] ) % mod;
    for(int i = 1;i <= placeB;i ++)
        sumb = (sumb + b[i] * counts[i] ) % mod;

    cout<<(suma - sumb + mod)%mod<<endl;   
    


}

主要错误是

  1. 当进制位数没有一样的时候出错 这个解决了之后30 分 样例 11 4 10 4 0 1 3 1 2 0 结果应该是315 要是没有对其的话我的是189 2)我的counts 数组 没有对mod取余 可能溢出了 加了一个%mod 之后就100了
2024/4/7 22:18
加载中...