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);
}
}