题目链接:http://poj.org/problem?id=2081;
题目大意: a0 = 0, m > 0, am = am−1 − m如果得到的am为正数并且(a0,...,am−1) 序列中不存在该数,否则 am = am−1 + m.
题目思路:直接打表,再用一个数组标记已经存在序列中的数。
#include
#include
using namespace std;
typedef long long ll;
ll ans[500100];
int flag[10000000];
int main()
{
long i;
long k;
ll temp;
memset(flag,0,sizeof(flag));
ans[0] = 0;
flag[0] = 1;
for(i = 1;i < 500010;i++)
{
temp = ans[i-1] - i;
if(temp > 0 && !flag[temp])
ans[i] = temp;
else
ans[i] = ans[i-1] + i;
flag[ans[i]] = 1;
}
while(cin >> k)
{
if(k == -1)break;
cout << ans[k] << endl;
}
return 0;
}