水果糖

工厂方法、抽象工厂、简单工厂

北城余情 提交于 2020-03-24 11:01:46
昨天公司有同事分享了设计模式的一些内容,主要讲了简单工厂,抽象工厂,工厂方法的东西,讲的时候听得不是很明白,就像自己上网调查,并且写一篇博客加深自己的印象 抽象工厂:   抽象工厂是对应类这个概念的,也就是说一个类就是一个工厂。一个类里边可以有很多方法,这个是毋庸置疑的,而方法最多只能有一个返回值,假如这个类里边有三个方法,每个方法都一个返回值的话,那么对应抽象工厂来讲就是一个工厂里边有好多的产品线,每个产品线都可以生产一个产品,那么一个工厂就可以生产好多产品。   刚才讲的好像跟<抽象>没什么关系,那抽象是怎么体现出来的呢,类是怎么抽象的?提取一些事物的共同特征称其为抽象,像C#里边的接口,抽象类,都是抽象的概念,其实类也是一种抽象,对象才是真真正正具体的东西,就像我们讲<工厂> 他就是一个抽象概念,比如说小明家旁边有两家工厂,一个水泥厂,一个水果糖厂(这两个好像挨着不太好) 你可以说小明家旁边的<水泥厂>是<工厂>,但是你不能说<工厂>是小明家旁边的<水泥厂>,概念颠倒了,小明家旁边的的水果糖厂也是工厂啊。好还是用刚才的例子来举例,用这两种东西来举例有点难,但是咱们就硬着头皮上吧。比如说水泥厂要生产水泥有三种选择,A,B,C型水泥,对应不同的档次,同时呢水果糖厂也有三种选择,A,B,C型水果糖,对应不同的档次,现在我们要生产产品,但是这个水泥和水果糖找共同特征有点难

吃糖果

风格不统一 提交于 2020-02-06 16:56:22
原题链接 # include <iostream> # include <cstdio> # include <queue> # include <cstring> # include <algorithm> using namespace std; /*很容易想到根据每种颜色糖果总数量从多到少排序,若总数量相同,则按水果糖数量从 多到少排序计数。但是当出现三组数据 5 5、 4 6、3 6 时,三组总数量依次为 10、10、9, 先吃完第一组 5 颗水果糖和 5 颗巧克力后,注意此时虽然第二组的总数量也为 10,但是可 以选择吃第二组的 4 颗水果糖和 5 颗巧克力,这样既避免与第一组总数量相同的冲突,又 最大化糖果总数量且吃了尽可能少的巧克力。接着再吃第三组的 3 颗水果糖与 5 颗巧克力。 所以,可以建立一个优先队列来存储糖果数量信息,还是按照之前的规则排序,当数量 出现冲突的时候,将总数量减一,再压入队列里,重新参与排序。数量不冲突的时候,即可 计数。*/ struct Suger { int sum, f; bool operator < (const Suger &s) const { return sum!=s.sum ? sum<s.sum : f<s.f; } }; int main() { //freopen("2.in", "r", stdin); int T