您的位置:首页 > 产品设计 > UI/UE

poj 2081 Recaman's Sequence【hash】

2014-08-04 10:37 309 查看
题目意思不难理解就是第m个位置的数是根据第m-1位置的数推出来的如果a[m-1]-m>0,并且a[m-1]-m在前面的序列中没有出现过那么a[m] = a[m-1]-m否则a[m] = a[m-1]+m

另外唯一需要注意的一点就是hash数组开大一点。

//打表

#include <stdio.h>
#include <iostream>

using namespace std;

const int MAXN=500003;

int a[MAXN]={0};
bool hash[10000000]={false};

void prepare()
{
	//预处理表
	int i;
	for(i=1;i<MAXN-1;i++)
	{
		if (a[i-1]-i>0 && hash[a[i-1]-i]==false)
		{
			a[i]=a[i-1]-i;

			//改变hash值
			hash[a[i-1]-i]=true;
		}

		else
		{
			a[i]=a[i-1]+i;

			//改变hash值
			hash[a[i-1]+i]=true;
		}
	}
}

int main()
{
	int k;

	prepare();

	while(~scanf("%d",&k) && k!=-1)
		printf("%d\n",a[k]);

	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: