Чоловік живе у північно-західному куточку (0, 0)
міста з висотою h
та шириною w
. Щодня він ходить від свого дому до кордону (?, w)
чи (h, ?)
. У наступному прикладі чоловік іде (3, 3)
сьогодні.
(0, 0) +--+ + + . (0, 4)
|
+ +--+--+ .
|
+ + + + .
|
(3, 0) . . . . . (3, 4)
Чоловік записує трохи у кожній точці ( +
на прикладі вище). Кожен раз, коли він досягає точки, він іде на схід, якщо шматочок 1
і на південь інакше. Біт перевертається після того, як він піде. Наприклад:
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)
Враховуючи розмір міста та людський облік, обчисліть місце призначення людини за n
днями.
Вхід:
У першому рядку три цілі числа h
, w
і n
.
У наступних h
рядках - w
цілі числа, що позначають чоловічий запис.
h <= 1000, w <= 1000, n <= 1000000000
Вихід:
Два цілих числа, що позначають призначення людини через n
дні.
Зразок введення:
3 4 3
1 0 1 1
0 1 0 0
1 0 1 0
Вибірка зразка:
0 4
Приклад коду:
#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;
}
Оцінка:
- Найнижча кількість байтів у перемогах UTF-8.
- Якщо час роботи вашого коду не залежить
n
, зменшіть свою оцінку на 50%.- Не просто обчислюйте результати всіх 1000000000 днів або робіть щось подібне нерозумно, щоб отримати цей бонус. Знайдіть ефективний алгоритм!
n
, мій код обчислює результати всіх 1000000000 днів, то виводя результат n
, чи все одно я отримую бонус -50%?