#P1506. 2023.08.27-秋招第二场-第3题-奇数偶数位
          
                        
                                    
                      
        
              2023.08.27-秋招第二场-第3题-奇数偶数位
Related
In following contests:
由于求的是所有长度为n的数字的权值和。所以我们可以发现:对于任意一个偶数状态,它会和所有奇数匹配组成一个数字,然后相乘求和。所以结论是分别计算奇数位和偶数位的和乘起来即可
举个例子,假设n=3 , 那么假设偶数位为:1 3 . 那么奇数位可以是0,1,...,9 , 分别会组成103,113,123,133,143,153,...,193
他们的和就是:(1+3)∗(所有奇数位的和)
对于任意偶数位,它都满足上面这种答案,所以答案就是所有偶数位的和∗所有奇数位的和
接着我们发现,在单独计算奇数位置或偶数位置的答案时,每一种数字在每一位都会出现10n−1次(这里的n指的是奇/偶位数的总长度)
所以总贡献是(1+2+...+9)∗10n−1∗n
最后注意,n比较大,记得上快速幂来求解10n−1 , 不然复杂度不够.
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int mod = 1e9+7;
int n;
ll cal(ll b)
{
    ll a = 10;
    ll res = 45 * b % mod; // 45 = 1 + 2 + 3 + ... + 9
    b--;
    while(b) // 快速幂
    {
        if(b&1) res = res * a % mod;
        a = a * a % mod;
        b >>= 1;
    }
    return res;
}
int main() 
{
    cin>>n;
    cout << cal(n/2) * cal((n + 1)/2) % mod;
    
}
mod = int(1e9 + 7)
def cal(b):
    a = 10
    res = (45 * b) % mod  # 45 = 1 + 2 + 3 + ... + 9
    b -= 1
    while b: # 快速幂
        if b & 1:
            res = (res * a) % mod
        a = (a * a) % mod
        b >>= 1
    return res
n = int(input())
print(cal(n // 2) * cal((n + 1) // 2) % mod)
import java.util.Scanner;
public class Main {
    static long mod = (int) (1e9+7);
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int mod = (int) 1e9 + 7;
        int res = (int) (qmi(10, n/2 - 1) * qmi(10,(n+1)/2-1) % mod);
        System.out.println(res);
        scan.close();
    }
    private static long qmi(long a, long b) {
        long res= 45L *(b+1)%mod;
        while(b>0) // 快速幂
        {
            if((b&1)==1) res = res * a % mod;
            a = a * a % mod;
            b >>= 1;
        }
        return res;
    }
}
        给定一个只含数字的字符串, 例如1233 , 其奇数位的数位和为:1+3=4 , 偶数位的数位和位2+3=5 (奇数位指下标是奇数的位置,偶数位指下标是偶数的位置,下标从1开始。)
奇偶权值f(s)为:奇数位的和乘以偶数位的和。 f(1233)=4∗5=20
请计算所有长度为n的数字串(可以有前导零)的奇偶权值的和是多少?
一行正整数n≤1e9
输出一个非负整数,表示权值和。
答案可能太大,请对109+7取模后再输出。
输入
2
输出
2025
输入
3
输出
40500
            In following contests: