Ein Mann lebt in der nordwestlichen Ecke (0, 0)einer Stadt mit Höhe hund Breite w. Jeden Tag geht er von zu Hause zur Grenze (?, w)oder (h, ?). Im folgenden Beispiel geht der Mann bis (3, 3)heute.
(0, 0) +--+ + + . (0, 4)
|
+ +--+--+ .
|
+ + + + .
|
(3, 0) . . . . . (3, 4)
Der Mann zeichnet an jedem Punkt etwas auf ( +im obigen Beispiel). Jedes Mal, wenn er einen Punkt erreicht, geht er nach Osten, wenn das Stück ist, 1und sonst nach Süden. Das Stück wird umgedreht, nachdem er gegangen ist. Beispielsweise:
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)
Berechnen Sie anhand der Größe der Stadt und der Daten des Mannes das Ziel des Mannes nach nTagen.
Eingang:
In der ersten Zeile stehen drei Ganzzahlen h, wund n.
In den folgenden hZeilen stehen wganze Zahlen für den Datensatz des Mannes.
h <= 1000, w <= 1000, n <= 1000000000
Ausgabe:
Zwei ganze Zahlen, die das Ziel des Mannes nach nTagen angeben .
Beispiel Input:
3 4 3
1 0 1 1
0 1 0 0
1 0 1 0
Beispielausgabe:
0 4
Beispielcode:
#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;
}
Wertung:
- Die niedrigste Byteanzahl in UTF-8 gewinnt.
- Wenn die Laufzeit Ihres Codes unabhängig ist
n, reduzieren Sie Ihre Punktzahl um 50%.- Berechnen Sie nicht einfach die Ergebnisse aller 1000000000 Tage oder tun Sie etwas ähnlich Dummes, um diesen Bonus zu erhalten. Finde einen effizienten Algorithmus!
nmein Code , egal was passiert, die Ergebnisse aller 1000000000 Tage berechnet und dann das Ergebnis von ausgibt n, bekomme ich trotzdem den Bonus von -50%?