Bir adam (0, 0)bir kasabanın kuzeybatı köşesinde boy hve genişlikte yaşıyor w. Her gün evinden sınıra yürür (?, w)veya (h, ?). Aşağıdaki örnekte adam (3, 3)bugüne gidiyor .
(0, 0) +--+ + + . (0, 4)
|
+ +--+--+ .
|
+ + + + .
|
(3, 0) . . . . . (3, 4)
Adam her noktada bir miktar kayıt yapar ( +yukarıdaki örnekte). Bir noktaya her ulaştığında, eğer bit ise doğuya gider 1ve aksi halde güneye gider . Bittikten sonra bit ters çevrilir. Örneğin:
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)
Kasabanın büyüklüğü ve adamın kaydı göz önüne alındığında, adamın hedefini ngün sonra hesaplayın .
Giriş:
İlk satırda üç tamsayı vardır h, wve n.
Aşağıdaki hsatırlarda w, adamın kaydını gösteren tamsayılar vardır.
h <= 1000, w <= 1000, n <= 1000000000
Çıktı:
İki tamsayı, ngünler sonra adamın hedefini gösterir .
Örnek Giriş:
3 4 3
1 0 1 1
0 1 0 0
1 0 1 0
Örnek Çıktı:
0 4
Basit kod:
#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;
}
puanlama:
- UTF-8'de en düşük bayt sayısı kazanır.
- Kodunuzun çalışma süresi bağımsızsa,
npuanınızı% 50 azaltın.- Do not sadece tüm 1000000000 gün sonuçları hesaplamak veya bu bonusu almak için benzer aptalca bir şey. Etkili bir algoritma bulun!
n, kodum tüm 1000000000 günün sonuçlarını hesaplar ve ardından sonucu çıkarırsa, nhala% -50 bonus alır mıyım?