题目分析:http://202.197.224.59/OnlineJudge2/index.php/Problem/read/id/1142
#include<iostream> #include<cstdio> using namespace std; struct node{ __int64 num,sum; int flag; }arr[10000020]; int main() { int a,b; __int64 num,sum; for(int i=1;i<1000010;i++) arr[i].flag=0; arr[1].flag=true; arr[1].num=1; arr[1].sum=0; while(scanf("%d %d",&a,&b)!=EOF) { for(int i=a;i<=b;i++) { __int64 n=i; sum=0; num=n; while(n!=1) { if(n<1000010&& arr[n].flag==1) { sum+=arr[n].sum; if(arr[n].num>num) num=arr[n].num; break; } else { if(n%2==0) n/=2; else { n=3*n+1; if(n>num) num=n; } sum++; } }//****for arr[i].num=num; arr[i].sum=sum; arr[i].flag=1; } num=0,sum=0; for(int i=a;i<=b;i++) { if(arr[i].num>num) num=arr[i].num; sum+=arr[i].sum; } printf("%I64d %I64d\n",sum,num); } //system("pause"); return 0; }