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

    (核心思路就是分情况讨论)

    从整体上对题目进行分析,此题共有三种情况:

    (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

    (我的理解是这样的)

    (首先明确一点,最长的串长为maxx+maxo)

    (而且这是两种字母刚好用完的情况)

    (那我们先考虑一方不够用的情况)

    (也就是把少的那个字母每次只用一个作为分隔符依然不够用)

    (此时少的字母全部用完,多的字母是最大分割数,肯定最优)

    (特殊的,可能存在一方为0的情况,特判)

    (其余情况可以全部用完,为maxx+maxo)

    #include <iostream>
    using namespace std;
    int main()
    {
    	long long o,x,maxx,maxo;
    	while(cin>>maxo>>maxx>>o>>x)
    	{
    		if(o==0||maxo==0)	cout<<min(maxx,x);
    		else if(x==0||maxx==0)	cout<<min(maxo,o);
    		else if((maxx+1)*o<maxo)	cout<<(maxx+1)*o+maxx;
    		else if((maxo+1)*x<maxx)	cout<<(maxo+1)*x+maxo;
    		else cout<<maxx+maxo;//全部用完
    		cout<<endl; 
    	}
    	return 0;
    }
    
  • 相关阅读:
    SGU438_The Glorious Karlutka River =)
    SGU326_Perspective
    Problem B. Harvest of Apples(莫队+数学)
    【HDU2019多校】1005
    【HDU2019多校】K
    L
    「2017 山东一轮集训 Day2」Pair (霍尔定理+线段树)
    【2017西安】Sum of xor sum(线段树)
    【2017西安】 XOR (线性基+思维)
    【SPOJ】Lightning Conductor (dp+决策单调性)
  • 原文地址:https://www.cnblogs.com/iss-ue/p/12635944.html
Copyright © 2011-2022 走看看