PS: 此题目可以用DP解决,如果打表时间会很快。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <set>
#include <algorithm>
using namespace std;
const int maxn = 500100;
//Accepted 19140K 2454MS C++ 648B 2014-04-10 11:11:04
int d[maxn];
set<int> s;
void dp() {
s.clear();
s.insert(0);
d[0] = 0;
for(int i = 1; i <= 500001; i++) {
d[i] = d[i-1] - i;
if(d[i]>0 && s.count(d[i])==0) {
s.insert(d[i]);
continue;
}
else {
d[i] = d[i-1] + i;
s.insert(d[i]);
}
}
}
int main()
{
dp();
int n;
while(scanf("%d", &n)==1 && n!=-1) {
printf("%d\n", d[n]);
}
return 0;
}