Un homme vit dans le coin nord-ouest (0, 0)
d'une ville de hauteur h
et de largeur w
. Chaque jour, il marche de son domicile à la frontière (?, w)
ou (h, ?)
. Dans l'exemple suivant, l'homme va (3, 3)
aujourd'hui.
(0, 0) +--+ + + . (0, 4)
|
+ +--+--+ .
|
+ + + + .
|
(3, 0) . . . . . (3, 4)
L'homme enregistre un peu à chaque point ( +
dans l'exemple ci-dessus). Chaque fois qu'il atteint un point, il va vers l'est si le bit est 1
et vers le sud sinon. Le mors est retourné après son départ. Par exemple:
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)
Compte tenu de la taille de la ville et du dossier de l'homme, calculez la destination de l'homme après plusieurs n
jours.
Contribution:
Dans la première ligne sont trois entiers, h
, w
et n
.
Dans les h
lignes suivantes sont des w
nombres entiers, dénotant le dossier de l'homme.
h <= 1000, w <= 1000, n <= 1000000000
Production:
Deux entiers, indiquant la destination de l'homme après des n
jours.
Exemple d'entrée:
3 4 3
1 0 1 1
0 1 0 0
1 0 1 0
Exemple de sortie:
0 4
Exemple de code:
#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;
}
Notation:
- Nombre d'octets le plus bas dans les victoires UTF-8.
- Si le temps d'exécution de votre code est indépendant de
n
, réduisez votre score de 50%.- Ne vous contentez pas de calculer les résultats de tous les 1000000000 jours ou de faire quelque chose de stupide pour obtenir ce bonus. Trouvez un algorithme efficace!
n
soit, mon code calcule les résultats de tous les 1000000000 jours, puis affiche le résultat de n
, ai-je toujours le bonus de -50%?