update
This commit is contained in:
		
							parent
							
								
									abf7cf6a2d
								
							
						
					
					
						commit
						81df644f5a
					
				
							
								
								
									
										5
									
								
								day2/U111091/1.myans
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								day2/U111091/1.myans
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,5 @@
 | 
			
		||||
54
 | 
			
		||||
72
 | 
			
		||||
0
 | 
			
		||||
1
 | 
			
		||||
0
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								day2/U111091/chat
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								day2/U111091/chat
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										72
									
								
								day2/U111091/chat.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								day2/U111091/chat.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,72 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <vector>
 | 
			
		||||
 | 
			
		||||
const int MOD = 1000000007;
 | 
			
		||||
 | 
			
		||||
// 快速幂计算
 | 
			
		||||
long long mod_pow(long long base, long long exp, long long mod) {
 | 
			
		||||
    long long result = 1;
 | 
			
		||||
    while (exp > 0) {
 | 
			
		||||
        if (exp % 2 == 1) {
 | 
			
		||||
            result = (result * base) % mod;
 | 
			
		||||
        }
 | 
			
		||||
        base = (base * base) % mod;
 | 
			
		||||
        exp /= 2;
 | 
			
		||||
    }
 | 
			
		||||
    return result;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 计算前缀和
 | 
			
		||||
void compute_prefix_sum(const std::vector<int>& array, std::vector<long long>& prefix) {
 | 
			
		||||
    int n = array.size();
 | 
			
		||||
    prefix[0] = 0;
 | 
			
		||||
    for (int i = 1; i <= n; ++i) {
 | 
			
		||||
        prefix[i] = (prefix[i - 1] + array[i - 1]) % MOD;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 计算所有子区间平均数之和
 | 
			
		||||
long long calculate_average_sum(int n, const std::vector<int>& array) {
 | 
			
		||||
    std::vector<long long> prefix(n + 1, 0);
 | 
			
		||||
    compute_prefix_sum(array, prefix);
 | 
			
		||||
    
 | 
			
		||||
    // 预处理每个长度的逆元
 | 
			
		||||
    std::vector<long long> inverse(n + 1);
 | 
			
		||||
    for (int i = 1; i <= n; ++i) {
 | 
			
		||||
        inverse[i] = mod_pow(i, MOD - 2, MOD);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    long long total_avg_sum = 0;
 | 
			
		||||
    for (int l = 0; l < n; ++l) {
 | 
			
		||||
        for (int r = l; r < n; ++r) {
 | 
			
		||||
            long long subarray_sum = (prefix[r + 1] - prefix[l] + MOD) % MOD;
 | 
			
		||||
            int length = r - l + 1;
 | 
			
		||||
            long long avg = (subarray_sum * inverse[length]) % MOD;
 | 
			
		||||
            total_avg_sum = (total_avg_sum + avg) % MOD;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    return total_avg_sum;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main() {
 | 
			
		||||
    int t;
 | 
			
		||||
    std::cin >> t;
 | 
			
		||||
    std::vector<long long> results;
 | 
			
		||||
    
 | 
			
		||||
    while (t--) {
 | 
			
		||||
        int n;
 | 
			
		||||
        std::cin >> n;
 | 
			
		||||
        std::vector<int> array(n);
 | 
			
		||||
        for (int i = 0; i < n; ++i) {
 | 
			
		||||
            std::cin >> array[i];
 | 
			
		||||
        }
 | 
			
		||||
        results.push_back(calculate_average_sum(n, array));
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    for (long long result : results) {
 | 
			
		||||
        std::cout << result << std::endl;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user