直接打表500000个数据即可
判别数组需要开的大一点,以免RE
代码如下:
#include <cstdio>
#include <cstring>
#define MAXN 10000000
using namespace std;
bool vis[MAXN];
int a[500100];
void init() {
a[0] = 0;
memset(vis, false, sizeof(vis));
for(int i=1; i<=500000; ++i) {
int tmp = a[i-1]-i;
if(tmp>0 && !vis[tmp])
a[i] = tmp;
else a[i] = a[i-1]+i;
vis[a[i]] = true;
}
}
int main(void) {
init();
int n;
while(scanf("%d", &n) && (n!=-1)) {
printf("%d\n", a[n]);
}
return 0;
}