solución matemática [preguntas programación] detección de virus Golang Racer 2020

[Preguntas programación] detección de virus

Recientemente se centró preguntas cepillo, escribirlo todo un poco lento, ya que sólo hace más difícil registros.
Esta pregunta es un agradable a la vista Mi primer pensamiento es un dos-puntos, pero tenga en cuenta encontrar cuidadosamente la manera correcta de pensar acerca de las vueltas del puntero no va a funcionar, si usamos el doble puntero, necesitas la parte posterior del puntero derecho de la operación de exploración de nuevo acababa de comenzar, y esta violencia la ley no hay diferencia.
Pensé en otra idea, crear un punto de venta de la matriz [] registrar la ubicación de cada 1.
Combinamos un ejemplo para analizar el caso general, por las siguientes POS []:

2 4 9 10 14 18

Considere la quinta, la posición 14, si k = 3, la segunda posición es 1 4.
Todas estas tres posibilidades a continuación, contienen 1, 10, 11 se puede expresar como:
derecho deslizante rango (14, 18], el rango de deslizamiento izquierda ((4,9], existe la posibilidad de (18-14) * ( 9-4) = 20 clases.
entonces la posibilidad de cambiar la última posición de bit 1 del total determinada.

Código de fijación inferior:

package main

import "fmt"

func main()  {
	var k,ans int
	var str string
	fmt.Scan(&k,&str)
	pos:= []int{-1}
	for i,v:=range(str){
		if v==49{	//"1"的ASCII码为49
			pos=append(pos, i)
		}
	}
	if k>=len(pos){
		fmt.Println(0)
		return
	}
	pos=append(pos, len(str))
	if k==0{
		for i:=k;i<len(pos)-1;i++{
			ans+=(pos[i+1]-pos[i]-1)*(pos[i+1]-pos[i])/2
		}
	}else {
		for i := k; i < len(pos)-1; i++ {
			ans += (pos[i+1] - pos[i]) * (pos[i-k+1] - pos[i-k])
		}
	}
	fmt.Println(ans)
}
Publicado 38 artículos originales · ganado elogios 0 · Vistas 1011

Supongo que te gusta

Origin blog.csdn.net/Cyan1956/article/details/105328680
Recomendado
Clasificación