ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【牛客小白月赛51 F平均题】数论,前缀和

2022-06-03 21:34:05  阅读:117  来源: 互联网

标签:arr int sumsum sum 51 ++ long 牛客 小白月赛


import java.io.IOException;
import java.util.Scanner;

public class Main {
    static int MOD = 1000000007;

    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = scanner.nextInt();
        }
        //
        int k = n / 2;
        if( n%2 !=0){
            k++;
        }

        long[] sum = new long[k + 1];
        for (int i = 0; i < n; i++) {
            sum[0] += arr[i];
            sum[0] %= MOD;
        }
        for (int x = 1; x < k; x++) {
            sum[x] = (sum[x - 1] + 2 * MOD - arr[x - 1] - arr[n - x]) % MOD;
        }
        //求数组
        long[] sumsum = new long[k + 1];
        for (int i = 0; i < k; i++) {
            if (i > 0) {
                sumsum[i] = sumsum[i - 1] + sum[i];
            } else {
                sumsum[i] = sum[0];
            }
            sumsum[i] %= MOD;
        }
        //再求最简
        long ans = 0;
        for (int llen = 1; llen <= k; llen++) {
            long tmp = 1L;
            tmp = sumsum[llen - 1] * pow(llen, MOD - 2) % MOD;
            ans = (ans + tmp) % MOD;
            if (llen < k) {
                tmp = sumsum[llen - 1] * pow(n +1 - llen, MOD - 2) % MOD;
                ans = (ans + tmp) % MOD;
            } else {
                if (n % 2 == 1) {
                    continue;
                } else {
                    tmp = sumsum[llen - 1] * pow(n +1 -  llen, MOD - 2) % MOD;
                    ans = (ans + tmp) % MOD;
                }
            }
        }
        System.out.println(ans);


    }

    public static long pow(long b, int x) {
        if (x == 0) {
            return 1;
        }
        if (x == 1) {
            return b;
        }
        long a = pow(b, x / 2);
        if (x % 2 == 0) {
            return a * a % MOD;
        } else {
            return ((a * a % MOD) * b) % MOD;
        }
    }


}

 

标签:arr,int,sumsum,sum,51,++,long,牛客,小白月赛
来源: https://www.cnblogs.com/fishcanfly/p/16340741.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有