有一根粗细均匀长度为 L 的木棍,先用红颜色刻度线将它 m 等分,再用蓝色刻度线将其 n 等分(m>n),然后按所有刻度线将该木棍锯成小段,计算并输出长度最长的木棍的长度和棍数。
输入格式
输入仅有一行,包含三个正整数 L,m 和 n,两两之间用一个空格分隔。(1≤L≤100000)
输出格式
输出包含两个正整数 a 和 k,分别表示最长木棍的长度和根数。(为了简化题目的难度,所有的测试数据中 m 和 n 一定是
L 的约数)。两数之间用一个空格分隔
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(){
int l;
cin>>l;
int m,n;
cin>>m>>n;
bool cut[l+1];//锯后
int length[l+1];//锯后长度
for(int i=0;i<=l;i++){
cut[i]=false;
length[i]=0;
}
for(int i=0;i<=l;i+=l/m){
cut[i]=true;
}
for(int i=0;i<=l;i+=l/n){
cut[i]=true;
}
int left=0;
//切割总有个左右吧;
for(int right=1;right<=l;right++){
if(cut[right]==true){
length[right-left]++;
left=right;
}
}
int max=0;
for(int i=1;i<=l;i++){
if(length[i]>0){
max=i;
}
}
cout<<max<<" "<<length[max]<<endl;
return 0;
}