Чоловік живе у північно-західному куточку (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%?