男(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
数日後の男性の行き先を示す2つの整数。
サンプル入力:
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%のボーナスが得られますか?