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;
    }
    
  • 相关阅读:
    openOPC与监控页面二
    Node教程——Gulp前端构建工具-教程
    回到顶部插件
    《软件测试52讲》——测试基础知识篇
    计算贝塞尔曲线上点坐标
    少年,不要滥用箭头函数啊
    JS属性defer
    leetcode-572-另一个树的子树
    leetcode-9.-回文数
    leetcode-300-最长上升子序列
  • 原文地址:https://www.cnblogs.com/iss-ue/p/12635944.html
Copyright © 2011-2022 走看看