一个人住在(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%。- 不要仅仅计算所有10亿天的结果,或者做任何类似的愚蠢操作来获得这笔奖金。寻找高效的算法!
n
,我的代码都会计算所有1000000000天的结果,然后输出的结果n
,我是否还会获得-50%的奖励?