没有计算就直接打表了,MLE了 = =。。 打的表太大了。。。我缩点。。。这个序列的最大数(k<=50w)不超过400W。。。 打300W编译器没响应,肯定是超界了,400可以过。。 #include <stdio.h> #include <stdlib.h> #include <iostream> #include <string.h> using namespace std; int a[500010]; int in[4000000]; int main() { int n,i; a[0] = 0; in[0] = 1; for(i=1; i<=500000; i++) { if( a[i-1]-i > 0 && !in[a[i-1]-i] ) { in[a[i-1]-i] = 1; a[i] = a[i-1]-i; } else { in[a[i-1]+i] = 1; a[i] = a[i-1]+i; } } while( scanf("%d",&n) != EOF && n != -1 ) { printf("%d/n",a[n]); } return 0; }