刚开始还苦恼着要不要自己重新再推一个公式出来
后来发现他给的空间和时间限制,应该是足够的,就试了一下,结果就是上面这样子。
题目思路就是:首先生成结果
主程序里直接调用就可以了。
代码如下:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
#include<stdio.h>
#include<string.h>
int a[500005];
bool f[3012505];
void init()
{
int i;
memset(f,0,sizeof(f));
a[0] = 0;
for(i=1;i<=500000;i++){
if(a[i-1]-i > 0 && ! f[a[i-1]-i]){
a[i]=a[i-1]-i;
f[a[i-1]-i] = 1;
}
else{
a[i]=a[i-1]+i;
f[a[i-1]+i]=1;
}
}
}
int main()
{
int k;
init();
while(scanf("%d",&k),k!=-1){
printf("%d\n",a[k]);
}
return 0;
}