(简单模拟2.4.1)POJ 2000 Gold Coins(确定大数字序列中的某一位置在小数字序列中的位置)

2014-11-24 03:25:52 · 作者: · 浏览: 0
/*
 * POJ_2000.cpp
 *
 *  Created on: 2013年10月24日
 *      Author: Administrator
 */


#include 
  
   
#include 
   
     using namespace std; const int maxn = 5001; long long a[maxn];//a[i] :第i组数字序列的长度 long long s[maxn];//s[i] :前i组数字序列的长度 void prepare(){ int i; a[1] = 1; s[1] = 1; for(i = 2 ; i < 5000 ; ++i){ a[i] = i; s[i] = s[i-1] + a[i]; } } int main(){ prepare(); int n; while(scanf("%d",&n)!=EOF,n){ int i = 1; while(s[i] < n){ i++; } int index = i - 1; int pos = n - s[i - 1]; long long sum = 0; for(i = 1 ; i <= index ; ++i){ sum += a[i]*i; } sum += pos*a[i]; printf("%d %lld\n",n,sum); } return 0; }