2020 24 de de marzo de empujada dentro de 360 escritos

2020 24 de de marzo de empujada dentro de 360 ​​escritos


  Hizo una prueba escrita de 360, me siento muy buena suerte, la prueba escrita es realmente un cálculo muy simple. Ado, mirada hacia el sujeto.

Un tema

Título probablemente, no es un ADN, que comprende dos caracteres, A, y T, los científicos tal ADN puede ser modificado de dos maneras, primero es reemplazar las posiciones de dos ADN ácidos nucleicos. El segundo es para modificar directamente el carácter a otro carácter
de entrada dos líneas, la primera línea del original es el ADN, el ADN diana es la segunda línea, para asegurar que la misma longitud de
la búsqueda de la cantidad mínima de modificado

de entrada de muestra:
ATTTAA
TTAATT

de salida: 3

  El sujeto puede parecer complicado, piense cuidadosamente, es muy simple, sólo dos personajes, no es lo mismo cuando se puede intercambiar, también puede cambiar. Obviamente, la misma longitud, la longitud de la operación no se cambia, por lo que es recto, si el intercambio directo se puede intercambiar, si el intercambio no se modifica. Reducir el número de cambio no es el mismo carácter que 2, modificado para reducir el número de inconsistencias es 1.
  Echemos un vistazo en el intercambio, si la A reemplazado por T, tiene que haber una T se reemplaza por A, si T ha sido reemplazado por un par de A, entonces el equivalente no cambió, ya que no les gusta el número no ha cambiado. Por lo que debe ser intercambiables entre los dos. Pero cuando no puede cambiarlo, obviamente, todos de A T se ha conmutado, o T A se conmuta.
  Si ya dispone de uno de los personajes se cambia, entonces el resto de los personajes sólo puede ser modificado. Así que no cuente el mismo número de caracteres, estadísticas separadas una hora diferente, y T no es el mismo tiempo. El número de intercambio de los dos números es claramente el número más pequeño. Cambiar el número es mayor que el número restante después de que el número de intercambio. Por lo que el número total de modificaciones, que no es sólo el mismo número de caracteres.
  En el ejemplo anterior, los caracteres no son el mismo índice tiene dos ADN 0,2,3,4,5. Una cadena con el índice de carácter original no es el mismo que el 0,4,5. Con la cadena original T no es el mismo índice de caracteres es 2,3. Obviamente, el 0,4 y 2,3 después del intercambio, los 5 restantes pueden ser reemplazados. Así es el número de T y no el mismo carácter de Estadística y la cadena original A, es a la vez el número de revisión más general.

código Python

origin=input()
target=input()
ori={'A':0,'T':0}
for o,t in zip(origin,target):
    if o!=t:
        ori[o]+=1
print(max(ori['A'],ori['T']))

código C ++

int main()
{
	string origin, target;
	cin >> origin;
	cin >> target;
	int a[2] = { 0,0 };
	for (int i = 0; i < origin.size(); i++)
		if (origin[i] != target[i])
			a[origin[i] == 'A'] += 1;
	cout << (a[0]>a[1]? a[0]:a[1]);
	return 0;
}

La segunda pregunta

Una caja de tracción, n-Zhang lotería, hojas de M no es en la lotería, A y B alternativamente dibujar, si los extremos de la lotería dibujar. Pero después de bombear una vez cada B, no dibujado, a continuación, poner en una caja de sorteo de entradas para tirar a la basura. Si todos los billetes de premio son bombeados y B gana entonces. Un primer sorteo, la determinación de la probabilidad de ganar A, un 4 decimal lugares
de entrada: n-m y la probabilidad de salida de ganar una

entrada de la muestra:
23
de salida 0,6000

  0,5000 interpretación es de salida, la probabilidad de A se dibuja primero 2/5 = 0,4, la probabilidad de la segunda bomba no está bombeando A y B, la probabilidad de este tiempo es 3/5 * 2/4 los dos restantes en una lotería y no necesitan perder en una lotería, hay dos casos, perdidos en un sorteo, la probabilidad es 2/3, la probabilidad de ganar es un medio siguiente, si no se pierde en loterías, la probabilidad de ganar es 1 una próxima vez. La probabilidad de este evento que ocurre es igual a 3/5 * 2/4 * (1/2 + 2/3 * 1/3 * 1). Entonces la suma de los dos es 0,6000.
  Una ronda, pasado hasta tres loterías, tiene que haber dos no son en la lotería, hay una perdida, puede estar en la lotería no puede estar en la lotería. Después de pasar tres, correspondiente al problema en dos situaciones, n-1, m-2, y n, los dos sub-problemas m-3. Y sub-problema y el problema original de la coherencia, es relativamente fácil de escribir un código recursivo. Pero el mismo problema, habrá el doble cómputo, se podría pensar en añadir un memorando recursivo, que es toda la idea del algoritmo.
  Se puede considerar la programación dinámica de abajo hacia arriba, por supuesto, se puede, pero no es necesario, debido a que más casos procesados. O código recursivo para tratar con ellos es simple. Y n y m, tienen muchos sub-problemas son inútiles cálculo. Si la de abajo hacia arriba, que está determinada a no ser calculado, que no lo hacen. Por lo tanto, el cálculo de arriba hacia abajo mejor opción.
  El proceso vuelve a la situación, cuando m <2, ya que los dos no son suficientes en un Guardar la vuelta de la lotería, sería capaz de volver a la misma n contador <1 pueden ser devueltos. Todos los casos, porque no hay una próxima vez, es algo que debe ganar, retorno directo n / (n + m). Sin embargo, cuando m = 2, cuando, n = 1, esta vez no hay tiempo próximo A, la probabilidad de ganar es n / (n + m).
  Si n es todavía mucho, pero m sólo dos, y esta vez, al parecer un no dibujado, no sólo es M no dibujado antes de que puedan ganar, esta vez
la probabilidad de A se dibuja Ganar, n / (n + 2) más a no dibujado en, B ni la probabilidad de bombeo se 1 / ( ( metro + norte ) * ( metro + norte - 1 ) ) 1 / ((m + n) * (m + n-1)) . Suma de los dos.
  De hecho, esto también se puede perder en la lotería no afecta a la probabilidad de ganar la próxima Un Esta regla simplifica el código, pero no he escrito al considerar que gran parte.

código Python

n,m=[int(i) for i in input().split(' ')]
dp=[[0]*(m+1) for i in range(n+1)]
def func(n, m):
    summ=m+n
    if dp[n][m]:return dp[n][m]
    elif m<2 or n<1 or (m==2 and n==1):
        dp[n][m]=n/summ
    elif m==2:
        dp[n][m]=n/summ+2/(summ*summ-summ)
    else:
        cb=func(n, m - 3)*(m-2)/(summ-2) # 丢掉不中奖券后A获胜的概率
        cr=func(n - 1, m - 2)*n/(summ-2) # 丢掉中奖券后A获胜的概率
        dp[n][m]= n/summ+(cb+cr)*(m*m-m)/(summ*summ-summ) # A这次就获胜的概率+A之和获胜的概率
    return dp[n][m]

print('%.4f'%func(n,m))

código C ++

double f(int n, int m, vector<vector<double>> probability)
{
	double sum = m + n;
	if (probability[n][m])return probability[n][m];
	if (m < 2 || n < 1 || (m == 2 && n == 1))probability[n][m] = n / sum;
	else {
		if(m==2)probability[n][m] = n / sum + 2 / (sum * sum - sum);
		else {
			double cb = f(n, m - 3, probability) * (m - 2) / (sum - 2); // 丢掉不中奖券后A获胜的概率
			double cr = f(n - 1, m - 2, probability) * n / (sum - 2);  // 丢掉中奖券后A获胜的概率
			probability[n][m] = n / sum + (cb + cr) * (m * m - m) / (sum * sum - sum);
		}
	}
	return probability[n][m];
}
int main()
{
	int n, m;
	cin >> n >> m;
	vector<vector<double>> probability(n + 1, vector<double>(m + 1, 0));
	cout << setiosflags(ios::fixed) << setprecision(4)<< f(n, m,probability);
}

  Desde que presenté mi mismo para tratar una pitón, código C ++ no se ha presentado en línea, si encuentra errores, que dan la bienvenida.

Publicado 38 artículos originales · ganado elogios 5 · Vistas de 530.000 +

Supongo que te gusta

Origin blog.csdn.net/m0_38065572/article/details/105082562
Recomendado
Clasificación