結果
| 問題 | No.58 イカサマなサイコロ |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-04-24 23:53:22 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 4,033 ms / 5,000 ms |
| コード長 | 2,882 bytes |
| 記録 | |
| コンパイル時間 | 1,322 ms |
| コンパイル使用メモリ | 162,268 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-07-05 01:34:31 |
| 合計ジャッジ時間 | 46,240 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 10 |
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:85:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
85 | scanf("%d%d", &n, &k);
| ~~~~~^~~~~~~~~~~~~~~~
ソースコード
#include <bits/stdc++.h>
using namespace std;
const int N = 624;
const int M = 397;
const unsigned int MATRIX_A = 0x9908b0dfU;
const unsigned int UPPER_MASK = 0x80000000U;
const unsigned int LOWER_MASK = 0x7fffffffU;
vector<unsigned int> mt;
int mti = N + 1;
void init_genrand(unsigned int s) {
mt.push_back(s & 0xffffffffU);
for(mti=1; mti<N; mti++) {
mt.push_back(1812433253U * (mt[mti-1] ^ (mt[mti-1] >> 30)) + mti);
mt[mti] &= 0xffffffffU;
}
}
void init_by_array(vector<unsigned int> init_key) {
int key_length = init_key.size();
init_genrand(19650218U);
int i = 1, j = 0;
int k = N > key_length ? N : key_length;
for( ; k; k--) {
mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1664525U)) + init_key[j] + j;
mt[i] &= 0xffffffffU;
i++; j++;
if(i >= N) { mt[0] = mt[N-1]; i = 1; }
if(j >= key_length) { j = 0; }
}
for(k=N-1; k; k--) {
mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1566083941U)) - i;
mt[i] &= 0xffffffffU;
i++;
if(i >= N) { mt[0] = mt[N-1]; i = 1; }
}
mt[0] = 0x80000000U;
}
unsigned int genrand_int32(void) {
unsigned int y;
static unsigned int mag01[2] = {0x0U, MATRIX_A};
if(mti >= N) {
if(mti == N + 1) { init_genrand(5489U); }
int kk;
for(kk=0; kk<N-M; kk++) {
y = (mt[kk] & UPPER_MASK) | (mt[kk+1] & LOWER_MASK);
mt[kk] = mt[kk+M] ^ (y >> 1) ^ mag01[y & 0x1U];
}
for(; kk<N-1; kk++) {
y = (mt[kk] & UPPER_MASK) | (mt[kk+1] & LOWER_MASK);
mt[kk] = mt[kk+(M-N)] ^ (y >> 1) ^ mag01[y & 0x1U];
}
y = (mt[N-1] & UPPER_MASK) | (mt[0] & LOWER_MASK);
mt[N-1] = mt[M-1] ^ (y >> 1) ^ mag01[y & 0x1U];
mti = 0;
}
y = mt[mti++];
y ^= (y >> 11);
y ^= (y << 7) & 0x9d2c5680U;
y ^= (y << 15) & 0xefc60000U;
y ^= (y >> 18);
return y;
}
int genrand_int31(void) {
return (int)(genrand_int32() >> 1);
}
int main(void) {
clock_t start = clock();
time_t seed = time(0);
vector<unsigned int> init;
init.push_back(0x123);
init.push_back(0x234);
init.push_back(0x345);
init.push_back(0x456);
init.push_back(seed);
init_by_array(init);
int n, k;
int turn, win;
scanf("%d%d", &n, &k);
for(turn=1, win=0; ; turn++) {
int taro = 0, jiro = 0;
for(int i=0; i<n-k; i++) {
taro += genrand_int31() % 6 + 1;
jiro += genrand_int31() % 6 + 1;
}
for(int i=n-k; i<n; i++) {
taro += genrand_int31() % 3 + 4;
jiro += genrand_int31() % 6 + 1;
}
if(taro > jiro) { win++; }
clock_t now = clock();
if((now - start) / CLOCKS_PER_SEC >= 4) {
break;
}
}
printf("%f\n", win * 1. / turn);
return 0;
}