zoukankan      html  css  js  c++  java
  • 漂亮字串

    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.
    View Code
  • 相关阅读:
    二分图的最大匹配
    染色法判定二分图
    kruskal求最小生成树
    prim算法求最小生成树
    floyd
    spfa算法
    bellman_ford
    Dijkstra
    文件操作_1-18 选择题
    会话控制_2-5 编程练习
  • 原文地址:https://www.cnblogs.com/ssfzmfy/p/3828415.html
Copyright © 2011-2022 走看看