Red de conocimiento informático - Conocimiento informático - Programación del robot Xiao I

Programación del robot Xiao I

La idea básica es calcular el tiempo de colisión de los robots adyacentes en cada ronda, organizarlos de pequeño a grande y luego chocar en secuencia.

La relación adyacente de los robots restantes cambiará, por lo que se volverá a calcular el tiempo de colisión y se repetirán los pasos anteriores hasta que no se produzca ninguna colisión.

El código C es el siguiente:

# include ltbits/stdc. h gt//Archivo de encabezado general C

Usar espacio de nombres std

Usar tri = tuple ltdouble, int, int gt // Tiempo de colisión y número de robot

int main() {

int n, k;

CIN gt; gtn;

k = n // El número de robots restantes

int x[n 1], v[n 1]; //Posición inicial y velocidad

for(int I = 1; i lt= n; i) //Número desde 1 inicio .

CIN gt; gtx[I] gt; gt five[one];

int crash[n 1] // Marca el robot que chocó.

memset(crash, 0, sizeof(crash));

Cola de prioridad lttri, vector lttri gt, mayor lttri gt gtpq //Pequeño montón raíz

while(k gt; = 2) {//Al menos dos robots pueden chocar.

int I = 1;

mientras(i ltn amp amp crash[I]) I

mientras(i ltn) {

int j = I 1; //Calcula el tiempo de colisión con el robot de la derecha.

mientras(j lt; = n amp ampcrash[j]) j

if(j gt; n) desconectar

long d = x [ j]-x[I];

if(v[I] lt; = 0 amp ampv[j] lt; V[i] // j golpea I

| | (v[I] gt; 0 amp ampv[j] lt; v[I]){//Presiono j

delta largo _ v = v[I]-v[j] ;

Doble t = d * 1.0/delta _ v;

pq .posición de pistola (t, I, j

}

I = j;

}

if(pq . vacío())break; //No chocan robots

Y (!pq .empty( )) {

auto t = pq . top();

pq .

int ii = obtener lt1 gt; jj = get lt2 gt(t);

If (! Crash ⅱ amp; amp! Crash[jj]) {//Solo pueden colisionar mientras todavía están allí.

Crash[ii] = crash[jj]= 1

k-=

}

}

}

cout lt ltk lt lt"\n";

for(int I = 1; i lt= n; i) {

if(!crash[i])

cout lt lt i lt lt" ";

}

cout lt lt"\n"; p>

Devuelve 0;

}

El caso de prueba dado ha pasado, pero se necesitan más casos de prueba para verificar si es correcto. Espero adoptarlos~