Un hombre vive en la esquina noroeste (0, 0)
de una ciudad con altura h
y 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 1
y 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 n
días.
Entrada:
En la primera línea hay tres enteros h
, w
y n
.
En las siguientes h
líneas hay w
enteros, que denotan el registro del hombre.
h <= 1000, w <= 1000, n <= 1000000000
Salida:
Dos enteros, que denotan el destino del hombre después de n
dí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!
n
sea, 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%?