Un uomo vive nell'angolo nord-ovest (0, 0)
di una città con altezza h
e larghezza w
. Ogni giorno cammina da casa sua al confine (?, w)
o (h, ?)
. Nel seguente esempio, l'uomo va a (3, 3)
oggi.
(0, 0) +--+ + + . (0, 4)
|
+ +--+--+ .
|
+ + + + .
|
(3, 0) . . . . . (3, 4)
L'uomo registra un po 'in ogni punto ( +
nell'esempio sopra). Ogni volta che raggiunge un punto, va verso est se la punta è 1
e verso sud altrimenti. Il pezzo viene girato dopo che se ne è andato. Per esempio:
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)
Date le dimensioni della città e il record dell'uomo, calcola la destinazione dell'uomo dopo n
giorni.
Ingresso:
Nella prima riga sono tre numeri interi h
, w
e n
.
Nelle h
righe seguenti sono w
numeri interi, che indicano il record dell'uomo.
h <= 1000, w <= 1000, n <= 1000000000
Produzione:
Due numeri interi, che indicano la destinazione dell'uomo dopo n
giorni.
Input di esempio:
3 4 3
1 0 1 1
0 1 0 0
1 0 1 0
Uscita campione:
0 4
Codice d'esempio:
#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;
}
punteggio:
- Vince il conteggio dei byte più basso in UTF-8.
- Se il tempo di esecuzione del tuo codice è indipendente
n
, riduci il punteggio del 50%.- Non solo calcolare i risultati di tutti i 1000000000 giorni o fare qualcosa di altrettanto stupido per ottenere questo bonus. Trova un algoritmo efficiente!
n
è, il mio codice calcola i risultati di tutti i 1000000000 giorni, quindi genera il risultato di n
, ricevo ancora il bonus del -50%?