[Recrutement d'automne de la Banque Weizhong] 230903 3. Valeur moyenne <somme du préfixe>

valeur moyenne

Xiao Ming a un tableau. Il a choisi un nombre rationnel u/v, et maintenant il veut savoir combien de sous-intervalles de ce tableau ont une moyenne exactement égale à u/v. Le sous-intervalle d'un tableau est un intervalle continu dans le tableau. Par exemple, le tableau [4,2,6] a 6 sous-intervalles [4], [2], [6], [4,2], [2,6 ], [4,2,6].

Description de l'entrée
La première ligne contient trois entiers n, u, v (1<=n, v<=100000, 1<=u<=n*v), qui représentent la longueur du tableau, le numérateur et le dénominateur du rationnel. numéro sélectionné par Xiao Ming. L'entrée garantit que le plus grand facteur commun de u et v est 1, c'est-à-dire que u/v est la fraction la plus simple.
La deuxième ligne contient n entiers dont la valeur absolue ne dépasse pas 1 000 000, représentant les éléments du tableau.
Les nombres sont séparés par des espaces.

Description de la sortie
Afficher un entier non négatif représentant la réponse demandée

Exemple de saisie

6 5 2
2 4 1 3 2 3

Exemple de sortie

6

répondre

Violences (82%)

import java.util.*;

public class C {
    
    
    public static void main(String[] args) {
    
    
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int u = in.nextInt();
        int v = in.nextInt();

        long[] arr = new long[n];
        for (int i = 0; i < n; i++) {
    
    
            arr[i] = in.nextInt();
        }
        int result = countSubarrays(arr,u,v);
        System.out.println(result);

    }

    static int countSubarrays(long[] arr,int u,int v){
    
    
        int n = arr.length;
        int count = 0;

        for (int i = 0; i < arr.length; i++) {
    
    
            long curSum = 0;
            for (int j = i; j < n; j++) {
    
    
                curSum += arr[j];
                if(u*(j-i+1) == v*curSum){
    
    
                    count++;
                }
            }
        }
        return count;
    }
}

Somme des préfixes (une dimension)

import java.util.*;

public class Main {
    
    
    public static void main(String[] args) {
    
    
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        double u = in.nextDouble();
        double v = in.nextDouble();
        double[] nums = new double[n];

        for (int i = 0; i < n; i++) {
    
    
            nums[i] = in.nextDouble();
        }

        int res = 0;
        double[] pre = new double[n + 1];
        //前几项的和为多少
        for (int i = 0; i < n; i++) {
    
    
            pre[i + 1] = pre[i] + nums[i];
        }

        /*for (double i:pre) {
            System.out.print(i+" ");
        }
        System.out.println();*/

        for (int left = 0; left < n; left++) {
    
    
            for (int right = (int) (left + v - 1); right < n; right += v) {
    
    
                if (v * (pre[right + 1] - pre[left]) == (right - left + 1) * u) {
    
    
                    res++;
                }
            }
        }
        System.out.println(res);
    }
}

Je suppose que tu aimes

Origine blog.csdn.net/qq_44033208/article/details/132685452
conseillé
Classement