算法这东西还是要先有思路,实现上的细节先不用关心。考虑不能将所有字母排上的情况:
假设'A'的个数<='B'的个数,'A'的个数小于('B'最少的分片数目-1)时,一部分'B'不能继续插入字符串中。
没有连续的两个'A'能让剩余的'B'插入,左边就是最长的字符串。
代码实现:
首先考虑特殊情况,maxA, maxB可能等于0。
求出‘A’,‘B’最小的分片数量,分情况比较。
#include <iostream>
#include <cmath>
using namespace std;
int main(){
int countA,countB,maxA,maxB;
while(cin >> countA >> countB >> maxA >> maxB){
if(maxA == 0 && maxB == 0) cout << 0 << endl;
else if(maxA == 0) cout << min(countB, maxB) <<endl;
else if(maxB == 0) cout << min(countA, maxA) <<endl;
else {
int pa = ceil((double)countA / maxA); //最少将'A'分为几部分
int pb = ceil((double)countB / maxB);
int max = 0;
if(countA<pb-1){
max += countA;
max += (countA+1)*maxB;
}
else if(countB<pa-1){
max += countB;
max += (countB+1)*maxA;
}
else {
max = countA+countB;
}
cout<<max<<endl;
}
}
}