B4213题解
shenhuo2013 · · 题解
已修改部分细节 (错别字) 及排版 。
首先放上 AC 代码。
#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b){ // 最大公约数
if(b == 0) return a;
return gcd(b, a % b); // 用递归实现的最大公约数
}
int main(){
long long l, v1, v2, t;
cin >> l >> v1 >> v2 >> t;
if(v1 < v2){
swap(v1, v2);
}
if(v1 == 0){ // 较快的一只青蛙速度是0,说明较慢的一只速度也为0
cout << 0 << endl;
return 0;
}
if(v2 == 0){ // 较慢的一只青蛙速度是0,只需要考虑较快青蛙的速度
cout << ( v1 * t / l + 1) / 2 << endl;
return 0;
}
long long sum= v1 + v2, subs = v1 - v2; // sum为和,subs为差
long long ans= (sum * t + l) / (2 * l)+(subs * t + l) / (2 * l);
// 核心部分
long long d= gcd(v1, v2);
if( (v2 / d % 2) != (v1 / d % 2)) // 一个数为奇数,另一个数为偶数的情况
ans -= (d * t+ l) / (2 * l);
cout << ans << endl;
return 0;
}
现在来看题目。
最初我审题时,认为这只是一道用顺序结构就能搞定的题目,即先算出在
可这样做只能得到 60 分。
代码 :
#include <bits/stdc++.h>
using namespace std;
long long L,V1,V2,T,ans,sum;
int main () {
cin>> L >> V1 >> V2 >> T ;
sum =(V1+V2)*T;
ans= (sum+L) * 1.0 / (L * 2);
cout<< ans;
return 0;
}
接着再想一想,能不能优化一下呢 ?
我们可以将青蛙的速度 0 即可。而如果较慢的青蛙速度是
同时,如果求出
代码较乱,请见谅。如果我讲的那里不清楚,您可以在评论区问,我会经常看的。