#include <stdio.h>
#include <stdlib.h>

int drawmulti(int npart, double *part) {
	double draw;
	int i;
	draw = drand48();
	for (i=0; i<npart-1; i++)
		if (draw>=part[i] && draw<part[i+1]) break;
	return i;
}

int main(int argc, char **argv) {

/* usage: bustorroyal nreps pfile */

	int i, nreps, ns, np, hand, npart;
	char pfile[FILENAME_MAX], *rfile="pbust.txt";
	FILE *pf, *outf;
	long bankroll, balance;
	double pbust;
	
	if (argc != 3) exit(1);
	nreps = atoi(argv[1]);
	strcpy(pfile, argv[2]);
	pf = fopen(pfile, "r");
	outf = fopen(rfile, "w");
	fscanf(pf, "%d", &np);
	npart = np+1;
	double *probs = (double *)calloc(np, sizeof(double));
	double *pays = (double *)calloc(np, sizeof(double));
	double *part = (double *)calloc(np+1, sizeof(double));
	part[0] = 0.0;
	for (i=0; i<np; i++) {
		fscanf(pf, "%lf", probs+i);
		part[i+1] = part[i] + probs[i];
	}
	for (i=0; i<np; i++) fscanf(pf, "%lf", pays+i);
	/* debug */
	for (i=0; i<np; i++) printf("%5.0f %8.5f %8.5f %8.5f\n", pays[i], probs[i], part[i], part[i+1]);
	for (bankroll=100; bankroll<=1000; bankroll += 25) {
		ns=0;
		for (i=0; i<nreps; i++) {
			balance=bankroll;
			do {
				hand = drawmulti(npart, part);
				if (hand == np-1) {
					++ns;
					break;
				}
				balance = balance-1+pays[hand];
			} while (balance > 0);
		}
		pbust = 1.0 - (double)ns/(double)nreps;
		fprintf(outf, "%ld %G\n", bankroll, pbust);
		printf("%8ld %8.5f\n", bankroll, pbust);
	}
	exit(0);
}
