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 }
递归的优化思路也是一样