2503. 最长字符串
Constraints
Time Limit: 1 secs, Memory Limit: 256 MB
Description
要求你构造一个由字符’A’,’B’组成的字符串, 满足以下几个条件:
1) A的个数<=countA
2) B的个数<=countB
3) 连续的A的个数不可以超过maxA.
4) 连续的B的个数不可以超过maxB.
5) 这个字符串的长度最长.
给你countA,countB,maxA,maxB,要求你输出字符串的最大长度.
Input
输入只有一行, 4个数分别为countA, countB, maxA, maxB. 0<=countA,countB,maxA,maxB<=1000000.
Output
输出只有一个数, 为字符串的最大长度.
Sample Input
3 5 1 1
Sample Output
7
Problem Source
黄金周赛——省赛最后的冲刺
题目应该不算太难,就是我奇葩的自以为是的分割。
其实当maxA,maxB都不为0的时候,countA和countB小的那一个肯定会全部排列。
// Problem#: 2503
// Submission#: 1986664
// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
// URI: http://creativecommons.org/licenses/by-nc-sa/3.0/
// All Copyright reserved by Informatic Lab of Sun Yat-sen University
#include<iostream>
#include<stdio.h>
using namespace std;
int main(){
int n;
int countA,countB,maxA,maxB;
cin>>countA>>countB>>maxA>>maxB;
int sum=0;
int time;
if(countA<countB){
if(maxA==0){
sum=maxB;
}
else if((countA%maxA)==0){
time=countA+1;
if(maxB*time>countB){
sum=countA+countB;
}
else{
sum=countA+maxB*time;
}
}
else{
time=countA+1;
if(maxB*time>countB){
sum=countA+countB;
}
else{
sum=countA+maxB*time;
}
}
}
else{
if(maxB==0){
sum=maxA;
}
else if((countB%maxB)==0){
time=countB+1;
if(maxA*time>countA){
sum=countA+countB;
}
else{
sum=countB+maxA*time;
}
}
else{
time=countB+1;
if(maxA*time>countA){
sum=countA+countB;
}
else{
sum=countB+maxA*time;
}
}
}
cout<<sum<<endl;
return 0;
}