P2660 zzc 种田

原题链接

考察:gcd(?)思想

这道题的递归很容易写.基本改改gcd模板就可以.但是这样会MLE.比如这样的数据:100000000000000和1.这样long long 要调用100000000000000次.而主函数的栈必然会爆掉.这道题用ll不优化递归过不了更别说unsigned long long了.

本题可以用循环写.但是不优化会TLE最后一个点

优化思路:

       边长相同的正方形一块种掉.比如数据4 2,如果用减法需要两次.用除法和取余只需1次种的体力为4*b*(a/b),a%=b.这样就一块种掉了相同的边长的正方形

 1 #include <iostream>
 2 using namespace std;
 3 typedef long long ll;
 4 //void Get(ll a, ll b)
 5 //{
 6 //    
 7 //} 
 8 int main()
 9 {
10     ll a,b,ans = 0;
11     scanf("%lld%lld",&a,&b);
12     while(a&&b)
13     {
14         if(a<b) swap(a,b);
15         ans+=4*b*(a/b);
16         a%=b;
17     }
18     printf("%lld\n",ans);
19     return 0;
20 } 
循环的写法

递归的优化思路也是一样

posted @ 2021-01-19 16:58  acmloser  阅读(55)  评论(0编辑  收藏  举报