Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Author : Chillax
- * 禁止任何形式商用
- * 首发TapTap论坛,转载请注明出处: https://www.taptap.com/topic/11555825
- */
- #include <iostream>
- #include <string.h>
- #include <iomanip>
- using namespace std;
- #define N_MAX 2048
- int maxN = 0; //总数
- #define M_MAX 64
- int maxM = 0; //成功数
- #define K_MAX 99
- int startK = 0; //初始k值
- #define P_WIN 0.014
- // P[n][m][k]表示抽取n次,抽中m次,在这次及这次之前共k次连续未抽中
- double P[N_MAX + 1][M_MAX + 1][K_MAX + 1];
- double Cal(int n, int m, int k)
- {
- if (n < 0 || m < 0 || k < 0 || n > maxN || m > maxM || k > K_MAX)
- return 0;
- if (P[n][m][k] <= 1)
- return P[n][m][k];
- if (k == 0) //抽中
- {
- double temp = 0, tsum = 0;
- for (int i = 0; i < K_MAX; i++)
- tsum += Cal(n - 1, m - 1, i);
- temp += tsum * P_WIN;
- temp += Cal(n - 1, m - 1, 99) * 1.0;
- P[n][m][k] = temp;
- return temp;
- }
- else //没抽中
- {
- double temp = Cal(n - 1, m, k - 1) * (1 - P_WIN);
- P[n][m][k] = temp;
- return temp;
- }
- }
- double CalSum(int n, int m)
- {
- double res = 0;
- for (int i = 0; i <= K_MAX; i++)
- res += Cal(n, m, i);
- return res;
- }
- double CalSumK(int n, int m)
- {
- double res = 0;
- for (int i = 0; i < K_MAX; i++)
- res += Cal(n, m, i) * i;
- return res;
- }
- /*
- * arg1 : 抽取次数
- * arg2 : 抽中次数显示上限
- * [arg3] : 抽取前已有保底次数
- */
- int main(int argc, char *argv[])
- {
- if (argc < 3)
- {
- cout << "Need more arg!" << endl;
- return 0;
- }
- maxN = atoi(argv[1]);
- maxM = atoi(argv[2]);
- if (argc >= 4)
- startK = atoi(argv[3]);
- if (maxN > N_MAX || maxM > M_MAX || startK > K_MAX)
- {
- cout << "Out of range!" << endl;
- return 0;
- }
- memset(P, 0x42, sizeof(P));
- P[0][0][startK] = 1;
- double restSum = 1.0;
- cout << fixed << setprecision(8);
- for (int i = 0; i <= maxM; i++)
- {
- double temp = CalSum(maxN, i);
- cout.width(2);
- cout << i << ' ' << temp << ' ' << restSum << ' ' << (temp == 0 ? -1 : CalSumK(maxN, i) / temp) << endl;
- restSum -= temp;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement