Bir adam (0, 0)
bir kasabanın kuzeybatı köşesinde boy h
ve 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 1
ve 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 n
gün sonra hesaplayın .
Giriş:
İlk satırda üç tamsayı vardır h
, w
ve n
.
Aşağıdaki h
satırlarda w
, adamın kaydını gösteren tamsayılar vardır.
h <= 1000, w <= 1000, n <= 1000000000
Çıktı:
İki tamsayı, n
gü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,
n
puanı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, n
hala% -50 bonus alır mıyım?