难道真就是这样暴力出来的,有什么神级解法么?我竟然连Am的范围都是自己随便猜的一个10000000就直接过了,有好解法的请联系我,求赐教。
#include<cstdio> #include<cstring> #include<iostream> #define N 500001 using namespace std; long long arr[N]; bool vis[10000001]; void ini() { memset(vis,false,sizeof(vis)); arr[0] = 0; vis[0] = true; for(int i=1;i<N;++i) { long long x = arr[i-1] - i; if(x>0&&!vis[x]) arr[i] = x; else arr[i] = arr[i-1] + i; vis[arr[i]] = true; } } int main(void) { int m; ini(); while(cin>>m,m!=-1) { cout<<arr[m]<<endl; } return 0; }