- 문제 링크 : boj.kr/13312
- 난이도 : G4
- 태그 : 해 구성하기
코드
#include <bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
#define INF 0x7FFFFFFF
using namespace std;
using ll = long long;
using ld = long double;
using pii = pair<int,int>;
using pll = pair<ll, ll>;
float _abs(float x){ return x < 0? -x : x; }
bool is_equal(double a, double b){ return _abs(a-b) < 1e-3; }
int main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int n = 3;
int arr[3];
random_device rd;
mt19937 mt(rd());
uniform_int_distribution<int> dist(-100, 100);
while(true) {
arr[0] = dist(mt);
arr[1] = dist(mt);
if(arr[0] + arr[1] > 0) arr[2] = 100 - (arr[0] + arr[1]);
else arr[2] = -100 - (arr[0] + arr[1]);
double a = arr[0] + arr[1] + arr[2];
a /= 100;
double b = arr[0] / 100.0 + arr[1] / 100.0 + arr[2] / 100.0;
if(!is_equal(acos(a), acos(b))) {
cout << arr[0] << " " << arr[1] << " " << arr[2] << "\n";
cout << a << "\n" << b << "\n";
break;
}
}
return 0;
}
풀이
둘이 다를 조건은 acos의 경계값 -1 혹은 1에서 실수 오차가 발생하는 경우이다.
N=3에서도 충분히 실수 오차가 발생할 수 있다. 따라서 세 수의 합이 100 혹은 -100이 되도록 무작위로 값을 넣어보고, 이 값을 제공된 코드로 확인해보면 된다.
728x90
'PS' 카테고리의 다른 글
BOJ 1593 : 문자 해독 (0) | 2024.06.17 |
---|---|
BOJ 2138 : 전구와 스위치 (0) | 2024.06.16 |
BOJ 31862 : 승리하라 (0) | 2024.06.14 |
BOJ 17505 : 링고와 순열 (1) | 2024.06.13 |
BOJ 18869 : 멀티버스 Ⅱ (0) | 2024.06.12 |