1.漂亮字串
【题目描述】
Caima认为O和X是最优美的两个字母,由O、X组成的串是最优美的串。在这些最优美的串中,如果任意只包含X的子串,长度不超过maxX,任意只包含O的子串,长度不超过maxO,且整个串最多有countO个O,countX个X。那么这个就是超级优美无敌串。
现在Caima想知道最长的超级优美无敌串有多长,希望你告诉他。
【输入格式】
输入包含多行,至文件结束为止;
每行四个数,依次是countO,countX,maxO,maxX。
【输出格式】
每组数据输出一行,一个数表示最长的超级优美无敌串的长度。
【数据规模】
0<=countO,countX,maxO,maxX<=1000000
【输入样例】
10 10 0 0
3 5 1 1
【输出样例】
0
7
【注意事项】
第二个样例的解释:“XOXOXOX”
最多1000组数据,其中30%的数据0<=countO,countX,maxO,maxX<=20,且数据组数不超过20组
解析:
从整体上对题目进行分析,此题共有三种情况:
(1)0
有一方为0,则结果为另一方的max;
两方都为0,则结果为0;
(2)一方多,另一方不够用,满足(contx+1)*maxo<=counto或则(conto+1)*maxx<=countx
结果为:(contx+1)*maxo+counto (X不够用)
或则
(cont0+1)*maxx+counto (O不够用)
也即,不够用的一方即使每次只取一个作为分隔符都不够用的。
比如,20 5 2 2
则最长的超级优美无敌串为:OOXOOXOOXOOXOOXOO
(3)其它情况,则结果为 maxn+maxm
除去(1)(2)两种特殊情况,则其他情况中所有的字母都可以用上。
比如8 6 3 2
则最长的超级优美无敌串为:OOOXXOOOXXOOXX
1 var 2 countx,counto,maxx,maxo:int64; 3 procedure main; 4 begin 5 if maxo=0 then writeln(maxx) 6 else 7 if maxx=0 then writeln(maxo) 8 else 9 if (counto+1)*maxx<countx then writeln((counto+1)*maxx+counto) 10 else 11 if (countx+1)*maxo<counto then writeln((countx+1)*maxo+countx) 12 else writeln(countx+counto); 13 end; 14 begin 15 while not eof do 16 begin 17 readln(counto,countx,maxo,maxx); 18 main; 19 end; 20 end.