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

Re:NB,这也能ac,而且把注释掉的初始化部分加上去还变RE....

Posted by zgjzweig at 2010-04-06 10:30:17 on Problem 3756
In Reply To:NB,这也能ac,而且把注释掉的初始化部分加上去还变RE.... Posted by:PlayerII at 2010-04-05 09:27:06
注释掉的部分用了变量top,但是top的赋值在后面


> #include <iostream>
> using namespace std;
> 
> int chess[205];
> int step[205],n;
> 
> double p[2024][205];
> 
> void correct(int &num)
> {
> 	while(num < 0 || num > n)
> 	{
> 		if (num < 0)
> 			num = -num;
> 		else if (num > n)
> 			num = 2*n-num;
> 	}
> }
> 
> int main()
> {
> 	int i,nb,nf,ns,num,round,pos,dice,top,j;
> 	while(scanf("%d",&n) == 1)
> 	{
> 		memset(chess,-1,sizeof(chess));
> 		scanf("%d",&nf);
> 		for (i = 0; i < nf; i++)
> 		{
> 			scanf("%d",&num);
> 			chess[num] = 3;
> 			scanf("%d",&step[num]);
> 		}
> 		scanf("%d",&nb);
> 		for (i = 0; i < nb; i++)
> 		{
> 			scanf("%d",&num);
> 			chess[num] = 1;
> 			scanf("%d",&step[num]);
> 		}
> 		scanf("%d",&ns);
> 		for (i = 0; i < ns; i++)
> 		{
> 			scanf("%d",&num);
> 			chess[num] = 2;
> 		}
> /*
> 		for (i = 0; i <= top; i++)
> 		{
> 			for (j = 0; j <= n; j++)
> 			{
> 				p[i][j] = 0;
> 			}
> 		}
> */
> 
> 		double once = 1.0/6.0;
> 		p[0][0] = 1;
> 		top = 1000;
> 		for (round = 0; round <= top; round ++)
> 		{
> 			for (pos = 0; pos < n; pos++)
> 			{
> 				if (p[round][pos] > 0)
> 				{
> 					for (dice = 1; dice <= 6; dice ++)
> 					{
> 						int next = dice+pos;
> 						correct(next);
> 
> 
> 						if (next >= 0 && next <= n)
> 
> 						if (chess[next] == -1)
> 						{
> 							p[round+1][next] += (p[round][pos])*once;
> 						}
> 						else if (chess[next] == 1)
> 						{
> 							next -= step[next];
> 							correct(next);
> 							if (next >= 0 && next <= n)
> 							p[round+1][next] += (p[round][pos])*once;
> 						}
> 						else if (chess[next] == 2)
> 						{
> 							p[round+2][next] += (p[round][pos])*once;
> 						}
> 						else if (chess[next] == 3)
> 						{
> 							next += step[next];
> 							correct(next);
> 							if (next >= 0 && next <= n)
> 							p[round+1][next] += (p[round][pos])*once;
> 						}
> 					}
> 				}
> 			}
> 		}
> 		double ans = 0;
> 		for (i = 0; i <= top; i++)
> 		{
> 			ans += p[i][n]*i;
> 		}
> 		if (ans > 0)
> 			printf("%.2lf\n",ans);
> 		else printf("Impossible\n");
> 	}
> 	return 0;
> }
> /*
> 1
> 0
> 0
> 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