Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

求测试数据,代码如下

Posted by temp_ptr at 2011-10-06 15:42:14 on Problem 1644
#include <iostream>
#include <fstream>
#include <memory.h>
#include <algorithm>
using namespace std;
#define LOST 0x7fffffff
const int M = 52, T = 41;
int case_num, m, t, instruction[M], next, curr;
double ans, dp[2][M];
double lost_this_turn[2][M];
int Clamp(int x)
{
	return (x < 0 ? 0 :(x > m ? m+1 : x));
}
void Jump(int slot, int step)
{
	int jump = Clamp(slot+step);
	double temp = (0.5*dp[curr][slot]);
	if(instruction[jump] == LOST)
	{
		dp[next][jump] += temp;
		lost_this_turn[next][jump] += temp;
	}
	else
		dp[next][Clamp(jump+instruction[jump])] += temp;
}
int main()
{
	fstream fin("1644.txt");
	char c;
	fin>>case_num;
	while(case_num--)
	{
		memset(dp, 0, sizeof(dp));
		memset(instruction, 0, sizeof(instruction));
		memset(lost_this_turn, 0, sizeof(lost_this_turn));
		dp[0][0] = 1.0;
		fin>>m>>t;
		for(int i = 1; i <=m ; i++)
		{
			fin>>c;
			if(c == 'L')
				instruction[i] = LOST;
			else
			{
				if(c != '+')
					fin.putback(c);
				fin>>instruction[i];
			}
		}
		/////////////////////////
		next = 1; curr = 0;
		for(int turn = 0; turn < t; turn++)
		{
			for(int i = 0; i <= m+1; i++)//clear next
			{
				dp[next][i]= 0.0;
				lost_this_turn[next][i] = 0.0;
			}
			for(int slot = 0; slot <= m+1; slot++)
			{
				if(dp[curr][slot])
				{
					dp[next][slot] += lost_this_turn[curr][slot];
					dp[curr][slot] -= lost_this_turn[curr][slot];
					if(slot == m+1)
						dp[next][slot] += dp[curr][slot];
					else
					{
						Jump(slot, 1);
						Jump(slot, 2);
					}
				}
			}
			next = 1-next; curr = 1-curr;
		}
		next = 1-next;
		ans = dp[next][m+1];
		int test = (int)(ans*10000+0.5);
		if(test == 5000)
			printf("%s%.4f\n", "Push. ", test/10000.0f);
		else if(test > 5000)
			printf("%s%.4f\n", "Bet for. ", test/10000.0f);
		else
			printf("%s%.4f\n", "Bet against. ", test/10000.0f);
	}
	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator