3 条题解

  • 1
    @ 2024-3-21 17:56:43
    // 11 5 2
    // 0*1 + 4*2 + 10*5*2 = 108
    
    // 1 2 0
    // 11 5 2
    // 0*1 + 2*2 + 1*5*2 = 14
    //可以观察到对于每一位数字 当前位置的权重是之前的所有数位的权重之积
    //我们只需最小化这个积 显然对于每一位只需取max(a[i], b[i]) + 1
    //简单来说就是尽可能的最小化每一位的进制
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n, m1, m2;
    const int N = 1e5 + 10, mod = 1e9 + 7;
    int a[N], b[N];
    
    int main()
    {
        cin>>n;
        cin>>m1;
        for(int i = m1 - 1; i >= 0; i --)
            cin>>a[i];
        cin>>m2;
        for(int i = m2 - 1; i >= 0; i --)
            cin>>b[i];
        int m = max(m1, m2);//因为A和B的位数不一定相同
        int res = 0;
        for(int i = m - 1; i >= 0; i --)
            res = (res * (long long)max({2, a[i] + 1, b[i] + 1}) + a[i] - b[i]) % mod;
        cout<<res<<endl;
    }
    
    • @ 2024-3-21 21:02:36

      代码块建议补上cpp标签(已帮你补上,仅仅是提个醒),写成以下形式

      ```cpp

      //代码

      ```

      效果如下

      // 代码
      

信息

ID
970
时间
1000ms
内存
256MiB
难度
5
标签
递交数
163
已通过
28
上传者