※ SW expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.
정우는 USB 커넥터를 포트에 꽂고 있다. 정확히 꽂기 까지 다음과 같은 과정을 거친다.
- 가장 처음 USB를 꽂을 때, p의 확률로 올바른 면으로 USB를꽂은 것이고 ,
(1 - p)의 확률로는 뒤집어서 USB를 꽂은 것이다.
- 만약 올바른 면으로 USB를 꽂으면 q의 확률로 정상적으로 USB가 꽂히고,
(1 - q)의 확률로는 꽂히지 않는다. USB가 뒤집어져 있다면 절대로 꽂히지 않는다.
- USB를 꽂는 것을 실패하면 USB를 뒤집은 다음 다시 꽂는 것을 시도한다.
이 때, USB를 정확히 i번 뒤집었을 때 USB가 꽂힐 확률을 si 로 나타낸다.
정우는 지금까지 USB를 두 번이나 뒤집어야 USB가 제대로 꽂히는 놀라운 경험을 너무 많이 했고, 이런 상황이 얼마나 많이 일어날 수 있는지 알고 싶다.
이를 위해 p, q가 주어지면 s1< s2인지 아닌지 판별하는 프로그램을 작성하라.
[입력]
첫 번째 줄에 테스트 케이스의 수 TC가 주어진다.
이후 TC개의 테스트 케이스마다 두 실수 p와 q가(0 ≤ p ≤ 1 , 0 ≤ q ≤ 1) 공백으로 구분되어 주어진다.
주어진 입력은 |s1 - s2| ≥ 10-5 인 것이 보장된다.
[출력]
각 테스트 케이스마다 ‘#t ’( t 는 테스트케이스 번호를 의미하며 1부터 시작한다)를 출력하고,
s1< s2 이면 “YES”를 아니면 “NO”를 출력한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#include <iostream>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n;
double p,q;
cin>>n;
for(int t=1;t<=n;t++)
{
double s1 = 0, s2 = 0;
cin>>p>>q;
s1 = (1-p)*q; //1
s2 = p*(1-q)*q; //2
if(s1<s2)
cout<<'#'<<t<<" YES\n";
else
cout<<'#'<<t<<" NO\n";
}
return 0;
}
|
cs |
1번 뒤집었을때 맞을 확률
= 처음에 잘못 꽂았을 확률(1-p) * 뒤집어서 제대로 꽂아질 확률 q => (1-p)*q
2번 뒤집었을때 맞을 확률
= 처음에 방향이 맞았지만 제대로 못 꽂을 확률 p*(1-q) * 2번 뒤집어서 꽂아질 확률 q => p*(1-q)*q
둘이 비교해서 출력
처음 뒤집었을 때는 안맞으므로 별다른 곱셉을 하지 않고 넘어감
2105. [모의 SW 역량테스트] 디저트 카페 (C++) (0) | 2020.04.14 |
---|---|
9778. 카드 게임 (0) | 2020.04.09 |
9658. 유효숫자 표기 D3 (0) | 2020.03.11 |
5650. [모의 SW 역량테스트] 핀볼 게임 (0) | 2020.03.09 |
9611. 명진이와 동휘의 숫자 맞추기 D4 (0) | 2020.03.08 |
댓글 영역