Seorang pria tinggal di sudut barat laut (0, 0)
kota dengan tinggi h
dan lebar w
. Setiap hari ia berjalan dari rumahnya ke perbatasan (?, w)
atau (h, ?)
. Dalam contoh berikut, pria itu pergi ke (3, 3)
hari ini.
(0, 0) +--+ + + . (0, 4)
|
+ +--+--+ .
|
+ + + + .
|
(3, 0) . . . . . (3, 4)
Pria itu mencatat sedikit di setiap titik ( +
contoh di atas). Setiap kali dia mencapai suatu titik, dia pergi ke timur jika bagian itu 1
dan selatan sebaliknya. Bit dibalik setelah dia pergi. Sebagai contoh:
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)
Mengingat ukuran kota dan catatan pria itu, hitung tujuan pria itu setelah n
berhari-hari.
Memasukkan:
Di baris pertama ada tiga bilangan bulat h
,, w
dan n
.
Dalam h
baris berikut adalah w
bilangan bulat, yang menunjukkan catatan pria itu.
h <= 1000, w <= 1000, n <= 1000000000
Keluaran:
Dua bilangan bulat, yang menunjukkan tujuan pria itu setelah n
berhari-hari.
Input sampel:
3 4 3
1 0 1 1
0 1 0 0
1 0 1 0
Output sampel:
0 4
Kode sampel:
#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;
}
Mencetak:
- Hitungan byte terendah dalam kemenangan UTF-8.
- Jika waktu menjalankan kode Anda tidak tergantung
n
, kurangi skor Anda hingga 50%.- Jangan hanya menghitung hasil 1000000000 hari atau melakukan hal yang sama bodohnya untuk mendapatkan bonus ini. Temukan algoritma yang efisien!
n
terjadi, kode saya menghitung hasil semua 1000000000 hari, lalu menampilkan hasilnya n
, apakah saya masih mendapatkan bonus -50%?