結果

問題 No.1688 Veterinarian
ユーザー LayCurse
提出日時 2021-09-04 07:53:12
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 71 ms / 3,000 ms
コード長 4,944 bytes
コンパイル時間 3,077 ms
コンパイル使用メモリ 227,496 KB
最終ジャッジ日時 2025-01-24 07:41:33
ジャッジサーバーID
(参考情報)
judge1 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 14
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("inline")
#include<bits/stdc++.h>
using namespace std;
inline int my_getchar_unlocked(){
static char buf[1048576];
static int s = 1048576;
static int e = 1048576;
if(s == e && e == 1048576){
e = fread_unlocked(buf, 1, 1048576, stdin);
s = 0;
}
if(s == e){
return EOF;
}
return buf[s++];
}
struct MY_WRITER{
char buf[1048576];
int s;
int e;
MY_WRITER(){
s = 0;
e = 1048576;
}
~MY_WRITER(){
if(s){
fwrite_unlocked(buf, 1, s, stdout);
}
}
}
;
MY_WRITER MY_WRITER_VAR;
void my_putchar_unlocked(int a){
if(MY_WRITER_VAR.s == MY_WRITER_VAR.e){
fwrite_unlocked(MY_WRITER_VAR.buf, 1, MY_WRITER_VAR.s, stdout);
MY_WRITER_VAR.s = 0;
}
MY_WRITER_VAR.buf[MY_WRITER_VAR.s++] = a;
}
inline void wt_L(char a){
my_putchar_unlocked(a);
}
int WRITER_DOUBLE_DIGIT = 15;
inline int writerDigit_double(){
return WRITER_DOUBLE_DIGIT;
}
inline void writerDigit_double(int d){
WRITER_DOUBLE_DIGIT = d;
}
inline void wt_L(double x){
const int d = WRITER_DOUBLE_DIGIT;
int k;
int r;
double v;
if(x!=x || (x==x+1 && x==2*x)){
my_putchar_unlocked('E');
my_putchar_unlocked('r');
my_putchar_unlocked('r');
return;
}
if(x < 0){
my_putchar_unlocked('-');
x = -x;
}
x += 0.5 * pow(0.1, d);
r = 0;
v = 1;
while(x >= 10*v){
v *= 10;
r++;
}
while(r >= 0){
r--;
k = floor(x / v);
if(k >= 10){
k = 9;
}
if(k <= -1){
k = 0;
}
x -= k * v;
v *= 0.1;
my_putchar_unlocked(k + '0');
}
if(d > 0){
my_putchar_unlocked('.');
v = 1;
for(r=(0);r<(d);r++){
v *= 0.1;
k = floor(x / v);
if(k >= 10){
k = 9;
}
if(k <= -1){
k = 0;
}
x -= k * v;
my_putchar_unlocked(k + '0');
}
}
}
long long cReader_ll(long long mn, long long mx, char nx){
int i;
int fg = 0;
int m = 1;
int f = -1;
long long res = 0;
double tmp = 0;
for(;;){
i = my_getchar_unlocked();
if(fg==0 && i=='-'){
fg++;
m = -1;
}
else if('0' <= i && i <= '9'){
fg++;
if(f == -1){
f = i - '0';
}
res = 10 * res + i - '0';
tmp = 10 * tmp + i - '0';
assert(tmp < 1e20);
}
else{
break;
}
}
assert(tmp / 2 <= res);
assert((m==1 && fg >= 1) || (m==-1 && fg >= 2));
assert(mn <= m * res && m * res <= mx);
assert(!(res == 0 && m == -1));
assert(!(res != 0 && f == 0));
assert(!(res == 0 && fg >= 2));
assert(i == nx);
return m * res;
}
void cReader_eof(){
int i;
i = my_getchar_unlocked();
assert(i == EOF);
}
int A;
int B;
int C;
int N;
double dp[51][51][51];
double p[51][151];
double tmp;
double res[3];
int main(){
int cTE1_r3A, i;
A = cReader_ll(1, 50, ' ');
B = cReader_ll(1, 50, ' ');
C = cReader_ll(1, 50, ' ');
N = cReader_ll(1, 50, '\n');
cReader_eof();
for(i=(1);i<(51);i++){
int j;
for(j=(3);j<(151);j++){
p[i][j] = ((double) i * (i-1)) / ((double) j * (j-1));
}
}
dp[A][B][C] = 1;
for(cTE1_r3A=(0);cTE1_r3A<(N);cTE1_r3A++){
for(i=(1);i<(A+1);i++){
int j;
for(j=(1);j<(B+1);j++){
int k;
for(k=(1);k<(C+1);k++){
tmp = dp[i][j][k];
dp[i-1][j][k] += tmp * p[i][i+j+k];
dp[i][j-1][k] += tmp * p[j][i+j+k];
dp[i][j][k-1] += tmp * p[k][i+j+k];
dp[i][j][k] -= tmp * (p[i][i+j+k] + p[j][i+j+k] + p[k][i+j+k]);
}
}
}
}
for(i=(1);i<(A+1);i++){
int j;
for(j=(1);j<(B+1);j++){
int k;
for(k=(1);k<(C+1);k++){
res[0] += (A-i) * dp[i][j][k];
res[1] += (B-j) * dp[i][j][k];
res[2] += (C-k) * dp[i][j][k];
}
}
}
{
int jbtyPBGc;
if(3==0){
wt_L('\n');
}
else{
for(jbtyPBGc=(0);jbtyPBGc<(3-1);jbtyPBGc++){
wt_L(res[jbtyPBGc]);
wt_L(' ');
}
wt_L(res[jbtyPBGc]);
wt_L('\n');
}
}
return 0;
}
// cLay version 20210819-1 [beta]
// --- original code ---
// int A, B, C, N;
// double dp[51][51][51], p[51][151], tmp, res[3];
// {
// A = cReader_ll(1, 50, ' ');
// B = cReader_ll(1, 50, ' ');
// C = cReader_ll(1, 50, ' ');
// N = cReader_ll(1, 50, '\n');
// cReader_eof();
// rep(i,1,51) rep(j,3,151) p[i][j] = ((double) i * (i-1)) / ((double) j * (j-1));
// dp[A][B][C] = 1;
// rep(N){
// rep(i,1,A+1) rep(j,1,B+1) rep(k,1,C+1){
// tmp = dp[i][j][k];
// dp[i-1][j][k] += tmp * p[i][i+j+k];
// dp[i][j-1][k] += tmp * p[j][i+j+k];
// dp[i][j][k-1] += tmp * p[k][i+j+k];
// dp[i][j][k] -= tmp * (p[i][i+j+k] + p[j][i+j+k] + p[k][i+j+k]);
// }
// }
// rep(i,1,A+1) rep(j,1,B+1) rep(k,1,C+1){
// res[0] += (A-i) * dp[i][j][k];
// res[1] += (B-j) * dp[i][j][k];
// res[2] += (C-k) * dp[i][j][k];
// }
// wt(res(3));
// }
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0