自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zfprotectors的博客

相互学习,共同进步

  • 博客(70)
  • 收藏
  • 关注

原创 Mac升级至Monterey系统后Alfred工具失效

前提将Macbook系统升级至macOS Monterey后,使用Alfred创建的快捷脚本Youdao Translate时发现报错了,经过查看发现该脚本是调用Mac自带的php执行的。于是搜索发现:Monterey OS已经移除了自带的php,包括php文档也间接说明了这个情况。于是使用homebrew进行安装phpbrew install php安装完之后,运行命令查找php所安装的位置> which php/usr/local/bin/php确定后,更改脚本语言的位置

2021-10-28 15:28:42 3380 3

原创 【深入理解计算机操作系统】ch1 计算机系统漫游

计算机系统是由硬件和系统软件组成的,他们共同工作来运行应用程序。大家都熟知hello world程序,但是为了让它实现运行,系统的每个主要组成部分都需要协调工作。#include <stdio.h>int main(){ printf("hello,world\n"); return 0;}从某种意义上来说,本书的目的就是为了帮助你了解当你在系统上执行he...

2020-02-26 11:37:30 334

原创 【代码整洁之道-程序员的职业素养】

1.1 清楚你要什么明确自己想要什么,因为专业主义不但象征着荣誉与骄傲,而且要明确责任和义务。既然你想当专业主义,就要承受它所应当的责任。而专业主义的精髓在于将公司利益视同个人利益,即你出发的角度应该是从专业的角度去看待问题,从公司的角度去获取利益。1.2 担当责任既然要有专业主义,你就得为你的代码而承担责任,对例行程序进行测试,毕竟专业人士写的代码,一旦发现错误,你就得为你的代码错误承担责...

2020-02-19 22:24:59 1225

原创 【设计模式】行为型模式-Interpreter模式

功能给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子解决主要解决:对于一些固定文法构建一个解释句子的解释器何时使用:如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。如何解决:构建语法树,定义终结符与非终结符关键代码:构建环境类,包...

2020-02-18 21:34:36 114

原创 【设计模式】行为型模式-Iterator模式

功能提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示解决主要解决:不同的方式来遍历整个整合对象何时使用:遍历一个聚合对象如何解决:把在元素之间游走的责任交给迭代器,而不是聚合对象关键代码:定义接口:hasNext, next优缺点优点:它支持以不同的方式遍历一个聚合对象迭代器简化了聚合类在同一个聚合上可以有多个遍历在迭代器模式中,增加新的聚...

2020-02-17 21:50:56 113

原创 【设计模式】行为型模式-Chain of Responsibility模式

功能避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止解决主要解决:职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。何时使用:在处理消息的时候以过滤很多道如何解决:拦截的类都实现统一接口关键代码:Handl...

2020-02-16 20:47:58 115

原创 【设计模式】行为型模式-Visitor模式

功能主要将数据结构与数据操作分离解决主要解决:稳定的数据结构和易变的操作耦合问题何时使用:需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作"污染"这些对象的类,使用访问者模式将这些封装到类中如何解决:在被访问的类里面加一个对外提供接待访问者的接口关键代码:在数据基础类里面有一个方法接受访问者,将自身引用传入访问者优缺点优点:符合单一职责原则...

2020-02-15 16:29:42 120

原创 【设计模式】行为型模式-Command模式

功能将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。解决主要解决:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适何时使用:在某些场合,比如要对行为进行"记录、撤销/重做、事务"等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将"行为请求者"...

2020-02-15 15:51:18 75

原创 【设计模式】行为型模式-Mediator模式

功能用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互解决主要解决:对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理何时使用:多个类相互耦合,形成了网状结构如何解决:将上述网状结构分离为星型结构关键代码:对象 Col...

2020-02-14 17:14:45 72

原创 【设计模式】行为型模式-Memento模式

功能在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态解决主要解决:所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态何时使用:很多时候我们总是需要记录一个对象的内部状态,这样做的目的就是为了允许用户取消不确定或者错误的操作,能够恢复到他原先的状态,使得他有"后悔药"可吃。如何解决...

2020-02-14 11:46:32 88

原创 【设计模式】行为型模式-Observer模式

功能定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新解决主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作何时使用:一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。如何解决:使用面向对象技术,可以将这种依赖关系弱化关键代码:在抽象类里有一个 Arra...

2020-02-13 16:40:30 112

原创 【设计模式】行为型模式-State模式

功能允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类解决主要解决:对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为何时使用:代码中包含大量与对象状态有关的条件语句如何解决:将各种具体的状态类抽象出来关键代码:状态模式的接口中有一个或者多个方法优缺点优点:封装了转换规则枚举可能的状态,在枚举状态之前需要确定状态种类将所有与...

2020-02-13 15:03:21 75

原创 【设计模式】行为型模式-Strategy模式

功能定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换解决主要解决:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为如何解决:将这些算法封装成一个一个的类,任意地替换关键代码:实现同一个接口优缺点优点:算法可以自由切换避免使用多重条件判断扩展性良好缺点:策略类会增...

2020-02-12 21:11:05 84

原创 【设计模式】行为型模式-Template模式

功能定义一个操作中的算法的骨架,而将一些步骤延迟到子类中解决主要解决:一些方法通用,却在每一个子类都重新写了这一方法何时使用:有一些通用的方法如何解决:将这些通用算法抽象出来关键代码:在抽象类实现,其他步骤在子类实现优缺点优点:封装不变部分,扩展可变部分提取公共代码,便于维护行为由父类控制,子类实现缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使...

2020-02-11 22:09:00 60

原创 【设计模式】结构型模式-Proxy模式

功能为其他对象提供一种代理以控制对这个对象的访问解决主要解决:在直接访问对象时带来的问题何时使用:想在访问一个类时做一些控制如何解决:增加中间层关键代码:实现与被代理类组合优缺点优点:职责清晰高扩展性智能化缺点:请求的处理速度变慢需要额外的工作量应用场景应用实例:Windows 里面的快捷方式。猪八戒去找高翠兰结果是孙悟空变的,可以这样理...

2020-02-11 21:06:47 80

原创 【设计模式】结构型模式-Facade模式

功能为子系统中的一组接口提供一个一致的界面解决主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。何时使用:客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。定义系统的入口。如何解决:客户端不与系统耦合,外观类与系统耦合关键代码:在客户端和复杂系统之间再加一层,这一层将调用顺序、依赖关系等处理好。优缺点优点:减少系统相互...

2020-02-10 22:34:50 97

原创 【设计模式】结构型模式-Flyweight模式

功能运用共享技术有效地支持大量细粒度的对象。解决主要解决:有大量对象,可能造成内存溢出何时使用:系统中有大量对象对象消耗大量内存对象的状态大部分可以外部化对象可以按照内蕴状态分为很多组,当把外蕴对象从对象中剔除出来时,每一组对象都可以用一个对象来代替系统不依赖于这些对象身份,这些对象是不可分辨的如何解决:用唯一标识码判断,如果在内存中有,则返回这个唯一标识码所标识的对象...

2020-02-10 20:53:34 255

原创 【设计模式】结构型模式-Composite模式

功能将对象组合成树形结构以表示"部分-整体"的层次结构。解决主要解决:它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。何时使用:您想表示对象的部分-整体层次结构(树形结构)。您希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。如何解决:树枝和叶子实现统一...

2020-02-09 21:29:27 99

原创 【设计模式】结构型模式-Decorator模式

功能允许向一个现有的对象添加新的功能,同时又不改变其结构。解决主要解决:为扩展一个类经常使用继承方法实现何时使用:在不想增加很多子类的情况下扩展类如何解决:将具体功能职责划分,同时继承装饰者模式关键代码:Component 类充当抽象角色,不应该具体实现。修饰类引用和继承 Component 类,具体扩展类重写父类方法。优缺点优点:装饰类和被装饰类可以独立发展,不会...

2020-02-08 21:01:36 86

原创 【设计模式】结构型模式-Adapter模式

功能负责加入独立的或者不兼容的接口功能解决主要解决:主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的。何时使用:系统需要使用现有的类,而此类的接口不符合系统的需要。想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。通过接口转换,将一个类插入另一个...

2020-02-07 20:44:13 117

原创 【设计模式】结构型模式-Bridge模式

功能将抽象部分与实现部分分离,使它们都可以独立的变化解决主要解决:在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活何时使用:实现系统可能有多个角度分类,每一种角度都可能变化如何解决:把这种多角度分类分离出来,让它们独立变化,减少它们之间耦合关键代码:抽象类依赖实现类优缺点优点:抽象和实现的分离优秀的扩展能力实现细节对客户透明缺点:增加系统的理解...

2019-12-30 18:15:01 72

原创 【设计模式】创建型模式-Prototype模式

原型模式是用于创建重复的对象,同时又能保证性能功能用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。解决主要解决:在运行期建立和删除原型。何时使用:当一个系统应该独立于它的产品创建,构成和表示时当要实例化的类是在运行时刻指定时,例如,通过动态装载为了避免创建一个与产品类层次平行的工厂类层次时当一个类的实例只能有几个不同状态组合中的一种时如何解决:利用已有的...

2019-12-25 16:50:58 79

原创 【设计模式】创建型模式-Sington模式

这个模式设计到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建,提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。注意:单例类只能有一个实例单例类必须自己创建自己的唯一实例单例类必须给所有其他对象提供这一实例功能保证一个类仅有一个实例,并提供一个它的全局访问点解决主要解决:一个全局使用的类频繁地创建与销毁何时使用:当你想要控制实例数目,...

2019-12-20 17:10:05 291

原创 【设计模式】创建型模式-Builder模式

建造者模式使用多个简单的对象一步一步构建成复杂的对象功能将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示解决主要解决:在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。何时使用:一些基本部件不会变,而其组合经常变化的时候。...

2019-12-19 15:56:04 82

原创 【设计模式】创建型模式-Abstract Factory模式

功能提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类解决主要解决:主要解决接口选择的问题何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品如何解决:在一个产品族里面,定义多个产品关键代码:在一个工厂里聚合多个同类产品与工厂方法的区别工厂方法是在解决一个产品多个层级方面的事情抽象工厂致力于解决多个产品多个层级方面的是事情优缺点优点:保证...

2019-12-18 14:36:37 77

原创 【设计模式】创建型模式-Factory模式

功能定义创建对象的接口,封装了对象的创建使得具体化类的工作延迟到了子类中解决主要解决:解决接口选择问题何时使用:明确地计划不同条件下创建不同实例时关键代码:创建过程在其子类执行优缺点优点:创建对象时只需知道创建名称即可扩展性高封装性好缺点:增加复杂度增加了系统具体类的依赖应用场景应用实例:你要做一个披萨,我只需要知道披萨的名字,具体怎么...

2019-12-17 18:18:11 88

原创 【设计模式】1 引言

什么是设计模式Christopher Alexander说过:“每一个模式描述描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动。”碰到模式,我们通常会问模式的名称?它是干嘛用的?能解决什么问题?它的优势在哪里?于是乎也就有了一个模式的四个基本要素:模式名称(pattern name):一个助记名,方便人们能够统一的称...

2019-12-16 18:18:33 144

原创 codeforces 2C-Commentator problem

题意给定三个圆坐标以及半径,求一个点坐标,使得点三个圆的视角相等题解数学方法解几何问题:给定三个圆,找一个点,使得这三个圆的视角相等玄学之模拟退火(代码部分)知识点模拟退火代码#include<cstdio>#include<cmath> int f;double s,dx,dy,x[3],y[3],r[3],t[3...

2019-12-04 11:07:17 136

原创 codeforces 2B-The least round way

题意n阶数字矩阵,从左上第一个数,到右下最后一个数,只能向右或向下走,经过的数字进行相乘,求最后结果尾数为0最少的路径题解若要相乘之后结果有0有两种情况相乘的数中包含2和5,即要求经过2或5最少的路径经过0时,无论其他数为多少,最后都为1个0,因此要记录好0的位置,此处要特判若相乘之后没有0,无疑是最好的利用动态规划,通过题意写出转移方程:D[r,c] = min(D[r...

2019-10-31 22:22:31 130

原创 codeforces 2A-Winner

题意n轮比赛,记录选手“姓名 得分”,比赛结束后,输出得分最高的选手姓名,如果有同分,则输出第一个获得得分最高的选手姓名题解使用STL的map进行姓名和得分匹配,记录选手的最后得分p遍历后获得最大得分maxn重新进行轮次遍历,若选手最后得分超过最大值maxn,并且轮次遍历过程中的得分超过最大值maxn,则输出该选手的姓名并跳出遍历。由于存在得分为负的情况,所以判断条件需大等于max...

2019-10-31 22:19:10 136

原创 codeforces 1C-Ancient Berland Circus

题意给定一个正多边形的三个顶点,求这个正多边形的最小面积题解确定多边形的任意三点组成的三角形的外接圆与多边形的外接圆相同,而正多边形的边数越多,越接近外接圆,面积越大,即问题转化问求多边形的最大边数,之后利用多边形公式即可求出。已知三个点坐标x,y,z,并通过xyz三点优先计算其三条边a,b,c通过海伦公式计算三角形的面积S通过三角形外接圆与多边形外接圆相同可知,利用外接圆半径公式计...

2019-10-30 11:15:14 113

原创 codeforces 1B-Spreadsheets

题意有两种表达方式:一种是RxCy,表示有x行C列。另一种是字母加数字,例如BC23,代表23行,55列(BC为26进制转化,A为1,即BC=26x2+3)题解判断输入的两种转态:RxCy:行数x直接输出,列数y进行转换为26进制的字母字母+数字:先获取前面的字母,然后通过的进制转换为数字,剩下的字符直接输出知识点解决判断给定的输入是哪种类型使用sscanf进行格式化输入...

2019-10-30 10:36:36 182

原创 codeforces 1A-Theatre Square

题意nxm的正方形广场至少需要多少块axa的石板题解计算每边最少需要多少个石板,之后相乘即可。sum=⌈m/a⌉∗⌈n/a⌉sum= \left \lceil {m/a}\right \rceil *\left \lceil n/a \right \rceilsum=⌈m/a⌉∗⌈n/a⌉当然,也能将ceil进行转换,则公式为:sum=((m+a-1)/a) x (n+a-1)/a...

2019-10-30 10:28:49 171

原创 UVA10250 - The Other Two Trees

问题描述已知A,B两点的坐标,求C,D的坐标,其中AB·CD==-1(两条线段垂直平分)思路百度学习了一个定理,然后将A,B两点移动到以原点为中点,然后带入公式后AC(测试结果和样例不一样)已知对任意平面向量AB=(x,y),把向量AB绕其起点沿逆时针方向旋转角a得到向量AP=(x*cosa-y*sina,x*sina+y*cosa).代码#include <iostream>#include

2016-09-22 21:48:14 228

原创 UVA10420 - List of Conquests

问题描述输入国名和英文名,然后统计出每个国家人出现的次数并按国家排序。思路学习c++中的stl的map,从而能够将字符串和数值匹配起来(其中存入map中的字符串会按字典序进行排列)。代码#include <iostream>#include <map>#include <string>using namespace std;int main(){ int n; string

2016-09-22 20:10:14 207

原创 UVA340 - Master-Mind Hints

问题描述猜数字,先给定四个数,然后再输入四个数,如果数字和位置一致,则a++,如果数字正确,则为b++,结果输出(a,b)思路学习了map以后,发现可以将各种数据类型联系起来,先记录正确数值,在开始判断数值且位置相等,则A++,然后计算总共猜对了B个数后结果为(A,B-A)代码#include <cstdio>#include <iostream>#include <algorithm>#in

2016-09-18 01:18:13 248

原创 UVA748 - Exponentiation

问题描述求小数R的n次方,且小数点前的0删除。思路将小数点舍去看成n个大数R相乘,之后再输出小数点。代码#include <cstdio>#include <cstring>#include <string>#include <algorithm>#include <iostream>using namespace std;const int maxn=1000;struct bign

2016-09-06 02:51:00 281

原创 UVA10494 - If We Were a Child Again

问题描述输入两个数求余和求模的结果思路套用大数模板。。代码#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>using namespace std;const int maxn=1000;struct bign{ int len,s[maxn]; bign() {

2016-09-06 01:30:36 214

原创 UVA465 - Overflow

问题描述判断两个数以及相加或相乘的结果是否超出int类型值得范围思路套用刘汝佳的大数模板,结果遇到两个错误。 Runtime Error:开的数组太小了(不懂具体开多少),尽量开大。 Wrong Answer:开始计算前应当注意清除两个大数的前缀0(但是输出的时候应是原样输出)。代码#include <cstdio>#include <cstring>#include <algorithm>

2016-09-06 01:15:27 251 1

原创 UVA10106 - Product

问题描述求两个大数相乘的积。思路套用刘汝佳的《算法竞赛入门经典》的大数模板,实用,可惜代码有点长。代码#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>using namespace std;const int maxn=600; //一个数为最大为250,因此乘积因大于500str

2016-09-06 00:23:09 212

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除