ZOJ2345Gold Coins 简单分块

来源:互联网 发布:php和java哪个工资高 编辑:程序博客网 时间:2024/06/04 19:43

昨天做过一样的题:

平方和公式:n*(n+1)*(2n+1)

#include<cstdio>#include<cstdlib>#include<iostream>using namespace std;int a[150],num;int b[150];int _S(){char c=getchar();int s=0;while(c<'0'||c>'9') c=getchar();while(c>='0'&&c<='9'){s=s*10+c-'0';c=getchar();}return s;}void _db(){for(int i=1;i<=141;i++)a[i]=(i+1)*i/2;for(int i=1;i<=141;i++)    b[i]=i*(i+1)*(2*i+1)/6;return ;}void _get(int v){int tmp,ans;    for(int i=1;i<=141;i++)     if(a[i]<=v) tmp=i;//当然也可以用二分查找或者lower_bound    ans=b[tmp];     ans+=(v-a[tmp])*(tmp+1);     printf("%d %d\n",v,ans);     return ;}int main(){_db();int T,n,x;T=_S();while(T--){while(true){x=_S();if(x==0) break;_get(x);}if(T) printf("\n");}return 0;}

原创粉丝点击