#include<iostream.h>

void main(void)
{
	int t,x,trial,RWer,RWer_counter[2001],jump_counter;
	double RV,Q[2001],T,sum_T;
	
	srand((unsigned int)time(NULL));
	
	//場所xにいるランダムウォーカーの数（初期化）
	for(x=-1000;x<=1000;x++)	RWer_counter[1000+x]=0;
	
	//ランダムウォーカー500個をそれぞれシミュレーション
	for(trial=0;trial<500;trial++)
	{
		//時刻100までに起こるランダムウォーカーの移動回数を決める
		jump_counter=0;//移動回数（初期化）
		sum_T=0;//移動間隔の和（移動時刻）（初期化）
		
		while(sum_T<=100)
		{
			RV=(double)rand()/(double)(RAND_MAX+1);
			
			T=(-log(1.0-RV)/1.0);//時間間隔
			sum_T+=T;//時間間隔を足す
			
			if(sum_T<=100)	jump_counter++;//移動回数を1回増やす
		}
		
		//ランダムウォーク開始
		RWer=0;
		
		for(t=0;t<jump_counter;t++)
		{
			RV=(double)rand()/(double)(RAND_MAX+1);
			
			if(RV<0.5)	RWer--;
			else	RWer++;
		}
		
		//ランダムウォーカーが到達した場所のカウンターを1つ増やす
		RWer_counter[1000+RWer]++;
	}
	
	//場所xにいるランダムウォーカーの相対頻度
	for(x=-1000;x<=1000;x++)
	{
		Q[1000+x]=(double)RWer_counter[1000+x]/500;
		printf("Q(%d)=%f\n",x,Q[1000+x]);
	}
}