Ein Mann lebt in der nordwestlichen Ecke (0, 0)
einer Stadt mit Höhe h
und 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, 1
und 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 n
Tagen.
Eingang:
In der ersten Zeile stehen drei Ganzzahlen h
, w
und n
.
In den folgenden h
Zeilen stehen w
ganze Zahlen für den Datensatz des Mannes.
h <= 1000, w <= 1000, n <= 1000000000
Ausgabe:
Zwei ganze Zahlen, die das Ziel des Mannes nach n
Tagen 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!
n
mein Code , egal was passiert, die Ergebnisse aller 1000000000 Tage berechnet und dann das Ergebnis von ausgibt n
, bekomme ich trotzdem den Bonus von -50%?