"Matemáticas" - la transferencia de dinero

Mira el título:

Hay n individuos en un círculo, cada persona tiene un cierto número de monedas de oro, y cada uno puede dar a su pueblo algunas de las monedas de oro vecinas, las monedas de oro que tratan de mover al menos a hacer que se reparten el oro

Este es el efecto.

No es muy simple.

De hecho ni idea. Me demasiado duro.

El método sólo se puede aprender de los demás.

Esta pregunta es en realidad un problema de matemáticas.

Exactamente cómo hacerlo?

He aquí cómo.

Veo a primera hora de demostrarlo.

En primer lugar,

El número final de monedas de oro restantes son los mismos, pero podemos contar el número de monedas de oro directamente, configurar el final de todo el mundo tiene una serie de monedas de oro como m, n es el número de

Abrimos una variable n ans registro del número de monedas de la persona y, a continuación, m = ans / n.

Esta es la mayoría de la gente puede pensar.

A continuación se centran en:

Debemos dar rienda suelta a su creatividad, las fabricaciones de inicio:

Hemos establecido b [i] para el i-ésimo número de monedas a los primeros i-1 personas individuales.

Pues bien, esta tenue?

Varias columnas fórmula:

Para la primera persona, él primero individuo n b [1] moneda de oro, mientras que el segundo dio su b personal [2] monedas de oro, el número de monedas a su un inicial [1], el número definitivo de las monedas m

Por lo tanto, podemos enumerar la ecuación m = a [1] -b [1] + b [2] -------- 1 fórmula

Del mismo modo, para la segunda m individuo = a [2] -b [2] + b [3] -------- 2 Fórmula

Para el individuo n: m = a [n] -b [n] + b [1] -------- n de la fórmula

Por lo tanto, m = a [n] -b [n] + b [n + 1].

Pero aquí, todavía no vemos tenue, no se preocupe, tome su tiempo.

fabricaciones luego

Con el fin de encontrar la regla de conveniencia, se introduce una matriz C, de modo que c [1] = [1] -m a, c [2] = a [1] + a [2] -m * 2, c [n] = a [ 1] + a [2] + ... + [n a] -m * n

c significado [i] no es importante, porque está fuera de fabricaciones, no sé, pero fácil de usar en la línea.

Fórmula c [0] = 0, c [i] = a [i] + c [i-1] -m;

Para una segunda persona (de la Fórmula 1): b [2] = ma [1] + b [1] = b [1] -c [1];

Para la tercera (de la fórmula 2): b [3] = ma [2] + b [2] = ma [2] + ma [1] + b [1] (el b [2] = ma [1 ] + b [1] está sustituido) = 2m-a [1] -a [2] + b [1] = b [1] -c [2];

Para el cuarto individuo (de fórmula 3): b [4] = ma [3] + b [3] = 3m-a [1] -a [2] -a [3] + b [1] = b [ 1] -c [3]

......

La ley no salió? Ja, ja, ja, ja, ja!

Esperamos que los valores absolutos de todos los b [i] y lo más pequeño posible, es decir, el

| B [1] -c [0] | + | b [1] -c [1] | + | b [1] -c [2] | + | b [1] -c [3] | + ...... + | b [1] -c [n-1] | mínimo

Para cualquier par de números a, b, sabemos | AB & | representa el valor absoluto de la distancia recta numérica

Así que puede ser considerada como las coordenadas de la fórmula original a punto b [1] para un valor mínimo de todos los puntos anteriores y la distancia

En este caso, hay una conclusión, un número dado de puntos al eje n, en todos los puntos en la línea número, la distancia de la mediana y el mínimo de todos los vértices

Por lo que es no lo haría.

Recuerde abrir mucho tiempo oh

Aquí está el código:

1 #include <cmath>
 2 #include <algoritmo>
 3 #include <cstdio>
 4 #include <iostream>
 5 #include <cstring>
 6  usando  espacio de nombres std;
7  const  int maxN = 1E6 + 5 ;
8 typedef largo  largo ll;
9  CL a [maxN], c [maxN], n;
10  int main () {
 11      // freopen ( "a.in", "r", la entrada estándar); 
12      , mientras que (scanf ( " % d " , y n)! = EOF) {
 13          memset (a,0 , sizeof (a)); memset (c, 0 , sizeof (c));
14          ll tot = 0 ;
15          para (ll i = 1 ; i <= n; i ++ ) {
 16              scanf ( " % LLD " , & a [i]);
17              tot + = a [i];
18          }
 19          ll ININ = tot / n;
20          para (LL i = 1 ; i <n; i ++ ) {
 21              c [i] = a [i] + c [i- 1 ] - ININ;
22          }
23          sort (c, c + n);
24          ll ans = c [n / 2 ]; ll cnt = 0 ;
25          para (ll i = 0 ; i <n; i ++ ) {
 26              cnt + = abs (Respuesta- c [i]);
27          }
 28          printf ( " % LLD \ n " , cnt);
29      }
 30      de retorno  0 ;
31 }

resumirlo

Esta pregunta no es tanto un problema de matemáticas, como lo es para ver quién es más basura (por supuesto bien fundada)

Competencia plena de la creatividad y la experiencia de hacer la pregunta él!

Podemos acumularlo.

 

Supongo que te gusta

Origin www.cnblogs.com/DZN2004/p/12661845.html
Recomendado
Clasificación