남자는 (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 % 보너스를 계속받을 수 있습니까?