首页 > 代码库 > CSU 1337 搞笑版费马大定理(2013湖南省程序设计竞赛J题)

CSU 1337 搞笑版费马大定理(2013湖南省程序设计竞赛J题)

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1337

解题报告:虽然x和y的范围都是10^8,但是如果a 是大于1000的话,那么a^3就会大于10^9,这样等号的右边只有一个10 * c + 3,这个最大只能达到10^9数量级,所以,不管输入的x跟y是多少,我们只要取其中的在1到1000的区间就可以了,枚举a和b,那么c就可以得到,然后判断c的范围是不是在x到y之间,这样时间复杂度就降到了10^6.

 1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #include<cstdlib> 6 using namespace std; 7 typedef long long INT; 8 INT th[1005]; 9 void dabiao()10 {11     for(INT i = 1;i <= 1000;++i)12     th[i] = i * i * i;13 }14 int main()15 {16     dabiao();17     INT x,y;18     int kase = 1;19     while(scanf("%lld%lld",&x,&y)!=EOF)20     {21         INT ans = 0;22         INT a = min(x,(INT)1000);    //不存在大于1000的 23         INT b = min(y,(INT)1000);24         for(INT i = a;i <= b;++i)25         for(INT j = a;j <= b;++j)26         {27             INT s = th[i] + th[j];28             if(s % 10 == 3 && s / 10 <= y)29             ans++;30         }31         printf("Case %d: %lld\n",kase++,ans);32     }33     return 0;34 }    
View Code

 

CSU 1337 搞笑版费马大定理(2013湖南省程序设计竞赛J题)