Un homme vit dans le coin nord-ouest (0, 0)d'une ville de hauteur het 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 1et 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 njours.
Contribution:
Dans la première ligne sont trois entiers, h, wet n.
Dans les hlignes suivantes sont des wnombres 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 njours.
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!
nsoit, 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%?