Un hombre vive en la esquina noroeste (0, 0)de una ciudad con altura hy anchura w. Todos los días camina desde su casa hasta la frontera (?, w)o (h, ?). En el siguiente ejemplo, el hombre va a (3, 3)hoy.
(0, 0) +--+ + + . (0, 4)
|
+ +--+--+ .
|
+ + + + .
|
(3, 0) . . . . . (3, 4)
El hombre registra un poco en cada punto ( +en el ejemplo anterior). Cada vez que llega a un punto, va hacia el este si el bit es 1y hacia el sur de lo contrario. La parte se voltea después de que se va. Por ejemplo:
Day 1: 1--0 1 1 Day 2: 0 1 1 1 Day 3: 1--1--1--1-- Day 4: 0 0 0 0
| | |
0 1--0 0 0 0 1 0 1 0 1 0 1--0 1 0
| | |
1 0 1--0 1--0 0 1 0 1 0 1 0 1--0 1
| | |
Destination: (3, 3) Destination: (3, 1) Destination: (0, 4) Destination: (3, 2)
Dado el tamaño de la ciudad y el registro del hombre, calcule el destino del hombre después de ndías.
Entrada:
En la primera línea hay tres enteros h, wy n.
En las siguientes hlíneas hay wenteros, que denotan el registro del hombre.
h <= 1000, w <= 1000, n <= 1000000000
Salida:
Dos enteros, que denotan el destino del hombre después de ndías.
Entrada de muestra:
3 4 3
1 0 1 1
0 1 0 0
1 0 1 0
Salida de muestra:
0 4
Código de muestra:
#include <iostream>
using namespace std;
bool d[1000][1000];
int main(){
int h, w, n;
cin >> h >> w >> n;
for(int i = 0; i < h; i++)
for(int j = 0; j < w; j++)
cin >> d[i][j];
int i, j;
while(n--)
for(i = 0, j = 0; i < h && j < w;){
bool &b = d[i][j];
d[i][j] ? j++ : i++;
b = !b;
}
cout << i << " " << j << endl;
}
Puntuación:
- El conteo de bytes más bajo en UTF-8 gana.
- Si el tiempo de ejecución de su código es independiente
n, reduzca su puntaje en un 50%.- No solo calcules los resultados de todos los 1000000000 días o hagas algo similarmente estúpido para obtener este bono. ¡Encuentra un algoritmo eficiente!
nsea, mi código calcula los resultados de todos los 1000000000 días, luego emite el resultado de n¿Todavía obtengo el bono de -50%?