728x90
https://www.acmicpc.net/problem/19953
처음 속도 v, 방향을 바꾸었을 때 속도 변화량에 영향을 주는 요인 m , 산책 시간 t 로 이루어져있다.
일단 방향을 바꾸면 속도는 (v * m) % 10이 되는데,
곱셈의 특성상 나머지는 4번을 주기로 순환한다.
그렇기에 처음 속도를 제외한 나머지 4번의 속도 연산은 주기를 이룬다.
그러므로 t를 4로 나눈 몫은 고정으로 변하고, 나머지에 따라 최종 위치가 결정된다.
여기서 주의할 점은 v % 10을 북쪽방향으로 가는 속도로 지정하면 안된다.
가령 v = 3, m = 6이 주어진 경우
처음 속도는 3이지만, 방향을 바꾸었을 때 속도는 (3 * 6) % 10 인 8,
한번 더 바꾸면 (8 * 6) % 10 인 8,
이므로 방향을 바꾼 이후의 북쪽 방향의 속도는 8이 된다.
처음에 이를 단순히 v%10으로 설정해주었다가 많이 틀렸다.
그러므로 t를 4로 나눈 이후 최초 속도를 따로 계산해주어야한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#include <iostream>
using namespace std;
int main(){
int v, v2, m, t, x=0, y=0; cin >> v2 >> m >> t;
int d[4];
v=v2;
for(int i=1; i<=4; i++){
v=(v*m)%10;
if(i!=4) d[i]=v;
else d[0]=v;
}
m=t/4, t%=4;
y+=(d[0]-d[2])*m;
x+=(d[1]-d[3])*m;
if(t>=1){
y+=d[0];
if(t>=2){
x+=d[1];
if(t>=3) y-=d[2];
}
}
y+=v2-d[0];
cout << x << " " << y;
}
|
cs |
'PS > BOJ' 카테고리의 다른 글
[C++] 백준 10244번: 최대공약수들 - Math (0) | 2024.01.31 |
---|---|
[C++] 백준 2374번: 같은 수로 만들기 - Stack (0) | 2024.01.20 |
[C++] 백준 27856번: Sum of Remainders - Math (0) | 2024.01.18 |