9도 OJ 1360: 로또 맞히기 게임(귀속)
메모리 제한: 32메가바이트
특수 판제: 아니요
제출: 955
해결
제목 설명:
어린이날이 되자 YZ는 푸짐한 선물을 사서 JOBDU의 고생한 직원들에게 보상을 준비했다.그는 재미를 더하기 위해 다양한 종류의 주사위를 준비해 주사위를 던져 숫자를 맞히는 방식으로 상품을 지급할 계획이다.예를 들어 어떤 주사위는 6개의 포인트(포인트는 각각 1~6), 어떤 주사위는 7개(포인트는 각각 1~7), 그리고 어떤 주사위는 8개의 포인트(포인트는 각각 1~8)가 있다.그는 매번 n개의 같은 유형의 주사위 (그것들이 모두 m개의 포인트를 가지고 있고 나타날 확률이 같다고 가정) 를 꺼내 던지고 직원들에게 종이에 우선순위 (고에서 저까지) 의 순서에 따라 3개의 수를 써서 건네주어 그들이 이 주사위가 가장 가능성이 있다고 생각하는 점수의 합이 얼마인지 표시했다.첫 번째 숫자를 맞힌 사람은 일등상이다.두 번째 숫자로 맞힌 사람은 2등상이다.만약 세 수가 모두 정답이 아니라면, 낙심하지 마라!YZ는 막대사탕도 많이 준비했어요.ZL은 똑똑해서 확률(두 소수를 보존하는 확률계)이 가장 높은 세 수를 찾아내고 확률이 같으면 그 중에서 포인트와 가장 작은 수를 선택하려고 생각했다.ZL이 세 개씩 쓸 것 같아요?
입력:
여러 그룹의 데이터를 입력합니다.
각 그룹의 데이터 한 줄에는 2개의 정수 n(0<=n<=10), m(6<=m<=8), n은 YZ가 꺼낸 주사위 수를 나타내고, m는 주사위가 가진 포인트를 나타낸다.n=0이면 입력이 종료됩니다.
출력:
각 그룹의 데이터에 대응하여 ZL이 가장 순서대로 쓸 수 있는 점과 그에 대응하는 확률 값을 출력합니다.확률치는 4 반올림 요구에 따라 2위 소수를 보류한다.각 그룹의 데이터 사이에 한 줄이 비어 있습니다. 주의: 마지막 그룹의 데이터 끝에 빈 줄이 없습니다.
샘플 입력:
1 6
4 6
3 7
0
샘플 출력:
1 0.17
2 0.17
3 0.17
13 0.11
14 0.11
15 0.11
12 0.11
10 0.10
11 0.10
생각:
주사위를 여러 번 던져서 얻은 합이 A라는 뜻으로 그 분포에서 가장 높은 확률이 나오는 세 수를 찾아낸다.
과감하게 귀속되거나 동적 기획으로 해결하고 N+1차 이후의 결과는 N차 결과에서 나온다.
코드:
#include <stdio.h>
#include <stdlib.h>
#define N 10
#define M 8
struct node {
int index;
double p;
} c[N*M+1];
int cmp(const void *a, const void *b)
{
struct node *c = (struct node *)a;
struct node *d = (struct node *)b;
if (c->p != d->p)
return (d->p > c->p) ? 1 : -1;
else
return c->index - d->index;
}
int main(void)
{
int n, m, i, j, k;
double a[N*M+1];
double b[N*M+1];
int count;
count = 0;
while (scanf("%d", &n) != EOF && n)
{
scanf("%d", &m);
b[0] = 1;
for(i=1; i<=n; i++)
{
for (j=i; j<=i*m; j++)
{
a[j] = 0;
for (k=j-1; k>=j-m; k--)
{
if (k>=i-1 && k<=(i-1)*m)
a[j] += b[k]/m;
}
//if (i == n)
// printf("%d: %.4lf
", j, a[j]);
}
for (j=i; j<=i*m; j++)
b[j] = a[j];
}
for (i=n; i<=n*m; i++)
{
c[i-n].index = i;
double t0 = a[i]*100;
double t1 = (double)((int)t0);
double t2 = (double)((int)t0+1);
double t;
if (t0-t1 < t2-t0)
t = t1;
else
t = t2;
c[i-n].p = t/100;
}
qsort(c, (m-1)*n+1, sizeof(c[0]), cmp);
if (count > 0)
printf("
");
for (i=0; i<3; i++)
printf("%d %.2lf
", c[i].index, c[i].p);
count ++;
}
return 0;
}
/**************************************************************
Problem: 1360
User: liangrx06
Language: C
Result: Accepted
Time:10 ms
Memory:916 kb
****************************************************************/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
java 백엔드에서 데이터를 트리로 변환하고 맵은 json 트리를 생성하여 백엔드로 되돌려줍니다. (백엔드 변환)java 백엔드, 데이터를 트리로 변환하고,map는 json 트리를 생성하여 전방으로 되돌려줍니다(백엔드 변환) 1. 왜 이런 블로그를 쓰나요? 2.java 백엔드 코드 3. 전환된 데이터는 다음과 유사한 형식으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.